string regionPath = mRegionFileInfo.Path;
string linePath = MEntity.Path;
DataTable dt = new DataTable();
dt.Columns.Add("地名");
dt.Columns.Add("长度");
double totalLength = 0;
//分别获取Polyline和Polygon的要素类
IFeatureLayer pFeatureLayerPolyline = Lib.Layer.getShpLayer(linePath, "polygon");
IFeatureLayer pFeatureLayerPolygon = Lib.Layer.getShpLayer(regionPath, "line");
IFeatureClass pFeatureClassPolyline = pFeatureLayerPolyline.FeatureClass;
IFeatureClass pFeatureClassPolygon = pFeatureLayerPolygon.FeatureClass;
progressBar1.Maximum = pFeatureClassPolygon.FeatureCount(null);
progressBar1.Value = 0;
IFeatureCursor pPolyCursor = pFeatureClassPolygon.Search(null, false);
IFeature pPolyFeature = pPolyCursor.NextFeature();
int nameIndex = pPolyFeature.Fields.FindField(mRegionFileInfo.TitleColumn);
while (pPolyFeature != null)
{
Application.DoEvents();
progressBar1.Value++;
totalLength = 0;
//IFeature pFeaturePolygon = pFeatureClassPolygon.GetFeature(18);
IPolygon pPolygon = pPolyFeature.ShapeCopy as IPolygon;
//获取线要素类的所有要素
IFeatureCursor pFeatureCursorPolyline = pFeatureClassPolyline.Search(new QueryFilterClass(), false);
IFeature pFeaturePolyline = pFeatureCursorPolyline.NextFeature();
//遍历每一个线要素
while (pFeaturePolyline != null)
{
//求该线与某个面要素相交的几何线段
IPolyline pPolyline = pFeaturePolyline.ShapeCopy as IPolyline;
ITopologicalOperator pTopologicalOperator = pPolyline as ITopologicalOperator;
IPolyline pPolylineResult =
pTopologicalOperator.Intersect(pPolygon, esriGeometryDimension.esriGeometry1Dimension) as
IPolyline;
//累加面内线要素几何线段的长度
totalLength += pPolylineResult.Length;
pFeaturePolyline = pFeatureCursorPolyline.NextFeature();
}
DataRow dr = dt.NewRow();
dr[0] = pPolyFeature.get_Value(nameIndex);
dr[1] = totalLength;
dt.Rows.Add(dr);
// MessageBox.Show(totalLength.ToString());
pPolyFeature= pPolyCursor.NextFeature();
}
dataGridView1.DataSource = dt;