1. 程式人生 > >arcengine 兩個圖層疊加獲得,獲得地區圖層中各地區的對應的型別的面積

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