Ich möchte die IsNear-Methode von IRelationalOperator2 verwenden. Die Dokumentation besagt, dass GeometryBag die IRelationalOperator2-Schnittstelle unterstützt. Dies funktioniert jedoch einfach nicht und führt zu einer Ausnahme "... COM-Objekt kann nicht umgewandelt werden ... Keine solche Schnittstelle unterstützt ..."
IRelationalOperator2 relationalOperator = (IRelationalOperator2)geometry;
Der gleiche Code funktioniert gut mit IRelationalOperator, aber es gibt keine IsNear-Methode:
IRelationalOperator relationalOperator = (IRelationalOperator)geometry;
Was ist falsch - der Code, die Dokumentation oder ist es ein Fehler? "Geometrie" ist eine Geometrie vom Geometrietyp esriGeometryBag und enthält einige Polylinien. Ich habe die gerade Besetzung verwendet, um die .NET-Ausnahme zu erhalten.
arcgis-10.0
arcobjects
Georg Haefele
quelle
quelle
Antworten:
Mit 10.0 sp2 ist hier definitiv etwas faul los.
Ich kann einen Geometriebeutel in IRelationalOperator2 umwandeln, andernfalls würde dieser Test "nicht umsetzbar" bedeuten, und ich würde eine Nullreferenzausnahme erhalten.
Beim ersten Aufruf von IsNear erhalte ich jedoch die Ausnahme.
Hier ist der Test:
Hier ist ein weiterer Test. Beachten Sie, wie ich ohne Ausnahme umwandeln kann, aber beim Aufrufen von IsNear eine InvalidCast-Ausnahme erhalten kann.
quelle
Ich würde vermuten, dass es ein Fehler in der Dokumentation ist, da ein GeometryBag eine Sammlung von Punkten / Linien / Polygonen ist. Es kann unmöglich sein, einige ITopologicalOperator-Operationen für eine gemischte und angepasste Sammlung von Geometrietypen durchzuführen. Wenn Sie eine IGeometryCollection von Polylinien verwenden würden, würde Ihre Lösung meiner Meinung nach funktionieren.
quelle