计算arcengine 线要素和面要素相交,每个面所截的线段长度

 

       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;

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值