Eu quero usar o método IsNear do IRelationalOperator2. A documentação diz que GeometryBag suporta a interface IRelationalOperator2. Mas isso simplesmente não funciona e resulta em uma exceção "... incapaz de converter o objeto COM ... Nenhuma interface é suportada ..."
IRelationalOperator2 relationalOperator = (IRelationalOperator2)geometry;
O mesmo código funciona bem com IRelationalOperator, mas não há método IsNear:
IRelationalOperator relationalOperator = (IRelationalOperator)geometry;
O que está errado - o código, a documentação ou é um bug? "geometry" é uma geometria do tipo de geometria esriGeometryBag e contém algumas polilinhas. Eu usei o elenco direto para obter a exceção do .NET.
arcgis-10.0
arcobjects
Georg Haefele
fonte
fonte
Respostas:
Definitivamente, há algo suspeito acontecendo com o 10.0 sp2.
Posso converter um pacote de geometria para IRelationalOperator2, caso contrário, este teste diria "incapaz de converter", além de receber uma exceção de referência nula.
No entanto, na primeira chamada para IsNear, recebo a exceção.
Aqui está o teste:
Aqui está outro teste. Observe como posso transmitir sem uma exceção, mas recebo uma exceção InvalidCast ao chamar IsNear.
fonte
Eu acho que é um erro com a documentação, pois um GeometryBag é uma coleção de pontos / linhas / polígonos. Realizar algumas operações do ITopologicalOperator em uma coleção mista e combinada de tipos de geometria pode ser impossível. Se você usou uma coleção de polilinhas IGeometry, acho que sua solução funcionaria.
fonte