Площадь пересечения объектов

0 голосов
спросил 28 Июнь, 11 от Devyatyy (240 баллов) в категории Программные продукты Esri
Есть процедурка, которая вычисляет площадь пересечения. Входящие параметры - два слоя. В первом слое выделен объект. Надо найти площадь пересечения с объектами второго слоя.

Когда (по ошибке) послал в процедуру один и тот же слой 2 раза, он показал площадь выбранного объекта из этого слоя. Когда посылаю ему разные слои, определяет набор объектов второго слоя с которыми есть пересечение верно, но не срабатывает

pArea = (IArea)pTopologicalOperator.Intersect(pSecondFeat.Shape, esriGeometryDimension.esriGeometry2Dimension);

т.е. не определяет площадь пересечения.
Выдает Error 0x80040215.

Кто может подсказать в чем может быть проблема?

        private void GetIntersectingAreas(IFeatureLayer pFirstLayer, IFeatureLayer pSecondLayer)
        {
            IMxDocument pDoc;
            pDoc = (IMxDocument)m_application.Document;
            IMap pMap;
            pMap = pDoc.FocusMap;
            
            IFeatureClass pFirstFClass;
            IFeatureSelection pFirstFeatSel;
            ISelectionSet pFirstSelSet;
            ICursor pFirstFCursor;
            IFeature pFirstFeature;

            pFirstFClass = pFirstLayer.FeatureClass;
            pFirstFeatSel = (IFeatureSelection)pFirstLayer;
            pFirstSelSet = pFirstFeatSel.SelectionSet;
            QueryFilter qf = new QueryFilter();
            IQueryFilter iqf = (IQueryFilter)qf;

            pFirstSelSet.Search(iqf, false, out pFirstFCursor);

            IFeatureClass pSecondFClass;
            IFeatureSelection pSecondSel;
            ISelectionSet pSecondSelSet;
            IFeatureCursor pSecondCur;
            IFeature pSecondFeat;
           
            pSecondFClass = pSecondLayer.FeatureClass;

            IFeatureCursor pFFC = (IFeatureCursor)pFirstFCursor;
            pFirstFeature = pFFC.NextFeature();
           
            ISpatialFilter pSf;
            IArea pArea;
            IPoint pCentroid;
            IRelationalOperator pRelOp;
   
            while (pFirstFeature != null)
            {
                pSf = new SpatialFilter();
                pSf.Geometry = pFirstFeature.Shape;
                pSf.SpatialRel =  esriSpatialRelEnum.esriSpatialRelIntersects;
                pSf.GeometryField = pFirstFClass.ShapeFieldName;

                pRelOp = (IRelationalOperator)pFirstFeature.Shape;
                pSecondSel = (IFeatureSelection)pSecondLayer;

                pSecondSelSet = pSecondSel.SelectionSet;
               
                pSecondCur = pSecondFClass.Search(pSf, false);
                int i = 0;
                pSecondFeat = pSecondCur.NextFeature();
                while (pSecondFeat != null)
                {
                    ITopologicalOperator2 pTopologicalOperator = (ITopologicalOperator2)pFirstFeature.ShapeCopy;

                    try
                    {
                        i++;
                        pArea = (IArea)pTopologicalOperator.Intersect(pSecondFeat.Shape, esriGeometryDimension.esriGeometry2Dimension);
                        MessageBox.Show(String.Format("{0:0.000}", pArea.Area));
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                    }
                    MessageBox.Show(pSecondFeat.OID.ToString());
                    pSecondFeat = pSecondCur.NextFeature();
                }
                pFirstFeature = pFFC.NextFeature();
      &nb

2 Ответы

0 голосов
ответил 28 Июнь, 11 от TDenis (42,620 баллов)
А слои в одной и той же СК?
0 голосов
ответил 28 Июнь, 11 от Devyatyy (240 баллов)
Нет, были в разных СК, даже в трех, уже разобрался с этим почти сразу после того как написал вопрос.

Спасибо.
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...