using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using Kingo.RuleCheck.CheckHelper; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Kingo.RuleCheck.XJRuleCheck { /// /// 城镇村属性上图检查 /// public class CZCSXCheck_DTB : RuleCheckBase_DTB { /// /// 下发城镇村等用地字典值 /// private string key_czcdyd = "CZCDYDI"; public static List ruleMethodNames = new List() { //"CZC201","CZC203","CZC211","CZC212","CZC213","CZC214","CZC221","CZC222", //"CZC001","CZC002","CZC101","CZC301","CZC302","CZC303","CZC304","CZC305","CZC306","CZC401","CZC402","CZC403","CZC404","CZC501","CZC502","CZC503","CZC504","CZC505","CZC506","CZC20X" "CZC001","CZC002","CZC101","CZC20X" }; public override List ExcuteCheck(string sourePath, IWorkspace workspace) { return this.StartCheck(sourePath, workspace, ruleMethodNames); } public override List ExcuteCheck(IWorkspace workspace, List layerNames, List dataSetNames) { return this.StartCheck(workspace, ruleMethodNames, layerNames, dataSetNames); } public override List ExcuteCheck(string sourePath, Dictionary workspace) { return this.StartCheck(sourePath, workspace, ruleMethodNames); } public override List ExcuteCheck(string tbbsm, string sourePath, Dictionary workspace) { return this.StartCheck(tbbsm, sourePath, workspace, ruleMethodNames); } public List CZC001() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "地类编码为1001、1002、1003、1007、1008、1009、1109的图斑,城镇村属性码字段必须为空。", ErrorType = "一类错误", RuleCode = "CZC001", RuleName = "线状地物城镇村属性赋值情况检查" }; try { string sql = $"select BSM from DTBDLTBGX where tbbsm='{TBBSM}' and dlbm in ('1001','1001A','1002','1002A','1003','1003A','1004A','1007','1008','1009','1109') and CZCSXM is not null and czcsxm<>''"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return null; foreach (DataRow item in dt.Rows) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item[0].ToString(), BGFWBSM = item[0].ToString(), ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC002() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "地类编码为88类、99类的图斑,城镇村属性码字段必须为空。", ErrorType = "一类错误", RuleCode = "CZC002", RuleName = "特殊地类城镇村属性赋值情况检查" }; try { string sql = $"select BSM from DTBDLTBGX where tbbsm='{TBBSM}' and dlbm in ('8801','9902','9903','9905') and CZCSXM is not null and czcsxm<>''"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return null; foreach (DataRow item in dt.Rows) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item[0].ToString(), BGFWBSM = item[0].ToString(), ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC101() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "非建设用地,单图斑阶段不得标注201A、202A、204、205。", ErrorType = "一类错误", RuleCode = "CZC101", RuleName = "非建设用地标注城镇村属性情况检查" }; try { string sql = $"select BSM from DTBDLTBGX where tbbsm='{TBBSM}' and dlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201','1001','1002','1003','1007','1008','1009','1109') and CZCSXM in ('201A','202A','204','205')"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return null; foreach (DataRow item in dt.Rows) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item[0].ToString(), BGFWBSM = item[0].ToString(), ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC20X() { List result = new List(); try { List Sljslist = new List { "05H1", "0508", "0601", "0602", "0603", "0701", "0702", "08H1", "08H2", "08H2A", "0809", "0810", "0810A", "09", "1004", "1005", "1201" }; List Slfjslist = new List { "05H1", "0508", "0601", "0602", "0603", "0701", "0702", "08H1", "08H2", "08H2A", "0809", "0810", "0810A", "09", "1004", "1005", "1201", "1001", "1002", "1003", "1007", "1008", "1009", "1109" }; List Blfjslist= new List { "05H1", "0508", "0601", "0602", "0603", "0701", "0702", "08H1", "08H2", "08H2A", "0809", "0810", "0810A", "09", "1004", "1005", "1201", "1001", "1001A", "1002","1002A", "1003", "1003A","1004A", "1007", "1008", "1009", "1109" }; DataTable dataTable = SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, $"select d.bsm,w.gjdlbm,d.dlbm,d.bz from DTBDLTBGX d left join wyrw w on d.tbbsm=w.tbbsm where d.tbbsm='{this.TBBSM}'"); if (dataTable == null || dataTable.Rows.Count <= 0) return result; foreach (DataRow item in dataTable.Rows) { string slType = string.Empty; string BLType = string.Empty; string bsm = item["bsm"].ToString(); string gjdlbm = item["gjdlbm"].ToString(); string dlbm= item["dlbm"].ToString(); if (Sljslist.Contains(gjdlbm)) slType = "SL_JS"; if (!Slfjslist.Contains(gjdlbm)) slType = "SL_FJS"; if (Sljslist.Contains(dlbm)) BLType = "BL_JS"; if(!Blfjslist.Contains(dlbm)) BLType = "BL_FJS"; if (dlbm != gjdlbm && BLType == "BL_JS" && slType == "SL_JS") { RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = bsm, BGFWBSM = bsm, ErrorTip = "原则上地类相对上轮数据库发生变化,但均属于建设用地的图斑,城镇村属性码应与上轮保持一致。", ErrorType = "二类错误", RuleCode = "CZC201", RuleName = "相对于上轮发生建设用地内部变化城镇村属性标注检查", RuleContent = "原则上地类相对上轮数据库发生变化,但均属于建设用地的图斑,城镇村属性码应与上轮保持一致" }; result.Add(ruleEntity); } if (dlbm != gjdlbm && BLType == "BL_FJS" && slType == "SL_FJS") { RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = bsm, BGFWBSM = bsm, ErrorTip = "原则上地类相对上轮数据库发生变化,但均属于非建设用地的图斑,城镇村属性码应与上轮保持一致。", ErrorType = "二类错误", RuleCode = "CZC202", RuleName = "相对于上轮发生建设用地内部变化城镇村属性标注检查", RuleContent = "原则上地类相对上轮数据库发生变化,但均属于非建设用地的图斑,城镇村属性码应与上轮保持一致。" }; result.Add(ruleEntity); } if (dlbm != gjdlbm && BLType == "BL_FJS" && slType == "SL_JS") { RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = bsm, BGFWBSM = bsm, ErrorTip = "原则上地类相对上轮数据库发生建设用地更新为非建设用地的情况,城镇村属性应参照CZCDYDI层进行标注。", ErrorType = "二类错误", RuleCode = "CZC203", RuleName = "相对于上轮发生建设用地内部变化城镇村属性标注检查", RuleContent = "原则上地类相对上轮数据库发生建设用地更新为非建设用地的情况,城镇村属性应参照CZCDYDI层进行标注。" }; result.Add(ruleEntity); } if (dlbm == gjdlbm &&(item["bz"].ToString()=="9904"|| item["bz"].ToString() == "9905"|| item["bz"].ToString() == "8801")) { RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", BGFWBSM = bsm, ErrorTip = "地类保持一致的国家意见图斑,城镇村属性待核查。", ErrorType = "二类错误", RuleCode = "CZC204", RuleName = "相对于上轮发生建设用地内部变化城镇村属性标注检查", RuleContent = "地类保持一致的国家意见图斑,城镇村属性待核查。" }; result.Add(ruleEntity); } } } catch (Exception ex ) { RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "原则上地类相对上轮数据库发生变化,但均属于建设用地的图斑,城镇村属性码应与上轮保持一致。规则检查失败:" + ex.Message, ErrorType = "二类错误", RuleCode = "CZC20X", RuleName = "相对于上轮发生建设用地内部变化城镇村属性标注检查", RuleContent = "原则上地类相对上轮数据库发生变化,但均属于建设用地的图斑,城镇村属性码应与上轮保持一致" }; result.Add(ruleEntity); } return result; } //public List CZC201() //{ // List rst = new List(); // RuleEntity ruleEntity = new RuleEntity() // { // CheckObject = "DTBDLTBGX", // ErrorId = this.TBBSM, // ErrorTip = "位于三调203范围内的图斑,若实地现状为非建设用地,不得保留203属性。", // ErrorType = "一类错误", // RuleCode = "CZC201", // RuleName = "非建设用地保留203情况检查" // }; // RuleEntity ruleEntity202 = new RuleEntity() // { // CheckObject = "DTBDLTBGX", // ErrorId = this.TBBSM, // ErrorTip = "10平方米以下三调203属性保留合理性检查", // ErrorType = "二类错误", // RuleCode = "CZC202", // RuleName = "10平方米以下三调203属性保留合理性检查" // }; // IFeatureClass sdczc_dltbFeatureClass = null; // IGeometry dltbGXgeo = null; // IFeatureCursor pCursor = null; // IFeature feature = null; // try // { // if (!DicFeatureClass.ContainsKey(key_czcdyd) || DicFeatureClass[key_czcdyd] == null) // { // throw new Exception("未找到“下发城镇村等用地”参考图层!"); // } // sdczc_dltbFeatureClass = DicFeatureClass[key_czcdyd]; // ISpatialReference spatialReference = (sdczc_dltbFeatureClass as IGeoDataset).SpatialReference; // if (spatialReference == null) // { // throw new Exception("下发城镇村等用地数据坐标参考为空,质检失败!"); // } // if (sdczc_dltbFeatureClass.Fields.FindField("CZSX") == -1) // throw new Exception("“下发城镇村等用地”参考图层 未包含CZSX字段"); // ISpatialFilter spatialFilter = new SpatialFilterClass // { // SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects, // WhereClause = "CZCLX ='203' and CZSX = '三调村庄范围'" // }; // string sql = $"select bghtbbsm,egeometry from dtbdltbgxgc where tbbsm = '{TBBSM}' and bghdlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201','1001','1002','1003','1007','1008','1009','1109') and bgqczcsxm='203' and bghczcsxm='203'"; // DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); // if (dt == null || dt.Rows.Count <= 0) // return rst; // List lisCZC201 = new List(); // List lisCZC202 = new List(); // foreach (DataRow item in dt.Rows) // { // dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(item["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); // spatialFilter.Geometry = dltbGXgeo; // pCursor = sdczc_dltbFeatureClass.Search(spatialFilter, true); // while ((feature = pCursor.NextFeature()) != null) // { // IGeometry geoInter = CheckHelper.CommonHelper.InterSect(feature.ShapeCopy, dltbGXgeo); // IArea area = geoInter as IArea; // if (area != null) // { // if (area.Area > 10) // { // lisCZC201.Add(item[0].ToString()); // } // else // { // lisCZC202.Add(item[0].ToString()); // } // } // } // } // lisCZC201 = lisCZC201.Distinct().ToList(); // lisCZC202 = lisCZC202.Distinct().ToList(); // foreach (var item in lisCZC201) // { // rst.Add(new RuleEntity() // { // CheckObject = ruleEntity.CheckObject, // ErrorId = item, // BGFWBSM = item, // ErrorTip = ruleEntity.ErrorTip, // ErrorType = ruleEntity.ErrorType, // RuleCode = ruleEntity.RuleCode, // RuleName = ruleEntity.RuleName, // RuleContent = ruleEntity.RuleContent, // }); // } // foreach (var item in lisCZC202) // { // rst.Add(new RuleEntity() // { // CheckObject = ruleEntity202.CheckObject, // ErrorId = item, // BGFWBSM = item, // ErrorTip = ruleEntity202.ErrorTip, // ErrorType = ruleEntity202.ErrorType, // RuleCode = ruleEntity202.RuleCode, // RuleName = ruleEntity202.RuleName, // RuleContent = ruleEntity202.RuleContent, // }); // } // } // catch (Exception ex) // { // ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; // rst.Add(ruleEntity); // } // return rst; //} //public List CZC203() //{ // List rst = new List(); // RuleEntity ruleEntity = new RuleEntity() // { // CheckObject = "DTBDLTBGX", // ErrorId = this.TBBSM, // ErrorTip = "疑似203边缘建设用地拆除图斑保留203属性合理性检查", // ErrorType = "二类错误", // RuleCode = "CZC203", // RuleName = "疑似203边缘建设用地拆除图斑保留203属性合理性检查" // }; // IFeatureClass sdczc_dltbFeatureClass = null; //三调203 // IFeatureClass edczc_dltbFeatureClass = null; //二调203 // IGeometry dltbGXgeo = null; // IFeatureCursor pCursor = null; // IFeature feature = null; // try // { // var wsFactory = new ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactory(); // var workspace = wsFactory.OpenFromFile(@"D:\2022变更修改\单图斑建库软件\城镇村等用地参考图层\441204高要区.gdb", 0); // DicFeatureClass = new Dictionary(); // DicFeatureClass["CZCDYD"] = (workspace as IFeatureWorkspace).OpenFeatureClass("CZCDYDI"); // string sql1 = $"select * from dtbdltbgxgc where tbbsm = '{TBBSM}'"; // DataTable dtt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql1); // InsertTB(dtt); // if (!DicFeatureClass.ContainsKey(key_czcdyd) || DicFeatureClass[key_czcdyd] == null) // { // throw new Exception("未找到“下发城镇村等用地”参考图层!"); // } // sdczc_dltbFeatureClass = DicFeatureClass[key_czcdyd]; // edczc_dltbFeatureClass = DicFeatureClass[key_czcdyd]; // ISpatialReference spatialReference = (sdczc_dltbFeatureClass as IGeoDataset).SpatialReference; // if (spatialReference == null) // { // throw new Exception("下发城镇村等用地数据坐标参考为空,质检失败!"); // } // if (sdczc_dltbFeatureClass.Fields.FindField("CZSX") == -1) // throw new Exception("“下发城镇村等用地”参考图层 未包含CZSX字段"); // ISpatialFilter spatialFilter = new SpatialFilterClass // { // SpatialRel = esriSpatialRelEnum.esriSpatialRelOverlaps, //覆盖 // WhereClause = "CZCLX ='203' and CZSX = '三调村庄范围'" // }; // string sql = $"select bghtbbsm,egeometry from dtbdltbgxgc where tbbsm = '{TBBSM}' and bghdlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201','1001','1002','1003','1007','1008','1009','1109') and bgqczcsxm='203' and bghczcsxm='203'"; // DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); // if (dt == null || dt.Rows.Count <= 0) // return rst; // //DTBDLTBGXGC层图斑,变更前地类编码为05H1、0508、0601、0602、0603、0701、0702、08H1、08H2、08H2A、0809、0810、0810A、09、1004、1005、1201其中之一 // string sql2 = $"select bghtbbsm,egeometry from dtbdltbgxgc where tbbsm = '{TBBSM}' and bgqdlbm in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201')"; // DataTable dt2 = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql2); // if (dt2 == null || dt2.Rows.Count <= 0) // return rst; // Dictionary dic = new Dictionary(); // IEnumerable> result2 = dt2.Rows.Cast().GroupBy(dr => dr["bghtbbsm"].ToString()); // foreach (IGrouping ig in result2) // { // IGeometryCollection geometries = new GeometryBagClass(); // ITopologicalOperator gxgcTopological = new PolygonClass(); // foreach (DataRow dr in ig) // { // dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); // geometries.AddGeometry(dltbGXgeo); // } // //融合 // gxgcTopological.ConstructUnion(geometries as IEnumGeometry); // IGeometry pGeoC = gxgcTopological as IGeometry; // dic[ig.Key] = pGeoC; // } // List lisCZC203 = new List(); // IEnumerable> result = dt.Rows.Cast().GroupBy(dr => dr["bghtbbsm"].ToString()); // foreach (IGrouping ig in result) // { // IGeometryCollection geometries = new GeometryBagClass(); // ITopologicalOperator gxgcTopological = new PolygonClass(); // foreach (DataRow dr in ig) // { // dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); // //在B中,若该类型图斑均与三调203范围均不重叠, // spatialFilter.Geometry = dltbGXgeo; // pCursor = sdczc_dltbFeatureClass.Search(spatialFilter, true); // feature = pCursor.NextFeature(); // if (feature == null) // { // geometries.AddGeometry(dltbGXgeo); // } // } // //将B进行融合,形成C // gxgcTopological.ConstructUnion(geometries as IEnumGeometry); // IGeometry pGeoC = gxgcTopological as IGeometry; // //若C存在图斑与二调203范围共边的情况 // ISpatialFilter sped = new SpatialFilterClass // { // //SpatialRel = esriSpatialRelEnum.esriSpatialRelWithin, //共边 // WhereClause = "CZCLX ='203' and CZSX = '二调村庄范围'", // SpatialRel = esriSpatialRelEnum.esriSpatialRelRelation // }; // sped.SpatialRelDescription = "TF**T****"; // sped.Geometry = pGeoC; // var aa= (pGeoC as IArea).Area; // IFeatureCursor cursorEdczc = edczc_dltbFeatureClass.Search(sped, true); // IFeature featureEdczc = null; // while ((featureEdczc = cursorEdczc.NextFeature()) != null) // { // //提取与其共边的DTBDLTBGXGC层图斑,若变更前地类编码为05H1、0508、0601、0602、0603、0701、0702、08H1、08H2、08H2A、0809、0810、0810A、09、1004、1005、1201其中之一,相应C中图斑纳入人工核查。 // var cc = featureEdczc.OID; // if (dic.ContainsKey(ig.Key)&&CommonHelper.IsInterSect(featureEdczc.ShapeCopy,dic[ig.Key])) // // { // lisCZC203.Add(ig.Key); // } // } // } // lisCZC203 = lisCZC203.Distinct().ToList(); // foreach (var item in lisCZC203) // { // rst.Add(new RuleEntity() // { // CheckObject = ruleEntity.CheckObject, // ErrorId = item, // BGFWBSM = item, // ErrorTip = ruleEntity.ErrorTip, // ErrorType = ruleEntity.ErrorType, // RuleCode = ruleEntity.RuleCode, // RuleName = ruleEntity.RuleName, // RuleContent = ruleEntity.RuleContent, // }); // } // } // catch (Exception ex) // { // ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; // rst.Add(ruleEntity); // } // return rst; //} //public List CZC211() //{ // List rst = new List(); // RuleEntity ruleEntity = new RuleEntity() // { // CheckObject = "DTBDLTBGX", // ErrorId = this.TBBSM, // ErrorTip = "二调203范围内非边缘拆除图斑,不得去除203属性", // ErrorType = "一类错误", // RuleCode = "CZC211", // RuleName = "二调203范围内非边界拆除图斑去除203属性情况检查" // }; // IFeatureClass edczc_dltbFeatureClass = null; //二调203 // IGeometry dltbGXgeo = null; // IFeatureCursor pCursor = null; // IFeature feature = null; // try // { // if (!DicFeatureClass.ContainsKey(key_czcdyd) || DicFeatureClass[key_czcdyd] == null) // { // throw new Exception("未找到“下发城镇村等用地”参考图层!"); // } // edczc_dltbFeatureClass = DicFeatureClass[key_czcdyd]; // ISpatialReference spatialReference = (edczc_dltbFeatureClass as IGeoDataset).SpatialReference; // if (spatialReference == null) // { // throw new Exception("下发城镇村等用地数据坐标参考为空,质检失败!"); // } // if (edczc_dltbFeatureClass.Fields.FindField("CZSX") == -1) // throw new Exception("“下发城镇村等用地”参考图层 未包含CZSX字段"); // ISpatialFilter spatialFilter = new SpatialFilterClass // { // SpatialRel = esriSpatialRelEnum.esriSpatialRelOverlaps, //覆盖 // WhereClause = "CZCLX ='203' and CZSX = '二调村庄范围'" // }; // //对于任务图斑下DTBDLTBGXGC层中变更后地类编码不为05H1、0508、0601、0602、0603、0701、0702、08H1、08H2、08H2A、0809、0810、0810A、09、1004、1005、1201以及1001、1002、1003、1007、1008、1009、1109的图斑,且变更后城镇村属性码为空的部分,该部分记为A。在A中,提取变更前城镇村属性码为203的部分,该部分记为B。 // string sql = $"select bghtbbsm,egeometry from dtbdltbgxgc where tbbsm = '{TBBSM}' and bghdlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201','1001','1002','1003','1007','1008','1009','1109') and bgqczcsxm='203' and (bghczcsxm='' or bghczcsxm is null)"; // DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); // if (dt == null || dt.Rows.Count <= 0) // return rst; // List lisCZC211 = new List(); // IEnumerable> result = dt.Rows.Cast().GroupBy(dr => dr["bghtbbsm"].ToString()); // foreach (IGrouping ig in result) // { // bool isOverLaps = false; // bool isTouch = false; // foreach (DataRow dr in ig) // { // dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); // //与二调203范围存在重叠 // spatialFilter.Geometry = dltbGXgeo; // pCursor = edczc_dltbFeatureClass.Search(spatialFilter, true); // feature = pCursor.NextFeature(); // if (feature != null) // isOverLaps = true; // //与二调203范围存在共边的情况 // ISpatialFilter sped = new SpatialFilterClass // { // SpatialRel = esriSpatialRelEnum.esriSpatialRelTouches, //共边 // WhereClause = "CZCSXM='203'" // }; // if (edczc_dltbFeatureClass.Search(sped, true).NextFeature() != null) // isTouch = true; // } // if (isOverLaps && !isTouch) // lisCZC211.Add(ig.Key); // } // lisCZC211 = lisCZC211.Distinct().ToList(); // foreach (var item in lisCZC211) // { // rst.Add(new RuleEntity() // { // CheckObject = ruleEntity.CheckObject, // ErrorId = item, // BGFWBSM = item, // ErrorTip = ruleEntity.ErrorTip, // ErrorType = ruleEntity.ErrorType, // RuleCode = ruleEntity.RuleCode, // RuleName = ruleEntity.RuleName, // RuleContent = ruleEntity.RuleContent, // }); // } // } // catch (Exception ex) // { // ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; // rst.Add(ruleEntity); // } // return rst; //} //public List CZC212() //{ // List rst = new List(); // RuleEntity ruleEntity = new RuleEntity() // { // CheckObject = "DTBDLTBGX", // ErrorId = this.TBBSM, // ErrorTip = "二调203范围内非拆除图斑,不得去除203属性。", // ErrorType = "一类错误", // RuleCode = "CZC212", // RuleName = "二调203范围内非拆除图斑去除203情况检查" // }; // IFeatureClass edczc_dltbFeatureClass = null; //二调203 // IGeometry dltbGXgeo = null; // IFeatureCursor pCursor = null; // IFeature feature = null; // try // { // if (!DicFeatureClass.ContainsKey(key_czcdyd) || DicFeatureClass[key_czcdyd] == null) // { // throw new Exception("未找到“下发城镇村等用地”参考图层!"); // } // edczc_dltbFeatureClass = DicFeatureClass[key_czcdyd]; // ISpatialReference spatialReference = (edczc_dltbFeatureClass as IGeoDataset).SpatialReference; // if (spatialReference == null) // { // throw new Exception("下发城镇村等用地数据坐标参考为空,质检失败!"); // } // if (edczc_dltbFeatureClass.Fields.FindField("CZSX") == -1) // throw new Exception("“下发城镇村等用地”参考图层 未包含CZSX字段"); // ISpatialFilter spatialFilter = new SpatialFilterClass // { // SpatialRel = esriSpatialRelEnum.esriSpatialRelOverlaps, //覆盖 // WhereClause = "CZCLX ='203' and CZSX = '二调村庄范围'" // }; // //对于任务图斑下DTBDLTBGXGC层中变更后地类编码不为05H1、0508、0601、0602、0603、0701、0702、08H1、08H2、08H2A、0809、0810、0810A、09、1004、1005、1201以及1001、1002、1003、1007、1008、1009、1109的图斑,且变更后城镇村属性码为空的部分,该部分记为A。在A中,提取变更前城镇村属性码为203的部分,该部分记为B。 且变更前地类不为05类、06类(含0603)、07、08、09、1004、1005、1201,且面积大于10平方米。 // string sql = $"select bghtbbsm,egeometry from dtbdltbgxgc where tbbsm = '{TBBSM}' and bghdlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201','1001','1002','1003','1007','1008','1009','1109') and bgqdlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201') and bgqczcsxm='203' and (bghczcsxm='' or bghczcsxm is null) and bghtbdlmj>10"; // DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); // if (dt == null || dt.Rows.Count <= 0) // return rst; // List lisCZC211 = new List(); // IEnumerable> result = dt.Rows.Cast().GroupBy(dr => dr["bghtbbsm"].ToString()); // foreach (IGrouping ig in result) // { // foreach (DataRow dr in ig) // { // dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); // //与二调203范围存在重叠 // spatialFilter.Geometry = dltbGXgeo; // pCursor = edczc_dltbFeatureClass.Search(spatialFilter, true); // feature = pCursor.NextFeature(); // if (feature != null) // { // lisCZC211.Add(ig.Key); // } // } // } // lisCZC211 = lisCZC211.Distinct().ToList(); // foreach (var item in lisCZC211) // { // rst.Add(new RuleEntity() // { // CheckObject = ruleEntity.CheckObject, // ErrorId = item, // BGFWBSM = item, // ErrorTip = ruleEntity.ErrorTip, // ErrorType = ruleEntity.ErrorType, // RuleCode = ruleEntity.RuleCode, // RuleName = ruleEntity.RuleName, // RuleContent = ruleEntity.RuleContent, // }); // } // } // catch (Exception ex) // { // ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; // rst.Add(ruleEntity); // } // return rst; //} //public List CZC213() //{ // List rst = new List(); // RuleEntity ruleEntity = new RuleEntity() // { // CheckObject = "DTBDLTBGX", // ErrorId = this.TBBSM, // ErrorTip = "二调203范围内疑似迭代图斑,去除203属性合理性检", // ErrorType = "二类错误", // RuleCode = "CZC213", // RuleName = "二调203范围内疑似迭代图斑,去除203属性合理性检查" // }; // IFeatureClass edczc_dltbFeatureClass = null; //二调203 // IGeometry dltbGXgeo = null; // IFeatureCursor pCursor = null; // IFeature feature = null; // try // { // if (!DicFeatureClass.ContainsKey(key_czcdyd) || DicFeatureClass[key_czcdyd] == null) // { // throw new Exception("未找到“下发城镇村等用地”参考图层!"); // } // edczc_dltbFeatureClass = DicFeatureClass[key_czcdyd]; // ISpatialReference spatialReference = (edczc_dltbFeatureClass as IGeoDataset).SpatialReference; // if (spatialReference == null) // { // throw new Exception("下发城镇村等用地数据坐标参考为空,质检失败!"); // } // if (edczc_dltbFeatureClass.Fields.FindField("CZSX") == -1) // throw new Exception("“下发城镇村等用地”参考图层 未包含CZSX字段"); // ISpatialFilter spatialFilter = new SpatialFilterClass // { // SpatialRel = esriSpatialRelEnum.esriSpatialRelOverlaps, //覆盖 // WhereClause = "CZCLX ='203' and CZSX = '二调村庄范围'" // }; // //对于任务图斑下DTBDLTBGXGC层中变更后地类编码不为05H1、0508、0601、0602、0603、0701、0702、08H1、08H2、08H2A、0809、0810、0810A、09、1004、1005、1201以及1001、1002、1003、1007、1008、1009、1109的图斑,且变更后城镇村属性码为空的部分,该部分记为A。在A中,提取变更前城镇村属性码为203的部分,该部分记为B。 且变更前地类不为05类、06类(含0603)、07、08、09、1004、1005、1201,且面积未达到10平方米。 // string sql = $"select bghtbbsm,egeometry from dtbdltbgxgc where tbbsm = '{TBBSM}' and bghdlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201','1001','1002','1003','1007','1008','1009','1109') and bgqdlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201') and bgqczcsxm='203' and (bghczcsxm='' or bghczcsxm is null) and bghtbdlmj<=10"; // DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); // if (dt == null || dt.Rows.Count <= 0) // return rst; // List lisCZC213 = new List(); // IEnumerable> result = dt.Rows.Cast().GroupBy(dr => dr["bghtbbsm"].ToString()); // foreach (IGrouping ig in result) // { // foreach (DataRow dr in ig) // { // dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); // //与二调203范围存在重叠 // spatialFilter.Geometry = dltbGXgeo; // pCursor = edczc_dltbFeatureClass.Search(spatialFilter, true); // feature = pCursor.NextFeature(); // if (feature != null) // { // lisCZC213.Add(ig.Key); // } // } // } // lisCZC213 = lisCZC213.Distinct().ToList(); // foreach (var item in lisCZC213) // { // rst.Add(new RuleEntity() // { // CheckObject = ruleEntity.CheckObject, // ErrorId = item, // BGFWBSM = item, // ErrorTip = ruleEntity.ErrorTip, // ErrorType = ruleEntity.ErrorType, // RuleCode = ruleEntity.RuleCode, // RuleName = ruleEntity.RuleName, // RuleContent = ruleEntity.RuleContent, // }); // } // } // catch (Exception ex) // { // ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; // rst.Add(ruleEntity); // } // return rst; //} //public List CZC214() //{ // List rst = new List(); // RuleEntity ruleEntity = new RuleEntity() // { // CheckObject = "DTBDLTBGX", // ErrorId = this.TBBSM, // ErrorTip = "二调203范围内疑似拆除图斑,不得去除203属性", // ErrorType = "二类错误", // RuleCode = "CZC214", // RuleName = "二调203范围内疑似拆除图斑,不得去除203属性情况检查" // }; // IFeatureClass edczc_dltbFeatureClass = null; //二调203 // IGeometry dltbGXgeo = null; // IFeatureCursor pCursor = null; // IFeature feature = null; // try // { // if (!DicFeatureClass.ContainsKey(key_czcdyd) || DicFeatureClass[key_czcdyd] == null) // { // throw new Exception("未找到“下发城镇村等用地”参考图层!"); // } // edczc_dltbFeatureClass = DicFeatureClass[key_czcdyd]; // ISpatialReference spatialReference = (edczc_dltbFeatureClass as IGeoDataset).SpatialReference; // if (spatialReference == null) // { // throw new Exception("下发城镇村等用地数据坐标参考为空,质检失败!"); // } // if (edczc_dltbFeatureClass.Fields.FindField("CZSX") == -1) // throw new Exception("“下发城镇村等用地”参考图层 未包含CZSX字段"); // ISpatialFilter spatialFilter = new SpatialFilterClass // { // SpatialRel = esriSpatialRelEnum.esriSpatialRelOverlaps, //覆盖 // WhereClause = "CZCLX ='203' and CZSX = '二调村庄范围'" // }; // //对于任务图斑下DTBDLTBGXGC层中变更后地类编码不为05H1、0508、0601、0602、0603、0701、0702、08H1、08H2、08H2A、0809、0810、0810A、09、1004、1005、1201以及1001、1002、1003、1007、1008、1009、1109的图斑,且变更后城镇村属性码为空的部分,该部分记为A。在A中,提取变更前城镇村属性码为203的部分,该部分记为B。 且变更前地类均为05类、06类(含0603)、07、08、09、1004、1005、1201 // string sql = $"select bghtbbsm,egeometry from dtbdltbgxgc where tbbsm = '{TBBSM}' and bghdlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201','1001','1002','1003','1007','1008','1009','1109') and bgqdlbm in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201') and bgqczcsxm='203' and (bghczcsxm='' or bghczcsxm is null)"; // DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); // if (dt == null || dt.Rows.Count <= 0) // return rst; // string sql2 = $"select bghtbbsm,count(1) from dtbdltbgxgc where tbbsm = '{TBBSM}' group by bghtbbsm"; // DataTable dt2 = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql2); // if (dt == null || dt.Rows.Count <= 0) // return rst; // Dictionary dic = new Dictionary(); // foreach (DataRow dr in dt2.Rows) // { // dic[dr[0].ToString()] = Convert.ToInt32(dr[1].ToString()); // } // List lisCZC214 = new List(); // IEnumerable> result = dt.Rows.Cast().GroupBy(dr => dr["bghtbbsm"].ToString()); // foreach (IGrouping ig in result) // { // if (ig.Count() != dic[ig.Key]) // continue; // foreach (DataRow dr in ig) // { // dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); // //与二调203范围存在重叠 // spatialFilter.Geometry = dltbGXgeo; // pCursor = edczc_dltbFeatureClass.Search(spatialFilter, true); // feature = pCursor.NextFeature(); // if (feature != null) // { // lisCZC214.Add(ig.Key); // } // } // } // lisCZC214 = lisCZC214.Distinct().ToList(); // foreach (var item in lisCZC214) // { // rst.Add(new RuleEntity() // { // CheckObject = ruleEntity.CheckObject, // ErrorId = item, // BGFWBSM = item, // ErrorTip = ruleEntity.ErrorTip, // ErrorType = ruleEntity.ErrorType, // RuleCode = ruleEntity.RuleCode, // RuleName = ruleEntity.RuleName, // RuleContent = ruleEntity.RuleContent, // }); // } // } // catch (Exception ex) // { // ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; // rst.Add(ruleEntity); // } // return rst; //} //public List CZC221() //{ // List rst = new List(); // RuleEntity ruleEntity = new RuleEntity() // { // CheckObject = "DTBDLTBGX", // ErrorId = this.TBBSM, // ErrorTip = "新增非建设用地203属性图斑面积不得大于10平方米", // ErrorType = "一类错误", // RuleCode = "CZC221", // RuleName = "新增非建设用地203属性图斑面积检查" // }; // IFeatureClass edczc_dltbFeatureClass = null; //二调203 // IGeometry dltbGXgeo = null; // try // { // if (!DicFeatureClass.ContainsKey("JC_DLTB") || DicFeatureClass["JC_DLTB"] == null) // { // throw new Exception("未找到“基础_地类图斑”参考图层!"); // } // edczc_dltbFeatureClass = DicFeatureClass["JC_DLTB"]; // ISpatialReference spatialReference = (edczc_dltbFeatureClass as IGeoDataset).SpatialReference; // if (spatialReference == null) // { // throw new Exception("基础_地类图斑数据坐标参考为空,质检失败!"); // } // //对于任务图斑下DTBDLTBGXGC层中变更后地类编码不为05H1、0508、0601、0602、0603、0701、0702、08H1、08H2、08H2A、0809、0810、0810A、09、1004、1005、1201以及1001、1002、1003、1007、1008、1009、1109的图斑,且变更后城镇村属性码为203的部分,该部分记为A。在A中,提取变更前城镇村属性码为空的部分,该部分记为B。 // string sql = $"select bghtbbsm,egeometry from dtbdltbgxgc where tbbsm = '{TBBSM}' and bghdlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201','1001','1002','1003','1007','1008','1009','1109') and bghczcsxm='203' and (bgqczcsxm='' or bgqczcsxm is null)"; // DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); // if (dt == null || dt.Rows.Count <= 0) // return rst; // List lisCZC221 = new List(); // IEnumerable> result = dt.Rows.Cast().GroupBy(dr => dr["bghtbbsm"].ToString()); // foreach (IGrouping ig in result) // { // IGeometryCollection geometries = new GeometryBagClass(); // ITopologicalOperator gxgcTopological = new PolygonClass(); // foreach (DataRow dr in ig) // { // dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); // geometries.AddGeometry(dltbGXgeo); // } // //融合 // gxgcTopological.ConstructUnion(geometries as IEnumGeometry); // IGeometry pGeoC = gxgcTopological as IGeometry; // IArea area = pGeoC as IArea; // if (area != null && area.Area >= 10) // lisCZC221.Add(ig.Key); // } // lisCZC221 = lisCZC221.Distinct().ToList(); // foreach (var item in lisCZC221) // { // rst.Add(new RuleEntity() // { // CheckObject = ruleEntity.CheckObject, // ErrorId = item, // BGFWBSM = item, // ErrorTip = ruleEntity.ErrorTip, // ErrorType = ruleEntity.ErrorType, // RuleCode = ruleEntity.RuleCode, // RuleName = ruleEntity.RuleName, // RuleContent = ruleEntity.RuleContent, // }); // } // } // catch (Exception ex) // { // ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; // rst.Add(ruleEntity); // } // return rst; //} //public List CZC222() //{ // List rst = new List(); // RuleEntity ruleEntity = new RuleEntity() // { // CheckObject = "DTBDLTBGX", // ErrorId = this.TBBSM, // ErrorTip = "新增非建设用地203属性图斑必须与203保留图斑共边", // ErrorType = "一类错误", // RuleCode = "CZC222", // RuleName = "新增非建设用地203属性图斑检查" // }; // IFeatureClass sdczc_dltbFeatureClass = null; //三调203 // IGeometry dltbGXgeo = null; // try // { // if (!DicFeatureClass.ContainsKey("JC_DLTB") || DicFeatureClass["JC_DLTB"] == null) // { // throw new Exception("未找到“基础_地类图斑”参考图层!"); // } // sdczc_dltbFeatureClass = DicFeatureClass["JC_DLTB"]; ; // ISpatialReference spatialReference = (sdczc_dltbFeatureClass as IGeoDataset).SpatialReference; // if (spatialReference == null) // { // throw new Exception("基础_地类图斑数据坐标参考为空,质检失败!"); // } // ISpatialFilter spatialFilter = new SpatialFilterClass // { // SpatialRel = esriSpatialRelEnum.esriSpatialRelOverlaps, //覆盖 // WhereClause = "CZCSXM='203'" // }; // //对于任务图斑下DTBDLTBGXGC层中变更后地类编码不为05H1、0508、0601、0602、0603、0701、0702、08H1、08H2、08H2A、0809、0810、0810A、09、1004、1005、1201以及1001、1002、1003、1007、1008、1009、1109的图斑,且变更后城镇村属性码为203的部分,该部分记为A。在A中,提取变更前城镇村属性码为空的部分,该部分记为B。 // string sql = $"select bghtbbsm,egeometry,bghdlbm from dtbdltbgxgc where tbbsm = '{TBBSM}' and bghdlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201','1001','1002','1003','1007','1008','1009','1109') and (bgqczcsxm='' or bgqczcsxm is null) and bghczcsxm='203'"; // DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); // if (dt == null || dt.Rows.Count <= 0) // return rst; // //对于任务图斑下DTBDLTBGXGC层进行提取,提取其中变更前城镇村属性码与变更后城镇村属性码均为203的部分,记为C // string sql2 = $"select bghtbbsm,egeometry,bghdlbm from dtbdltbgxgc where tbbsm = '{TBBSM}' and bgqczcsxm='203' and bghczcsxm='203'"; // DataTable dt2 = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql2); // if (dt2 == null || dt2.Rows.Count <= 0) // return rst; // List> tups = new List>(); // foreach (DataRow dataRow in dt2.Rows) // { // dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dataRow["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); // tups.Add(new Tuple // ( // dataRow[0].ToString(), // dataRow[2].ToString(), // dltbGXgeo // )); // } // List lisCZC222 = new List(); // IEnumerable> result = dt.Rows.Cast().GroupBy(dr => dr["bghtbbsm"].ToString()); // foreach (IGrouping ig in result) // { // IGeometryCollection geometries = new GeometryBagClass(); // ITopologicalOperator gxgcTopological = new PolygonClass(); // bool hasTouch = false; // foreach (DataRow dr in ig) // { // dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); // // 将B与C共边,且共边两侧变更后地类编码相同时,通过检查。否则,认定为错误图斑。 // foreach (var it in tups.Where(x => x.Item2 == dr["bghdlbm"].ToString())) // { // if (CommonHelper.IsAdjacent(dltbGXgeo, it.Item3)) // hasTouch = true; // } // } // if (!hasTouch) // lisCZC222.Add(ig.Key); // } // lisCZC222 = lisCZC222.Distinct().ToList(); // foreach (var item in lisCZC222) // { // rst.Add(new RuleEntity() // { // CheckObject = ruleEntity.CheckObject, // ErrorId = item, // BGFWBSM = item, // ErrorTip = ruleEntity.ErrorTip, // ErrorType = ruleEntity.ErrorType, // RuleCode = ruleEntity.RuleCode, // RuleName = ruleEntity.RuleName, // RuleContent = ruleEntity.RuleContent, // }); // } // } // catch (Exception ex) // { // ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; // rst.Add(ruleEntity); // } // return rst; //} public List CZC301() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "201变更为202情况检查", ErrorType = "二类错误", RuleCode = "CZC301", RuleName = "201变更为202情况检查" }; try { //提取DTBDLTBGXGC层中,变更前城镇村属性码为201,变更后城镇村属性码为202的图斑,纳入人工核查。 string sql = $"select bghtbbsm from dtbdltbgxgc where tbbsm = '{TBBSM}' and bghczcsxm='202' and bgqczcsxm='201'"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; List lisCZC301 = dt.AsEnumerable().Select(x => x[0].ToString()).ToList(); lisCZC301 = lisCZC301.Distinct().ToList(); foreach (var item in lisCZC301) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC302() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "201变更为203情况检查", ErrorType = "二类错误", RuleCode = "CZC302", RuleName = "201变更为203情况检查" }; try { //提取DTBDLTBGXGC层中,变更前城镇村属性码为201,变更后城镇村属性码为203的图斑,纳入人工核查。 string sql = $"select bghtbbsm from dtbdltbgxgc where tbbsm = '{TBBSM}' and bghczcsxm='203' and bgqczcsxm='201'"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; List lisCZC302 = dt.AsEnumerable().Select(x => x[0].ToString()).ToList(); lisCZC302 = lisCZC302.Distinct().ToList(); foreach (var item in lisCZC302) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC303() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "202变更为201情况检查", ErrorType = "二类错误", RuleCode = "CZC303", RuleName = "202变更为201情况检查" }; try { //提取DTBDLTBGXGC层中,变更前城镇村属性码为202,变更后城镇村属性码为201的图斑,纳入人工核查。 string sql = $"select bghtbbsm from dtbdltbgxgc where tbbsm = '{TBBSM}'and bghczcsxm='201' and bgqczcsxm='202'"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; List lisCZC302 = dt.AsEnumerable().Select(x => x[0].ToString()).ToList(); lisCZC302 = lisCZC302.Distinct().ToList(); foreach (var item in lisCZC302) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC304() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "202变更为203情况检查", ErrorType = "二类错误", RuleCode = "CZC304", RuleName = "202变更为203情况检查" }; try { //提取DTBDLTBGXGC层中,变更前城镇村属性码为202,变更后城镇村属性码为203的图斑,纳入人工核查。 string sql = $"select bghtbbsm from dtbdltbgxgc where tbbsm = '{TBBSM}' and bghczcsxm='203' and bgqczcsxm='202'"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; List lisCZC302 = dt.AsEnumerable().Select(x => x[0].ToString()).ToList(); lisCZC302 = lisCZC302.Distinct().ToList(); foreach (var item in lisCZC302) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC305() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "203变更为201情况检查", ErrorType = "二类错误", RuleCode = "CZC305", RuleName = "203变更为201情况检查" }; try { //提取DTBDLTBGXGC层中,变更前城镇村属性码为203,变更后城镇村属性码为201的图斑,纳入人工核查。 string sql = $"select bghtbbsm from dtbdltbgxgc where tbbsm = '{TBBSM}'and bghczcsxm='201' and bgqczcsxm='203'"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; List lisCZC302 = dt.AsEnumerable().Select(x => x[0].ToString()).ToList(); lisCZC302 = lisCZC302.Distinct().ToList(); foreach (var item in lisCZC302) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC306() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "203变更为202情况检查", ErrorType = "二类错误", RuleCode = "CZC306", RuleName = "203变更为202情况检查" }; try { //提取DTBDLTBGXGC层中,变更前城镇村属性码为203,变更后城镇村属性码为202的图斑,纳入人工核查 string sql = $"select bghtbbsm from dtbdltbgxgc where tbbsm = '{TBBSM}' and bghczcsxm='202' and bgqczcsxm='203'"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; List lisCZC302 = dt.AsEnumerable().Select(x => x[0].ToString()).ToList(); lisCZC302 = lisCZC302.Distinct().ToList(); foreach (var item in lisCZC302) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC401() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "因203属性分割的图斑,必须均标记“城镇村图斑编号”", ErrorType = "一类错误", RuleCode = "CZC401", RuleName = "城镇村图斑编号标记情况检查" }; IFeatureClass edczc_dltbFeatureClass = null; //二调203 try { if (!DicFeatureClass.ContainsKey("JC_DLTB") || DicFeatureClass["JC_DLTB"] == null) { throw new Exception("未找到“基础_地类图斑”参考图层!"); } edczc_dltbFeatureClass = DicFeatureClass["JC_DLTB"]; ISpatialReference spatialReference = (edczc_dltbFeatureClass as IGeoDataset).SpatialReference; if (spatialReference == null) { throw new Exception("基础_地类图斑数据坐标参考为空,质检失败!"); } //对于任务图斑下,提取城镇村属性码标注203和空的图斑, string sql = $"select bsm,egeometry,dlbm,zzsxdm,tbxhdm,ddtcbz,gdlx,CZCTBBH from dtbdltbgx where tbbsm = '{TBBSM}' and (czcsxm='203' or czcsxm='' or czcsxm is null)"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; List> tuples = new List>(); foreach (DataRow dr in dt.Rows) { IGeometry dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); tuples.Add(new Tuple($"{dr["bsm"]}", dltbGXgeo, $"{dr["dlbm"]}{dr["zzsxdm"]}{dr["tbxhdm"]}{dr["ddtcbz"]}{dr["gdlx"]}", $"{dr["CZCTBBH"]}")); } //若其中存在地类编码、种植属性代码、图斑细化代码、单独图层代码、耕地类型均一致,且共边的图斑,检查其城镇村编号情况是否一致,且不可为空。否则,判定为错误图斑。 List lisCZC302 = new List(); var groups = tuples.GroupBy(x => x.Item3); foreach (var item in groups) { foreach (var gp in item) { string czctbbh = gp.Item4; foreach (var gp2 in item) { if (gp2.Item1 == gp.Item1) continue; if (CommonHelper.IsAdjacent(gp.Item2, gp2.Item2)) { if (gp2.Item4 != gp.Item4 || string.IsNullOrEmpty(gp2.Item4)) lisCZC302.Add(gp2.Item1); } } } } lisCZC302 = lisCZC302.Distinct().ToList(); foreach (var item in lisCZC302) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC402() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "标记“城镇村图斑编号”的图斑,城镇村属性码应为203或空。", ErrorType = "一类错误", RuleCode = "CZC402", RuleName = "城镇村图斑编号标记正确性检查" }; try { //对于任务图斑下,对于“城镇村图斑编号”不为空、且标记内容相同的图斑,检查其城镇村属性码值域是否在203、空之间。若不位于其中,判定为错误图斑。 string sql = $"select bsm from dtbdltbgx where tbbsm = '{TBBSM}' and CZCTBBH<>'' and CZCTBBH is not null and (czcsxm not in('203','') and czcsxm is not null)"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; List lisCZC302 = dt.AsEnumerable().Select(x => x[0].ToString()).ToList(); lisCZC302 = lisCZC302.Distinct().ToList(); foreach (var item in lisCZC302) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC403() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "标记“城镇村图斑编号”的图斑,应共边且地类编码、种植属性代码、图斑细化代码、单独图层代码、耕地类型保持一致", ErrorType = "一类错误", RuleCode = "CZC403", RuleName = "城镇村图斑编号标记正确性与地类逻辑检查" }; IFeatureClass edczc_dltbFeatureClass = null; //二调203 try { if (!DicFeatureClass.ContainsKey("JC_DLTB") || DicFeatureClass["JC_DLTB"] == null) { throw new Exception("未找到“基础_地类图斑”参考图层!"); } edczc_dltbFeatureClass = DicFeatureClass["JC_DLTB"]; ISpatialReference spatialReference = (edczc_dltbFeatureClass as IGeoDataset).SpatialReference; if (spatialReference == null) { throw new Exception("基础_地类图斑数据坐标参考为空,质检失败!"); } //对于任务图斑下,对于“城镇村图斑编号”不为空、且标记内容相同的图斑 string sql = $"select bsm,egeometry,dlbm,zzsxdm,tbxhdm,ddtcbz,gdlx,CZCTBBH from dtbdltbgx where tbbsm = '{TBBSM}' and CZCTBBH <>'' and CZCTBBH is not null"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; List> tuples = new List>(); foreach (DataRow dr in dt.Rows) { IGeometry dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); tuples.Add(new Tuple($"{dr["bsm"]}", dltbGXgeo, $"{dr["dlbm"]}{dr["zzsxdm"]}{dr["tbxhdm"]}{dr["ddtcbz"]}{dr["gdlx"]}", $"{dr["CZCTBBH"]}")); } //检查其是否共边,且地类编码、种植属性代码、图斑细化代码、单独图层代码、耕地类型均一致。若不共边、或不一致,认定为错误图斑。 List lisCZC302 = new List(); var groups = tuples.GroupBy(x => x.Item4); List listGeometry; foreach (var item in groups) { int countsx = item.GroupBy(x => x.Item3).Count(); //比较属性是否都一致 if (countsx > 1) { foreach (var gp in item) lisCZC302.Add(gp.Item1); } //融合相同城镇村图斑编号的 IGeometryCollection geometries = new GeometryBagClass(); ITopologicalOperator gxgcTopological = new PolygonClass(); foreach (var gp in item) { geometries.AddGeometry(gp.Item2); } gxgcTopological.ConstructUnion(geometries as IEnumGeometry); IGeometry pGeoC = gxgcTopological as IGeometry; if (CommonHelper.IsMuiltPart(pGeoC, out listGeometry)) foreach (var gp in item) lisCZC302.Add(gp.Item1); } lisCZC302 = lisCZC302.Distinct().ToList(); foreach (var item in lisCZC302) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC404() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "特殊地类不需填写种植属性代码、图斑细化代码、单独图层代码、耕地类型、城镇村属性码、城镇村图斑编号字段", ErrorType = "一类错误", RuleCode = "CZC404", RuleName = "特殊地类标注城镇村图斑编号检查" }; try { //对于地类编码为88类、99类的图斑,种植属性代码、图斑细化代码、耕地类型、城镇村属性码、城镇村图斑编号字段必须为空。否则,认定为错误图斑。 string sql = $"select bsm,zzsxdm,tbxhdm,gdlx,CZCTBBH from dtbdltbgx where tbbsm = '{TBBSM}' and (dlbm like '%88%' or dlbm like '%99%')"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; List lisCZC302 = new List(); foreach (DataRow dr in dt.Rows) { if (!string.IsNullOrEmpty(dr["zzsxdm"].ToString()) || !string.IsNullOrEmpty(dr["tbxhdm"].ToString()) || !string.IsNullOrEmpty(dr["gdlx"].ToString()) || !string.IsNullOrEmpty(dr["CZCTBBH"].ToString())) { lisCZC302.Add(dr["bsm"].ToString()); } } lisCZC302 = lisCZC302.Distinct().ToList(); foreach (var item in lisCZC302) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC501() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "标注村庄属性的非建设用地与三调村庄范围重叠面积大于10平方米时,应切割图斑、并去除重叠部分村庄属性标注。", ErrorType = "一类错误", RuleCode = "CZC501", RuleName = "标注203非建设用地疑似位于三调203范围内检查" }; IFeatureClass czc_FeatureClass = null; //三调203 IGeometry dltbGXgeo = null; IFeatureCursor pCursor = null; IFeature feature = null; List listGeometryIntsect = null; try { if (!DicFeatureClass.ContainsKey(key_czcdyd) || DicFeatureClass[key_czcdyd] == null) { throw new Exception("未找到“下发城镇村等用地”参考图层!"); } czc_FeatureClass = DicFeatureClass[key_czcdyd]; ISpatialReference spatialReference = (czc_FeatureClass as IGeoDataset).SpatialReference; if (spatialReference == null) { throw new Exception("下发城镇村等用地数据坐标参考为空,质检失败!"); } if (czc_FeatureClass.Fields.FindField("CZSX") == -1) throw new Exception("“下发城镇村等用地”参考图层 未包含CZSX字段"); //1、对于地类编码不为05H1、0508、0601、0602、0603、0701、0702、08H1、08H2、08H2A、0809、0810、0810A、09、1004、1005、1201以及1001、1002、1003、1007、1008、1009、1109的图斑,且变更后城镇村属性码为203的部分,该部分记为A。 string sql = $"select bsm,egeometry from dtbdltbgx where tbbsm = '{TBBSM}' and dlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201','1001','1002','1003','1007','1008','1009','1109','1001A','1002A','1003A') and dlbm not like '88%' and dlbm not like '99%' and czcsxm='203'"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; //2、提取下发城镇村等用地参考图层中的“三调村庄属性”部分,改部分记为B。 List lisCZC501 = new List(); foreach (DataRow dr in dt.Rows) { dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); ISpatialFilter spatialFilter = new SpatialFilterClass { SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects, WhereClause = "CZCLX like '203%' and CZSX = '三调村庄范围'" }; IGeometryCollection geometries = new GeometryBagClass(); ITopologicalOperator gxgcTopological = new PolygonClass(); spatialFilter.Geometry = dltbGXgeo; pCursor = czc_FeatureClass.Search(spatialFilter, false); feature = null; while ((feature = pCursor.NextFeature()) != null) { //3、将A与B进行叠加,若存在单个重叠部分大于10平方米,认定为错误图斑。 //IGeometry pGeoInt = CommonHelper.InterSect(feature.ShapeCopy, dltbGXgeo); //叠加 //CommonHelper.IsMuiltPart(pGeoInt, out listGeometryIntsect); //foreach (var geo in listGeometryIntsect) //{ // IArea pArea = geo as IArea; // if (pArea.Area > 10) // { // lisCZC501.Add(dr[0].ToString()); // } //} geometries.AddGeometry(feature.ShapeCopy); } gxgcTopological.ConstructUnion(geometries as IEnumGeometry); IGeometry pGeoC = gxgcTopological as IGeometry; //3、将A与B进行叠加,若存在单个不重叠部分大于10平方米,认定为错误图斑。 IGeometry pGeoInt = CommonHelper.InterSect(pGeoC, dltbGXgeo); CommonHelper.IsMuiltPart(pGeoInt, out listGeometryIntsect); foreach (var geo in listGeometryIntsect) { IArea pArea = geo as IArea; if (pArea.Area > 10) { lisCZC501.Add(dr[0].ToString()); } } } lisCZC501 = lisCZC501.Distinct().ToList(); foreach (var item in lisCZC501) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC502() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "标注村庄属性的非建设用地与三调村庄范围重叠面积小于10平方米时,核实未重叠部分与二调村庄范围的重叠情况。", ErrorType = "二类错误", RuleCode = "CZC502", RuleName = "标注203非建设用地存在与三调203部分重叠检查" }; IFeatureClass czc_FeatureClass = null; //三调203 IGeometry dltbGXgeo = null; IFeatureCursor pCursor = null; IFeature feature = null; List listGeometryIntsect = null; try { if (!DicFeatureClass.ContainsKey(key_czcdyd) || DicFeatureClass[key_czcdyd] == null) { throw new Exception("未找到“下发城镇村等用地”参考图层!"); } czc_FeatureClass = DicFeatureClass[key_czcdyd]; ISpatialReference spatialReference = (czc_FeatureClass as IGeoDataset).SpatialReference; if (spatialReference == null) { throw new Exception("下发城镇村等用地数据坐标参考为空,质检失败!"); } if (czc_FeatureClass.Fields.FindField("CZSX") == -1) throw new Exception("“下发城镇村等用地”参考图层 未包含CZSX字段"); //1、对于地类编码不为05H1、0508、0601、0602、0603、0701、0702、08H1、08H2、08H2A、0809、0810、0810A、09、1004、1005、1201以及1001、1002、1003、1007、1008、1009、1109的图斑,且变更后城镇村属性码为203的部分,该部分记为A。 string sql = $"select bsm,egeometry from dtbdltbgx where tbbsm = '{TBBSM}' and dlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201','1001','1002','1003','1007','1008','1009','1109','1001A','1002A','1003A') and dlbm not like '88%' and dlbm not like '99%' and czcsxm='203'"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; //2、提取下发城镇村等用地参考图层中的“三调村庄属性”部分,改部分记为B。 List lisCZC502 = new List(); foreach (DataRow dr in dt.Rows) { dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); ISpatialFilter spatialFilter = new SpatialFilterClass { SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects, WhereClause = "CZCLX like '203%' and CZSX = '三调村庄范围'" }; spatialFilter.Geometry = dltbGXgeo; if (czc_FeatureClass.FeatureCount(spatialFilter) == 0) { if ((dltbGXgeo as IArea).Area < 10) lisCZC502.Add(dr[0].ToString()); } else { IGeometryCollection geometries = new GeometryBagClass(); ITopologicalOperator gxgcTopological = new PolygonClass(); pCursor = czc_FeatureClass.Search(spatialFilter, true); feature = null; bool flag = false; while ((feature = pCursor.NextFeature()) != null) { ////3、将A与B进行叠加,若存在重叠部分面积均小于10平方米,纳入人工核查。 //IGeometry pGeoInt = CommonHelper.InterSect(feature.ShapeCopy, dltbGXgeo); //叠加 //IArea pArea = pGeoInt as IArea; //if (pArea.Area >= 10) //{ // flag = true; //} geometries.AddGeometry(feature.ShapeCopy); } gxgcTopological.ConstructUnion(geometries as IEnumGeometry); IGeometry pGeoC = gxgcTopological as IGeometry; //3、将A与B进行叠加,若存在单个不重叠部分大于10平方米,认定为错误图斑。 IGeometry pGeoInt = CommonHelper.InterSect(pGeoC, dltbGXgeo); CommonHelper.IsMuiltPart(pGeoInt, out listGeometryIntsect); foreach (var geo in listGeometryIntsect) { IArea pArea = geo as IArea; if (pArea.Area >= 10) { flag = true; } } if (!flag) lisCZC502.Add(dr[0].ToString()); } } lisCZC502 = lisCZC502.Distinct().ToList(); foreach (var item in lisCZC502) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC503() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "标注村庄属性的非建设用地与二调村庄范围不重叠面积大于10平方米时,应切割图斑、并去除不重叠部分村庄属性标注。", ErrorType = "一类错误", RuleCode = "CZC503", RuleName = "标注203非建设用地疑似落在二调203范围外检查" }; IFeatureClass czc_FeatureClass = null; //三调203 IGeometry dltbGXgeo = null; IFeatureCursor pCursor = null; IFeature feature = null; List listGeometryIntsect = null; try { if (!DicFeatureClass.ContainsKey(key_czcdyd) || DicFeatureClass[key_czcdyd] == null) { throw new Exception("未找到“下发城镇村等用地”参考图层!"); } czc_FeatureClass = DicFeatureClass[key_czcdyd]; ISpatialReference spatialReference = (czc_FeatureClass as IGeoDataset).SpatialReference; if (spatialReference == null) { throw new Exception("下发城镇村等用地数据坐标参考为空,质检失败!"); } if (czc_FeatureClass.Fields.FindField("CZSX") == -1) throw new Exception("“下发城镇村等用地”参考图层 未包含CZSX字段"); //1、对于地类编码不为05H1、0508、0601、0602、0603、0701、0702、08H1、08H2、08H2A、0809、0810、0810A、09、1004、1005、1201以及1001、1002、1003、1007、1008、1009、1109的图斑,且变更后城镇村属性码为203的部分,该部分记为A。 string sql = $"select bsm,egeometry from dtbdltbgx where tbbsm = '{TBBSM}' and dlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201','1001','1002','1003','1007','1008','1009','1109','1001A','1002A','1003A') and dlbm not like '88%' and dlbm not like '99%' and czcsxm='203'"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; //2、提取下发城镇村等用地参考图层中的“二调村庄属性”部分,改部分记为B。 List lisCZC503 = new List(); foreach (DataRow dr in dt.Rows) { dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); ISpatialFilter spatialFilter = new SpatialFilterClass { SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects, WhereClause = "CZCLX like '203%' and CZSX = '二调村庄范围'" }; spatialFilter.Geometry = dltbGXgeo; if (czc_FeatureClass.FeatureCount(spatialFilter) == 0) { if ((dltbGXgeo as IArea).Area > 10) lisCZC503.Add(dr[0].ToString()); } else { //融合相同城镇村图斑编号的 IGeometryCollection geometries = new GeometryBagClass(); ITopologicalOperator gxgcTopological = new PolygonClass(); pCursor = czc_FeatureClass.Search(spatialFilter, false); feature = null; while ((feature = pCursor.NextFeature()) != null) { //3、将A与B进行叠加,若存在单个不重叠部分大于10平方米,认定为错误图斑。 //listGeometryIntsect = CommonHelper.DifferenceWithSingle(dltbGXgeo, feature.ShapeCopy); //foreach (var geo in listGeometryIntsect) //{ // IArea pArea = geo as IArea; // if (pArea.Area > 10) // { // lisCZC503.Add(dr[0].ToString()); // } //} geometries.AddGeometry(feature.ShapeCopy); } gxgcTopological.ConstructUnion(geometries as IEnumGeometry); IGeometry pGeoC = gxgcTopological as IGeometry; //3、将A与B进行叠加,若存在单个不重叠部分大于10平方米,认定为错误图斑。 listGeometryIntsect = CommonHelper.DifferenceWithSingle(dltbGXgeo, pGeoC); foreach (var geo in listGeometryIntsect) { IArea pArea = geo as IArea; if (pArea.Area > 10) { lisCZC503.Add(dr[0].ToString()); } } } } lisCZC503 = lisCZC503.Distinct().ToList(); foreach (var item in lisCZC503) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC504() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "标注村庄属性的非建设用地与二调村庄范围不重叠面积小于10平方米时,核实重叠部分与203范围重叠情况。", ErrorType = "二类错误", RuleCode = "CZC504", RuleName = "标注203非建设用地存在新增203情况检查" }; IFeatureClass czc_FeatureClass = null; //三调203 IGeometry dltbGXgeo = null; IFeatureCursor pCursor = null; IFeature feature = null; List listGeometryIntsect = null; try { if (!DicFeatureClass.ContainsKey(key_czcdyd) || DicFeatureClass[key_czcdyd] == null) { throw new Exception("未找到“下发城镇村等用地”参考图层!"); } czc_FeatureClass = DicFeatureClass[key_czcdyd]; ISpatialReference spatialReference = (czc_FeatureClass as IGeoDataset).SpatialReference; if (spatialReference == null) { throw new Exception("下发城镇村等用地数据坐标参考为空,质检失败!"); } if (czc_FeatureClass.Fields.FindField("CZSX") == -1) throw new Exception("“下发城镇村等用地”参考图层 未包含CZSX字段"); //1、对于地类编码不为05H1、0508、0601、0602、0603、0701、0702、08H1、08H2、08H2A、0809、0810、0810A、09、1004、1005、1201以及1001、1002、1003、1007、1008、1009、1109的图斑,且变更后城镇村属性码为203的部分,该部分记为A。 string sql = $"select bsm,egeometry from dtbdltbgx where tbbsm = '{TBBSM}' and dlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201','1001','1002','1003','1007','1008','1009','1109','1001A','1002A','1003A') and dlbm not like '88%' and dlbm not like '99%' and czcsxm='203'"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; //2、提取下发城镇村等用地参考图层中的“二调村庄属性”部分,改部分记为B。 List lisCZC503 = new List(); foreach (DataRow dr in dt.Rows) { dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); ISpatialFilter spatialFilter = new SpatialFilterClass { SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects, WhereClause = "CZCLX like '203%' and CZSX = '二调村庄范围'" }; spatialFilter.Geometry = dltbGXgeo; if (czc_FeatureClass.FeatureCount(spatialFilter) == 0) { if ((dltbGXgeo as IArea).Area <= 10) lisCZC503.Add(dr[0].ToString()); } else { //融合相同城镇村图斑编号的 IGeometryCollection geometries = new GeometryBagClass(); ITopologicalOperator gxgcTopological = new PolygonClass(); pCursor = czc_FeatureClass.Search(spatialFilter, true); feature = null; bool flag = false; while ((feature = pCursor.NextFeature()) != null) { //3、将A与B进行叠加,若存在单个不重叠部分均小于10平米,纳入人工核查。 //listGeometryIntsect = CommonHelper.DifferenceWithSingle(dltbGXgeo, feature.ShapeCopy); //foreach (var geo in listGeometryIntsect) //{ // IArea pArea = geo as IArea; // if (pArea.Area == 0 || pArea.Area >= 10) // { // flag = true; // } //} geometries.AddGeometry(feature.ShapeCopy); } gxgcTopological.ConstructUnion(geometries as IEnumGeometry); IGeometry pGeoC = gxgcTopological as IGeometry; //3、将A与B进行叠加,若存在单个不重叠部分大于10平方米,认定为错误图斑。 listGeometryIntsect = CommonHelper.DifferenceWithSingle(dltbGXgeo, pGeoC); foreach (var geo in listGeometryIntsect) { IArea pArea = geo as IArea; if (pArea.Area == 0 || pArea.Area >= 10) { flag = true; } } if (!flag) lisCZC503.Add(dr[0].ToString()); } } lisCZC503 = lisCZC503.Distinct().ToList(); foreach (var item in lisCZC503) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC505() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "未标注村庄属性的非建设用地与二调村庄范围重叠面积大于30平方米时,应切割图斑、并将重叠部分标注村庄属性。", ErrorType = "一类错误", RuleCode = "CZC505", RuleName = "未标注城镇村属性的非建设用地疑似位于二调203范围内检查" }; IFeatureClass czc_FeatureClass = null; //三调203 IGeometry dltbGXgeo = null; IFeatureCursor pCursor = null; IFeature feature = null; List listGeometryIntsect = null; try { if (!DicFeatureClass.ContainsKey(key_czcdyd) || DicFeatureClass[key_czcdyd] == null) { throw new Exception("未找到“下发城镇村等用地”参考图层!"); } czc_FeatureClass = DicFeatureClass[key_czcdyd]; ISpatialReference spatialReference = (czc_FeatureClass as IGeoDataset).SpatialReference; if (spatialReference == null) { throw new Exception("下发城镇村等用地数据坐标参考为空,质检失败!"); } if (czc_FeatureClass.Fields.FindField("CZSX") == -1) throw new Exception("“下发城镇村等用地”参考图层 未包含CZSX字段"); //1、对于地类编码不为05H1、0508、0601、0602、0603、0701、0702、08H1、08H2、08H2A、0809、0810、0810A、09、1004、1005、1201以及1001、1002、1003、1007、1008、1009、1109的图斑,且变更后城镇村属性码为203的部分,该部分记为A。 string sql = $"select bsm,egeometry from dtbdltbgx where tbbsm = '{TBBSM}' and dlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201','1001','1002','1003','1007','1008','1009','1109','1001A','1002A','1003A') and dlbm not like '88%' and dlbm not like '99%' and (czcsxm='' or czcsxm is null)"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; //2、提取下发城镇村等用地参考图层中的“二调村庄属性”部分,改部分记为B。 List lisCZC505 = new List(); foreach (DataRow dr in dt.Rows) { dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); ISpatialFilter spatialFilter = new SpatialFilterClass { SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects, WhereClause = "CZCLX like '203%' and CZSX = '二调村庄范围'" }; //融合相同城镇村图斑编号的 IGeometryCollection geometries = new GeometryBagClass(); ITopologicalOperator gxgcTopological = new PolygonClass(); spatialFilter.Geometry = dltbGXgeo; pCursor = czc_FeatureClass.Search(spatialFilter, true); feature = null; while ((feature = pCursor.NextFeature()) != null) { ////3、将A与B进行叠加,若存在单个重叠部分大于30平方米,认定为错误图斑。 //IGeometry pGeoInt = CommonHelper.InterSect(feature.ShapeCopy, dltbGXgeo); //叠加 //CommonHelper.IsMuiltPart(pGeoInt, out listGeometryIntsect); //foreach (var geo in listGeometryIntsect) //{ // IArea pArea = geo as IArea; // if (pArea.Area > 30) // { // lisCZC505.Add(dr[0].ToString()); // } //} geometries.AddGeometry(feature.ShapeCopy); } gxgcTopological.ConstructUnion(geometries as IEnumGeometry); IGeometry pGeoC = gxgcTopological as IGeometry; //3、将A与B进行叠加,若存在单个不重叠部分大于10平方米,认定为错误图斑。 IGeometry pGeoInt = CommonHelper.InterSect(pGeoC, dltbGXgeo); //叠加 CommonHelper.IsMuiltPart(pGeoInt, out listGeometryIntsect); foreach (var geo in listGeometryIntsect) { IArea pArea = geo as IArea; if (pArea.Area > 30) { lisCZC505.Add(dr[0].ToString()); } } } lisCZC505 = lisCZC505.Distinct().ToList(); foreach (var item in lisCZC505) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } public List CZC506() { List rst = new List(); RuleEntity ruleEntity = new RuleEntity() { CheckObject = "DTBDLTBGX", ErrorId = this.TBBSM, ErrorTip = "未标注村庄属性的非建设用地与二调村庄范围重叠面积小于30平方米时,核实未重叠部分与203范围重叠情况。", ErrorType = "二类错误", RuleCode = "CZC506", RuleName = "未标注城镇村属性的非建设用地存在灭失203情况检查" }; IFeatureClass czc_FeatureClass = null; //三调203 IGeometry dltbGXgeo = null; IFeatureCursor pCursor = null; IFeature feature = null; List listGeometryIntsect = null; try { if (!DicFeatureClass.ContainsKey(key_czcdyd) || DicFeatureClass[key_czcdyd] == null) { throw new Exception("未找到“下发城镇村等用地”参考图层!"); } czc_FeatureClass = DicFeatureClass[key_czcdyd]; ISpatialReference spatialReference = (czc_FeatureClass as IGeoDataset).SpatialReference; if (spatialReference == null) { throw new Exception("下发城镇村等用地数据坐标参考为空,质检失败!"); } if (czc_FeatureClass.Fields.FindField("CZSX") == -1) throw new Exception("“下发城镇村等用地”参考图层 未包含CZSX字段"); //1、对于地类编码不为05H1、0508、0601、0602、0603、0701、0702、08H1、08H2、08H2A、0809、0810、0810A、09、1004、1005、1201以及1001、1002、1003、1007、1008、1009、1109的图斑,且变更后城镇村属性码为203的部分,该部分记为A。 string sql = $"select bsm,egeometry from dtbdltbgx where tbbsm = '{TBBSM}' and dlbm not in ('05H1','0508','0601','0602','0603','0701','0702','08H1','08H2','08H2A','0809','0810','0810A','09','1004','1005','1201','1001','1001A','1002','1002A','1003','1003A','1007','1008','1009','1109') and dlbm not like '88%' and dlbm not like '99%' and czcsxm='203'"; DataTable dt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql); if (dt == null || dt.Rows.Count <= 0) return rst; //2、提取下发城镇村等用地参考图层中的“三调村庄属性”部分,改部分记为B。 List lisCZC506 = new List(); foreach (DataRow dr in dt.Rows) { dltbGXgeo = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon, spatialReference.FactoryCode, false); ISpatialFilter spatialFilter = new SpatialFilterClass { SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects, WhereClause = "CZCLX like '203%' and CZSX = '二调村庄范围'" }; spatialFilter.Geometry = dltbGXgeo; if (czc_FeatureClass.FeatureCount(spatialFilter) == 0) { if ((dltbGXgeo as IArea).Area < 30) lisCZC506.Add(dr[0].ToString()); } else { //融合相同城镇村图斑编号的 IGeometryCollection geometries = new GeometryBagClass(); ITopologicalOperator gxgcTopological = new PolygonClass(); pCursor = czc_FeatureClass.Search(spatialFilter, true); feature = null; bool flag = false; while ((feature = pCursor.NextFeature()) != null) { ////3、将A与B进行叠加,若存在重叠部分面积均小于30平方米,纳入人工核查。 //IGeometry pGeoInt = CommonHelper.InterSect(feature.ShapeCopy, dltbGXgeo); //叠加 //IArea pArea = pGeoInt as IArea; //if (pArea.Area >= 30) //{ // flag = true; //} geometries.AddGeometry(feature.ShapeCopy); } gxgcTopological.ConstructUnion(geometries as IEnumGeometry); IGeometry pGeoC = gxgcTopological as IGeometry; IGeometry pGeoInt = CommonHelper.InterSect(pGeoC, dltbGXgeo); CommonHelper.IsMuiltPart(pGeoInt, out listGeometryIntsect); foreach (var geo in listGeometryIntsect) { IArea pArea = geo as IArea; if (pArea.Area >= 30) { flag = true; } } if (!flag) { lisCZC506.Add(dr[0].ToString()); } } } lisCZC506 = lisCZC506.Distinct().ToList(); foreach (var item in lisCZC506) { rst.Add(new RuleEntity() { CheckObject = ruleEntity.CheckObject, ErrorId = item, BGFWBSM = item, ErrorTip = ruleEntity.ErrorTip, ErrorType = ruleEntity.ErrorType, RuleCode = ruleEntity.RuleCode, RuleName = ruleEntity.RuleName, RuleContent = ruleEntity.RuleContent, }); } } catch (Exception ex) { ruleEntity.ErrorTip = $"{ruleEntity.RuleName}失败:{ex.Message}"; rst.Add(ruleEntity); } return rst; } /// ///使用方式 //var wsFactory = new ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactory(); //var workspace = wsFactory.OpenFromFile(@"D:\2022变更修改\单图斑建库软件\440203武江区.gdb", 0); //DicFeatureClass = new Dictionary(); // DicFeatureClass["CZCDYDI"] = (workspace as IFeatureWorkspace).OpenFeatureClass("CZCDYDI"); //string sql1 = $"select * from dtbdltbgx where tbbsm = '{TBBSM}'"; //DataTable dtt = CheckHelper.SQLiteDBOperate.Instance.ExceDataTable(this.SourcePath, sql1); //InsertTB(dtt); /// /// private void InsertTB(DataTable dt) { var wsFactory = new ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactory(); var workspace = wsFactory.OpenFromFile(@"D:\2022变更修改\单图斑建库软件\新建文件地理数据库.gdb", 0); IFeatureClass featureClass = (workspace as IFeatureWorkspace).OpenFeatureClass("DLTBGX"); //若之前存在记录则删除,根据WYRWTBBSM (featureClass as ITable).DeleteSearchedRows(null); int ibgqdlbm = featureClass.Fields.FindField("DLBM"); //int ibgqhlbm = featureClass.Fields.FindField("BGHDLBM"); int ibgqczcsxm = featureClass.Fields.FindField("CZCSXM"); //int ibghczcsxm = featureClass.Fields.FindField("BGHCZCSXM"); int ibghtbbsm = featureClass.Fields.FindField("BSM"); foreach (DataRow dr in dt.Rows) { IFeature feature = featureClass.CreateFeature(); string dlbm = dr["dlbm"].ToString(); feature.Value[ibgqdlbm] = dlbm; string czcsxm = dr["czcsxm"].ToString(); feature.Value[ibgqczcsxm] = czcsxm; string bghtbbsm = dr["bsm"].ToString(); feature.Value[ibghtbbsm] = bghtbbsm; //string bgqdlbm = dr["bgqdlbm"].ToString(); //feature.Value[ibgqdlbm] = bgqdlbm; //string bghdlbm = dr["bghdlbm"].ToString(); //feature.Value[ibgqhlbm] = bghdlbm; //string bgqczcsxm = dr["bgqczcsxm"].ToString(); //feature.Value[ibgqczcsxm] = bgqczcsxm; //string bghczcsxm = dr["bghczcsxm"].ToString(); //feature.Value[ibghczcsxm] = bghczcsxm; //string bghtbbsm = dr["bghtbbsm"].ToString(); //feature.Value[ibghtbbsm] = bghtbbsm; feature.Shape = CheckHelper.GeometryConvertHelper.ConverJsonToIGeoemtry(dr["egeometry"].ToString(), esriGeometryType.esriGeometryPolygon); feature.Store(); } } } }