arcgis面重叠检查.docx_第1页
arcgis面重叠检查.docx_第2页
arcgis面重叠检查.docx_第3页
arcgis面重叠检查.docx_第4页
arcgis面重叠检查.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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(OIDi); 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(OIDi);/ 获取目标要素 if (mDesFea = null) continue; IRelationalOperator pRelation = mDesFea.Shape as IRelationalOperator; /几何关系 if (pRelation.Equals(pOrgFeaGeo) /判断空间位置是否重合 if (pOrgFea.OID = OIDi) continue;/如果是同一个要素就跳出 if (BeSameProperties1(pOrgFea, mDesFea) 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; private bool BeSameProperties1(IFeature pOrgFea, IFeature mDesFea) bool b = true; string fieldNames = ; /字段字符串返回值 for (int m = 0; m mDesFea.Fields.FieldCount; m+) IField pField = mDesFea.Fields.get_Field(m); /字段 if (pField = null) continue; if (pField.Type = esriFieldType.esriFieldTypeOID) continue;/OID 字段排除 if (pField.Type = esriFieldType.esriFieldTypeGeometry) continue;/Geometry 排除 if (pField.Name.ToUpper().StartsWith(SHAPE) continue; string pfieldName = pField.Name; fieldNames += pfieldName + ,; fieldNames = fieldNames.Substring(0, fieldNames.Length - 1);/所有字段的字符串 string fieldsArr = fieldNames.Split(new char , );/需要检查的字段数组 int orgindex = -1; int desindex = -1; for (int j = 0; j fieldsArr.Length; j+) orgindex = pOrgFea.Fields.FindField(fieldsArrj); desindex = mDesFea.Fields.FindField(fieldsArrj); if (pOrgFea.get_Value(orgindex).ToString() != mDesFea.get_Value(desindex).ToString() return false; /属性不一致; return b; public DataTable DataCheck1(IFeatureClass pFeaCls, out Exception pError) DataTable dt = null; pError = null; dt = new DataTable(); dt.Columns.Add(源图层名); dt.Columns.Add(源要素OID); dt.Columns.Add(目标图层名); dt.Columns.Add(目标要素OID); IFeatureCursor pCursor = pFeaCls.Search(null, false); IFeature pFea = pCursor.NextFeature(); List LstFea = new List(); while (pFea != null) if (!LstFea.Contains(pFea) LstFea.Add(pFea); pFea = pCursor.NextFeature(); foreach (IFeature pOrgFea in LstFea) foreach (IFeature pDesFea in LstFea) if (pOrgFea.OID = pDesFea.OID) continue; /判断空间位置是否重合,若重合,则进行线面的检查 IGeometry pGeo=pOrgFea.Shape; IRelationalOperator pRelation = pDesFea.Shape as IRelationalOperator; /几何关系 if (pRelation.Equals(pGeo) /检查属性是否一致 if (BeSameProperties(pOrgFea, pDesFea) DataRow dr = dt.NewRow(); dr源图层名 = pOrgFea.Class.AliasName; /显示错误信息 dr源要素OID = pOrgFea.OID; dr目标图层名 = pDesFea.Class.AliasName; dr目标要素OID = pDesFea.OID; dt.Rows.Add(dr); return dt; private bool BeSameProperties(IFeature pOrgFea, IFeature pDesFea) bool beSucced = true; for (int i = 0; i pOrgFea.Fields.FieldCount; i+) if (pOrgFea.Fields.get_Field(i).Type = esriFieldType.esriFieldTypeOID) continue; if (pOrgFea.Fields.get_F

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论