Je souhaite utiliser la méthode IsNear de IRelationalOperator2. La documentation indique que GeometryBag prend en charge l'interface IRelationalOperator2. Mais cela ne fonctionne tout simplement pas et entraîne une exception "... impossible de caster un objet COM ... Aucune interface de ce type n'est prise en charge ..."
IRelationalOperator2 relationalOperator = (IRelationalOperator2)geometry;
Le même code fonctionne correctement avec IRelationalOperator mais il n'y a pas de méthode IsNear:
IRelationalOperator relationalOperator = (IRelationalOperator)geometry;
Quel est le problème - le code, la documentation ou est-ce un bug? "geometry" est une géométrie de type géométrie esriGeometryBag et contient des polylignes. J'ai utilisé la distribution directe pour obtenir l'exception .NET.
arcgis-10.0
arcobjects
Georg Haefele
la source
la source
Réponses:
Il y a certainement quelque chose de louche ici avec 10.0 sp2.
Je peux lancer un sac de géométrie sur IRelationalOperator2, sinon ce test dirait "incapable de lancer", plus j'obtiendrais une exception de référence nulle.
Cependant, lors du premier appel à IsNear, je reçois l'exception.
Voici le test:
Voici un autre test. Remarquez comment je peux caster sans exception, mais obtenez une exception InvalidCast lors de l'appel à IsNear.
la source
Je suppose que c'est un bug avec la documentation car un GeometryBag est une collection de points / lignes / polygones. Il peut être impossible d'effectuer certaines opérations ITopologicalOperator sur une collection mixte et adaptée de types de géométrie. Si vous avez utilisé un IGeometryCollection de polylignes, je pense que votre solution fonctionnerait.
la source