Quiero usar el método IsNear de IRelationalOperator2. La documentación dice que GeometryBag es compatible con la interfaz IRelationalOperator2. Pero esto simplemente no funciona y da como resultado una excepción "... no se puede lanzar un objeto COM ... No se admite dicha interfaz ..."
IRelationalOperator2 relationalOperator = (IRelationalOperator2)geometry;
El mismo código funciona bien con IRelationalOperator pero no hay un método IsNear:
IRelationalOperator relationalOperator = (IRelationalOperator)geometry;
¿Qué está mal? ¿El código, la documentación o es un error? "geometry" es una geometría de tipo geometría esriGeometryBag y contiene algunas polilíneas. Usé el elenco directo para obtener la excepción .NET.
arcgis-10.0
arcobjects
Georg Haefele
fuente
fuente
Respuestas:
Definitivamente hay algo sospechoso aquí con 10.0 sp2.
Puedo lanzar una bolsa de geometría a IRelationalOperator2, de lo contrario esta prueba diría "no se puede lanzar", además obtendría una excepción de referencia nula.
Sin embargo, en la primera llamada a IsNear recibo la excepción.
Aquí está la prueba:
Aquí hay otra prueba. Observe cómo puedo enviar contenido sin una excepción, pero obtenga una excepción InvalidCast cuando llame a IsNear.
fuente
Supongo que es un error con la documentación ya que GeometryBag es una colección de puntos / líneas / polígonos. Hacer algunas operaciones de ITopologicalOperator en una colección mixta y combinada de tipos de geometría podría ser imposible. Si usó una colección de polilíneas IGeometryCollection, creo que su solución funcionaría.
fuente