arcengine 两个图层叠加获得,获得地区图层中各地区的对应的类型的面积
/// <summary>
/// 两个图层叠加获得,获得地区图层中各地区的对应的类型的面积
/// </summary>
/// <param name="pathArea">边界</param>
/// <param name="pathType">类型</param>
/// <param name="areaNameColumn">名字</param>
/// <param name="typeColumn">类型字段</param>
private DataTable getTypeAreaPerRange(string pathArea, string pathType, string areaNameColumn, string typeColumn)
{
DataTable dt = new DataTable();
dt.Columns.Add("地名");
dt.Columns.Add("长度");
// HashTable hs = new HashTable();
//分别获取Polyline和Polygon的要素类
IFeatureLayer pFeatureLayerPolygonArea = Lib.Layer.getShpLayer(pathArea, "polygon1");
IFeatureLayer pFeatureLayerPolygonType = Lib.Layer.getShpLayer(pathType, "polygon2");
IFeatureClass pFeatureClassPolygonArea = pFeatureLayerPolygonArea.FeatureClass;
IFeatureClass pFeatureClassPolygonType = pFeatureLayerPolygonType.FeatureClass;
IFeatureCursor pPolyCursor = pFeatureClassPolygonArea.Search(null, false);
IFeature pPolyFeature = pPolyCursor.NextFeature();
int nameIndex = pPolyFeature.Fields.FindField(areaNameColumn);
while (pPolyFeature != null)
{
Application.DoEvents();
//IFeature pFeaturePolygon = pFeatureClassPolygon.GetFeature(18);
IPolygon pPolygon = pPolyFeature.ShapeCopy as IPolygon;
//获取线要素类的所有要素
IFeatureCursor pFeatureCursorPolyType = pFeatureClassPolygonType.Search(new QueryFilterClass(), false);
IFeature pFeaturePolyType = pFeatureCursorPolyType.NextFeature();
//遍历每一个线要素
double totalArea = 0;
while (pFeaturePolyType != null)
{
//求该线与某个面要素相交的几何线段
IPolygon pPolyType = pFeaturePolyType.ShapeCopy as IPolygon;
ITopologicalOperator pTopologicalOperator = pPolyType as ITopologicalOperator;
IGeometry Geo =
pTopologicalOperator.Intersect(pPolygon, esriGeometryDimension.esriGeometry2Dimension);
IFeatureBuffer FeaBuffer = pFeatureClassPolygonType.CreateFeatureBuffer();
FeaBuffer.Shape = Geo;
IArea pArea = (IArea)FeaBuffer.Shape;
totalArea += pArea.Area;
//累加面内线要素几何线段的长度
pFeaturePolyType = pFeatureCursorPolyType.NextFeature();
}
DataRow dr = dt.NewRow();
dr[0] = pPolyFeature.get_Value(nameIndex);
dr[1] = totalArea;
dt.Rows.Add(dr);
// MessageBox.Show(totalLength.ToString());
pPolyFeature = pPolyCursor.NextFeature();
}
dataGridView1.DataSource = dt;
tabControl1.SelectTab(tabPage2);
return dt;
}
转载自:https://blog.csdn.net/tianxinzhe032/article/details/6660108