Suite

L'utilisation de la méthode d'intersection d'ItopologicalOperator donne l'erreur 0x80040239?


Je voudrais croiser un polygone et une polyligne pour savoir si la polyligne est dans le polygone.

Le code fonctionne mais quand je le fais plus de 100 000 fois dans un for, il y a cette erreur :

System.Runtime.InteropServices.COMException (0x80040239) : Exception de HRESULT : 0x80040239 à ESRI.ArcGIS.Geometry.ITopologicalOperator.Intersect(IGeometry other, esriGeometryDimension resultDimension)

Mon code :

ITopologicalOperator4 topoOperateur = secteurPsr.Shape as ITopologicalOperator4; topoOperateur.IsKnownSimple_2 = false; topoOperateur.Simplify(); IGeometry geomPsr = currentPsr.Value.Shape; IPolyline polylinePsr = geomPsr comme IPolyline; (geomPsr comme ITopologicalOperator2).Simplify(); IGeometry geomResult = null; try { geomResult = topoOperateur.Intersect(geomPsr,esriGeometryDimension.esriGeometry1Dimension); }

J'ai trouvé la solution chez ArcObjects : fuite de mémoire dans IFeatureClass.Search (uniquement sur SDE avec connexion directe)

Correction des codes :

ITopologicalOperator4 topoOperateur = ((IClone)secteurPsr.Shape).Clone() as ITopologicalOperator4; IGeometry geomPsr = ((IClone)currentPsr.Value.Shape).Clone(); IPolyline polylinePsr = geomPsr comme IPolyline; IGeometry geomResult = null; geomResult = topoOperateur.Intersect(geomPsr, esriGeometryDimension.esriGeometry1Dimension); if (geomPsr != null) Marshal.FinalReleaseComObject(geomPsr ); if (topoOperateur != null) Marshal.FinalReleaseComObject(topoOperateur);