Я хочу использовать метод IsNear IRelationalOperator2. В документации говорится, что GeometryBag поддерживает интерфейс IRelationalOperator2. Но это просто не работает и приводит к исключению "... невозможно преобразовать COM-объект ... Такой интерфейс не поддерживается ..."
IRelationalOperator2 relationalOperator = (IRelationalOperator2)geometry;
Тот же код отлично работает с IRelationalOperator, но метод IsNear отсутствует:
IRelationalOperator relationalOperator = (IRelationalOperator)geometry;
Что не так - код, документация или это баг? «geometry» - это геометрия типа esriGeometryBag и содержит несколько полилиний. Я использовал прямое приведение, чтобы получить исключение .NET.
arcgis-10.0
arcobjects
Георг Хефеле
источник
источник
Ответы:
Здесь определенно что-то подозрительное происходит с 10.0 sp2.
Я могу привести геометрическую сумку к IRelationalOperator2, в противном случае этот тест скажет «невозможно привести», плюс я получу исключение нулевой ссылки.
Однако при первом звонке в IsNear я получаю исключение.
Вот тест:
Вот еще один тест. Обратите внимание, как я могу привести без исключения, но получить исключение InvalidCast при вызове IsNear.
источник
Я полагаю, что это ошибка в документации, поскольку GeometryBag - это набор точек / линий / многоугольников. Выполнение некоторых операций ITopologicalOperator в смешанной и согласованной коллекции геометрических типов может быть невозможным. Если бы вы использовали IGeometryCollection полилиний, хотя я думаю, что ваше решение будет работать.
источник