Есть процедурка, которая вычисляет площадь пересечения. Входящие параметры - два слоя. В первом слое выделен объект. Надо найти площадь пересечения с объектами второго слоя.
Когда (по ошибке) послал в процедуру один и тот же слой 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