文档详情

arcgis面重叠检查.docx

夏**
实名认证
店铺
DOCX
15.86KB
约7页
文档ID:539789535
arcgis面重叠检查.docx_第1页
1/7

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.DataSourcesGDB;using ESRI.ArcGIS.Geodatabase;namespace PolygonCoveredPolygon{ public class PolygonCoveredPolygon { //* 功能函数:面重叠检查 //* 参 数:源图层、目标图层 //* 返 回 值:检查结果(源图层名、源要素OID、目标图层名、目标要素的OID) public DataTable DataCheck(IFeatureClass orgFeaCls, IFeatureClass desFeaCls, out Exception outError) { DataTable dt = null; outError = null; if (orgFeaCls.ShapeType != esriGeometryType.esriGeometryPolygon) return null; //源图层不是面 if (desFeaCls.ShapeType != esriGeometryType.esriGeometryPolygon) return null; //目标图层不是面 dt = new DataTable(); dt.Columns.Add("源图层名"); dt.Columns.Add("源要素OID"); dt.Columns.Add("目标图层"); dt.Columns.Add("目标要素OID"); //查找源要素 IFeatureCursor pOrgCursor = orgFeaCls.Search(null, false); IFeature pOrgFea = pOrgCursor.NextFeature();//源要素 //查找目标要素 IFeatureCursor pDesCursor = desFeaCls.Search(null, false); IFeature pDesFea = pDesCursor.NextFeature(); //目标要素 List OID = new List(); //要保存目标的OID while (pDesFea != null) { if(!OID.Contains(pDesFea.OID)) { OID.Add(pDesFea.OID); } pDesFea = pDesCursor.NextFeature(); } if(OID==null||OID.Count<=0) return null; while (pOrgFea!= null) //源要素不为空 { IGeometry pOrgFeaGeo = pOrgFea.Shape; //源要素的几何形状 for (int i = 0; i < OID.Count; i++) { IFeature mDesFea=desFeaCls.GetFeature(OID[i]); if(mDesFea==null) continue; IRelationalOperator pRelation = mDesFea.Shape as IRelationalOperator; if (pRelation.Overlaps(pOrgFeaGeo)) //判断 源要素和目标要素 是否重叠 如果面重叠 { DataRow dr = dt.NewRow(); dr["源图层名"] = pOrgFea.Class.AliasName; dr["源要素OID"] = pOrgFea.OID; dr["目标图层"] = mDesFea.Class.AliasName; dr["目标要素OID"] = mDesFea.OID; dt.Rows.Add(dr); } } pOrgFea = pOrgCursor.NextFeature(); } return dt; } }}using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.DataSourcesGDB;using ESRI.ArcGIS.Geodatabase; namespace LineCoveredCheck{ public class LineCoveredCheckCls { //* 功能函数:重复性检查 //* 参 数:源图层、目标图层 //* 返 回 值:检查结果(源图层名、源要素OID、目标图层名、目标要素OID) public DataTable DataCheck(IFeatureClass orgFeaCls, IFeatureClass desFeaCls, out Exception outError) { DataTable dt = null; outError = null; dt = new DataTable(); dt.Columns.Add("源图层名"); dt.Columns.Add("源要素OID"); dt.Columns.Add("目标图层名"); dt.Columns.Add("目标要素OID"); //查找源要素 IFeatureCursor pOrgCursor = orgFeaCls.Search(null, false); IFeature pOrgFea = pOrgCursor.NextFeature(); //源要素 //查找目标要素 IFeatureCursor pDesCursor = desFeaCls.Search(null, false); IFeature pDesFea = pDesCursor.NextFeature(); //源要素 List OID = new List(); //保存目标要素的OID while (pDesFea != null) { if (!OID.Contains(pDesFea.OID)) { OID.Add(pDesFea.OID); } pDesFea = pDesCursor.NextFeature(); } if (OID == null || OID.Count <= 0) return null; while (pOrgFea != null) //源要素不为空 { IGeometry pOrgFeaGeo = pOrgFea.Shape; //源要素的几何形状 for (int i = 0; i < OID.Count; i++) //循环目标要素 { IFeature mDesFea = desFeaCls.GetFeature(OID[i]);// 获取目标要素 if (mDesFea == null) continue; IRelationalOperator pRelation = mDesFea.Shape as IRelationalOperator; //几何关系 if (pRelation.Equals(pOrgFeaGeo)) //判断空间位置是否重合 { if (pOrgFea.OID == OID[i]) continue;//如果是同一个要素就跳出 if (BeSameProperties1(pOrgFea, mDesFea)) { DataRow dr = dt.New。

下载提示
相似文档
正为您匹配相似的精品文档