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;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值