using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.DataSourcesGDB; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using GPHelper; //using IDEParameter; using KGIS.Framework.AE; using KGIS.Framework.AE.Enum; using KGIS.Framework.AE.GaussCalculate; using KGIS.Framework.AE.GPHelper; using KGIS.Framework.DBOperator; using KGIS.Framework.Utils; using KGIS.Framework.Utils.ExtensionMethod; using Kingo.PluginServiceInterface; using Kingo.PluginServiceInterface.Model; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Runtime.InteropServices; namespace KGIS_DLTB { public class DLTB_IDGHelper : BaseIDG { //private IFeatureClass BGFeatureClass = null; //private IFeatureLayer JCFeatureLayer = null; //private IFeatureLayer BgTbLayer = null; //private IFeatureLayer GxgcTBLayer = null; //private IFeatureLayer GXPDTLayer = null; //private IFeatureLayer JCPDTLayer = null; private string TempDbPath = string.Empty; private string TempSqlitePath = string.Empty; IWorkspace pOutWork = null; Dictionary AreaList = new Dictionary(); private IDGParameter Parm = null; public void Execute(IDGParameter parm) { Parm = parm; DateTime StartTime = DateTime.Now; IFeatureLayer Temp_DLTBGXGC = null; IFeatureLayer Temp_BGTBLayer = null;//变更图斑融合 IFeatureLayer DissolveAnalysisFeatureLayer = null;//更新层融合后的图层 IFeatureLayer EraseAnalysisLayer = null; IFeature feature = null; IFeatureCursor pCursor = null; IFeatureClassAPI fcAPI = null; GPParamClass paramClass = new GPParamClass(); try { OpenDB(parm); string TempDir = CreateTempDB("DLTB"); TempDbPath = System.IO.Path.Combine(TempDir, "TempGDB.gdb"); (GxTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL("Delete From DLTBGX WHERE 1=1"); (GxgcTBLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL("Delete From DLTBGXGC WHERE 1=1"); //ITable dltbgxTb = GxTbLayer.FeatureClass as ITable; //dltbgxTb.DeleteSearchedRows(null); //ITable dltbgxgcTb = GxgcTBLayer.FeatureClass as ITable; //dltbgxgcTb.DeleteSearchedRows(null); #region 判断是否存在坐落变更 提取相关数据 if (Parm.PrjInfo.ListZLXXInfo.Count > 0) { Console.WriteLine("Msg:正在处理坐落变更数据..."); string TempZLBGDir = CreateTempDB("DLTB_ZLBG"); string TempZLBGDbPath = System.IO.Path.Combine(TempZLBGDir, "TempGDB.gdb"); IWorkspaceAPI wsAPI = new WorkspaceAPI(TempZLBGDbPath, WorkspaceTypeEnum.GDBFile, true); IFeatureClassAPI DLTBBG_ZLBGAPI = wsAPI.CreateFeatureClass("DLTBBG", (BgTbLayer.FeatureClass as IGeoDataset).SpatialReference, BgTbLayer.FeatureClass.Fields); fcAPI = new FeatureClassAPI(JcTbLayer.FeatureClass); IQueryFilter filter = new QueryFilterClass() { }; bool isMDB = ((IDataset)fcAPI.FeatureClass).Workspace.PathName.ToUpper().Contains(".MDB"); foreach (var item in Parm.PrjInfo.ListZLXXInfo) { if (string.IsNullOrWhiteSpace(item.BGQDM.ToTrim()) || string.IsNullOrWhiteSpace(item.BGHDM.ToTrim())) continue; if (isMDB) { if (item.IsQS == "是") filter.WhereClause = $"QSDWDM like '{item.BGQDM}*'"; else filter.WhereClause = $"ZLDWDM like '{item.BGQDM}*'"; } else { if (item.IsQS == "是") filter.WhereClause = $"QSDWDM like '{item.BGQDM}%'"; else filter.WhereClause = $"ZLDWDM like '{item.BGQDM}%'"; } fcAPI.FcToFc(DLTBBG_ZLBGAPI.FeatureClass, filter, false); ITable tempBGTb = DLTBBG_ZLBGAPI.FeatureClass as ITable; ICursor _cursor = tempBGTb.Update(filter, true); IRow _row = null; int _idx = DLTBBG_ZLBGAPI.FeatureClass.FindField("ZLDWDM"); int _idxZLMC = DLTBBG_ZLBGAPI.FeatureClass.FindField("ZLDWMC"); int _idxQS = DLTBBG_ZLBGAPI.FeatureClass.FindField("QSDWDM"); int _idxQSMC = DLTBBG_ZLBGAPI.FeatureClass.FindField("QSDWMC"); int _idxFRDBS = DLTBBG_ZLBGAPI.FeatureClass.FindField("FRDBS"); while ((_row = _cursor.NextRow()) != null && _idx != -1) { _row.Value[_idx] = _row.Value[_idx].ToTrim().Replace(item.BGQDM, item.BGHDM); _row.Value[_idxQS] = _row.Value[_idxQS].ToTrim().Replace(item.BGQDM, item.BGHDM); _row.Value[_idxZLMC] = _row.Value[_idxZLMC].ToTrim().Replace(item.BGQMC, item.BGHMC); _row.Value[_idxQSMC] = _row.Value[_idxQSMC].ToTrim().Replace(item.BGQMC, item.BGHMC); if (_idxFRDBS != -1) _row.Value[_idxFRDBS] = "0"; _cursor.UpdateRow(_row); } _cursor.Flush(); } #region 变更图斑擦除坐落变更的图斑 paramClass.FirstFeatureLayer = new FeatureLayerClass() { FeatureClass = DLTBBG_ZLBGAPI.FeatureClass }; paramClass.SecondFeatureLayer = BgTbLayer; paramClass.OutFeatureClassPath = $"{TempZLBGDbPath}\\BGTB_Erase"; paramClass.IsGetOutPutFeature = true; paramClass.GPType = EnumGPType.Erase; GPHelper.Instance.ExeGPForProces(paramClass, ref EraseAnalysisLayer); #endregion ITable tempdltb = DLTBBG_ZLBGAPI.FeatureClass as ITable; tempdltb.DeleteSearchedRows(null); fcAPI = new FeatureClassAPI(EraseAnalysisLayer.FeatureClass); fcAPI.FcToFc(DLTBBG_ZLBGAPI.FeatureClass, null, false); fcAPI = new FeatureClassAPI(BgTbLayer.FeatureClass); fcAPI.FcToFc(DLTBBG_ZLBGAPI.FeatureClass, null, false); BgTbLayer.FeatureClass = DLTBBG_ZLBGAPI.FeatureClass; } #endregion string dbPath = TempDir + @"\Temp" + ".sqlite"; TempSqlitePath = dbPath; Console.WriteLine("Msg:正在处理变更图斑数据..."); Temp_BGTBLayer = ProcessBGTB(); IWorkspaceAPI wsAPI1 = new WorkspaceAPI(TempDbPath, WorkspaceTypeEnum.GDBFile, true); IFeatureClassAPI TempGXGCAPI = wsAPI1.OpenFeatureClass("DLTBGXGC"); Temp_DLTBGXGC = new FeatureLayerClass() { FeatureClass = TempGXGCAPI.FeatureClass }; pOutWork = CreateDBWorkspace(dbPath); //CustomGPHelper.TableToTable(Temp_DLTBGXGC, dbPath, "DLTBGXGC"); IRDBHelper rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); rdbHelper.ExecuteSQL(" drop table DLTBGXGC "); TableToTable(wsAPI1.CurrentWorkspace as IFeatureWorkspace, pOutWork, "DLTBGXGC"); //IFeatureLayer ptempLayer = null; //GPParamClass gPParamClass2 = new GPParamClass(); //gPParamClass2.FirstFeatureLayer = Temp_DLTBGXGC; //gPParamClass2.GPType = EnumGPType.Default; //CustomGPHelper.RepairGeo(gPParamClass2); //IFeatureCursor gcCursor = TempGXGCAPI.FeatureClass.Update(new QueryFilter() { WhereClause = "SHAPE_AREA<0.01" }, true); //IFeature gcF = null; //int idx = TempGXGCAPI.FeatureClass.FindField("BGXW"); //rdbHelper.BeginTransaction(); //while ((gcF = gcCursor.NextFeature()) != null) //{ // IGeometry tempGeo = gcF.ShapeCopy; // ITopologicalOperator topo = tempGeo as ITopologicalOperator; // topo.Simplify(); // double area = GetEllipseArea(gcF.ShapeCopy); // if (area == 0) // { // gcF.Value[idx] = "-1"; // gcCursor.UpdateFeature(gcF); // rdbHelper.ExecuteSQL($"Delete from DLTBGXGC where OBJECTID={gcF.OID}"); // } //} //rdbHelper.Commit(); //gcCursor.Flush(); //wsAPI1.CurrentWorkspace.ExecuteSQL("Delete from DLTBGXGC where BGXW='-1'"); rdbHelper.ExecuteSQL("CREATE INDEX IDX_FID_DLTBGX ON DLTBGXGC (FID_DLTBGX);"); //Console.WriteLine("Msg:正在生成临时过程数据..."); //Temp_DLTBGXGC = GenerateTempGXGC(Temp_BGTBLayer, dbPath); rdbHelper.ExecuteSQL(@"update dltbgxgc set BSM_1= null,TBBH_1=null"); rdbHelper.ExecuteSQL(@"Update DLTBGXGC set KCDLBM ='' where KCDLBM ISNULL or KCDLBM=' ' or TRIM(KCDLBM)=''; Update DLTBGXGC set KCXS=0 where KCXS ISNULL ; Update DLTBGXGC set GDLX =Null where GDLX ISNULL or GDLX=' ' or TRIM(GDLX)=''; Update DLTBGXGC set GDPDJB ='' where GDPDJB ISNULL or GDPDJB=' ' or TRIM(GDPDJB)=''; Update DLTBGXGC set XZDWKD=0 where XZDWKD ISNULL ; Update DLTBGXGC set TBXHDM ='' where TBXHDM ISNULL or TBXHDM=' ' or TRIM(TBXHDM)=''; Update DLTBGXGC set TBXHMC ='' where TBXHMC ISNULL or TBXHMC=' ' or TRIM(TBXHMC)=''; Update DLTBGXGC set ZZSXDM ='' where ZZSXDM ISNULL or ZZSXDM=' ' or TRIM(ZZSXDM)=''; Update DLTBGXGC set ZZSXMC ='' where ZZSXMC ISNULL or ZZSXMC=' ' or TRIM(ZZSXMC)=''; Update DLTBGXGC set GDDB =0 where GDDB ISNULL; Update DLTBGXGC set FRDBS ='' where FRDBS ISNULL or FRDBS=' ' or TRIM(FRDBS)=''; Update DLTBGXGC set CZCSXM ='' where CZCSXM ISNULL or CZCSXM=' ' or TRIM(CZCSXM)=''; Update DLTBGXGC set MSSM ='' where MSSM ISNULL or MSSM=' ' or TRIM(MSSM)=''; Update DLTBGXGC set HDMC ='' where HDMC ISNULL or HDMC=' ' or TRIM(HDMC)=''; Update DLTBGXGC set XZQTZLX =NULL where XZQTZLX ='' or XZQTZLX=' ' or TRIM(XZQTZLX)='';"); Console.WriteLine("Msg:正在进行变更行为赋值..."); #region BGXW=2 //变更图斑与基础库图斑一对多 rdbHelper.ExecuteSQL(" UPDATE DLTBGXGC set BGXW='2' where FID_DLTBGX in (select FID_DLTBGX from DLTBGXGC where FID_DLTBGX <> -1 GROUP BY FID_DLTBGX HAVING COUNT(FID_DLTBGX) > 1) "); rdbHelper.ExecuteSQL(@" UPDATE DLTBGXGC set BGXW='2' where BGXW IS NULL and BSM in (select BSM from DLTBGXGC GROUP BY BSM HAVING COUNT(BSM) > 1 ) "); #endregion rdbHelper.ExecuteSQL(@"update dltbgxgc set bgxw='0' WHERE XZQTZLX is null and OBJECTID in (select objectid from DLTBGXGC WHERE BGXW is null and TRIM(IfNull(ZLDWDM,'')) = TRIM(IfNull(ZLDWDM_1,'')) and TRIM(IfNull(ZLDWMC,'')) = TRIM(IfNull(ZLDWMC_1,'')) and TRIM(IfNull(QSDWDM,'')) = TRIM(IfNull(QSDWDM_1,'')) and TRIM(IfNull(QSDWMC,'')) = TRIM(IfNull(QSDWMC_1,'')) and TRIM(IfNull(DLBM,'')) = TRIM(IfNull(DLBM_1,'')) and TRIM(IfNull(DLMC,'')) = TRIM(IfNull(DLMC_1,'')) and TRIM(IfNull(QSXZ,'')) = TRIM(IfNull(QSXZ_1,'')) and TRIM(IfNull(KCDLBM,'')) = TRIM(IfNull(KCDLBM_1,'')) and (IfNull(KCXS,0) = IfNull(KCXS_1,0)) and TRIM(IfNull(GDLX,'')) = TRIM(IfNull(GDLX_1,'')) and TRIM(IfNull(GDPDJB,'')) = TRIM(IfNull(GDPDJB_1,'')) and (IfNull(XZDWKD,0) = IfNull(XZDWKD_1,0)) and TRIM(IfNull(TBXHDM,'')) = TRIM(IfNull(TBXHDM_1,'')) and TRIM(IfNull(TBXHMC,'')) = TRIM(IfNull(TBXHMC_1,'')) and TRIM(IfNull(ZZSXDM,'')) = TRIM(IfNull(ZZSXDM_1,'')) and TRIM(IfNull(ZZSXMC,'')) = TRIM(IfNull(ZZSXMC_1,'')) and (IfNull(GDDB,0) = IfNull(GDDB_1,0)) and TRIM(IfNull(FRDBS,'')) = TRIM(IfNull(FRDBS_1,'')) and TRIM(IfNull(CZCSXM,'')) = TRIM(IfNull(CZCSXM_1,'')) and TRIM(IfNull(MSSM,'')) = TRIM(IfNull(MSSM_1,'')) and TRIM(IfNull(HDMC,'')) = TRIM(IfNull(HDMC_1,'')) )"); rdbHelper.ExecuteSQL(@"update dltbgxgc set bgxw='0' WHERE XZQTZLX is null and OBJECTID in (select OBJECTID from DLTBGXGC d WHERE BGXW is null and DLBM in ('0101','0102','0103') and DLBM_1 in ('0101','0102','0103') and TRIM(IfNull(ZLDWDM,'')) = TRIM(IfNull(ZLDWDM_1,'')) and TRIM(IfNull(ZLDWMC,'')) = TRIM(IfNull(ZLDWMC_1,'')) and TRIM(IfNull(QSDWDM,'')) = TRIM(IfNull(QSDWDM_1,'')) and TRIM(IfNull(QSDWMC,'')) = TRIM(IfNull(QSDWMC_1,'')) and TRIM(IfNull(DLBM,'')) = TRIM(IfNull(DLBM_1,'')) and TRIM(IfNull(DLMC,'')) = TRIM(IfNull(DLMC_1,'')) and TRIM(IfNull(QSXZ,'')) = TRIM(IfNull(QSXZ_1,'')) and TRIM(IfNull(GDPDJB,'')) = TRIM(IfNull(GDPDJB_1,'')) and (IfNull(XZDWKD,0) = IfNull(XZDWKD_1,0)) and TRIM(IfNull(TBXHDM,'')) = TRIM(IfNull(TBXHDM_1,'')) and TRIM(IfNull(TBXHMC,'')) = TRIM(IfNull(TBXHMC_1,'')) and TRIM(IfNull(ZZSXDM,'')) = TRIM(IfNull(ZZSXDM_1,'')) and TRIM(IfNull(ZZSXMC,'')) = TRIM(IfNull(ZZSXMC_1,'')) and (IfNull(GDDB,0) = IfNull(GDDB_1,0)) and TRIM(IfNull(FRDBS,'')) = TRIM(IfNull(FRDBS_1,'')) and TRIM(IfNull(CZCSXM,'')) = TRIM(IfNull(CZCSXM_1,'')) and TRIM(IfNull(MSSM,'')) = TRIM(IfNull(MSSM_1,'')) and TRIM(IfNull(HDMC,'')) = TRIM(IfNull(HDMC_1,'')) )"); #region BGXW=1 rdbHelper.ExecuteSQL(@"update dltbgxgc set bgxw='1' where bgxw is null;"); #endregion rdbHelper.ExecuteSQL(@"update dltbgxgc set bgxw='3' where xzqtzlx = '3';"); rdbHelper.ExecuteSQL(@"delete from dltbgxgc where bgxw='0';"); Console.WriteLine("Msg:正在进行面积平差..."); #region 面积平差 DataTable data_BSM = rdbHelper.ExecuteDatatable("tab", "select BSM,TBMJ from DLTBGXGC GROUP BY BSM HAVING count(BSM)>1", true); List pcBSMList = new List(); if (data_BSM != null && data_BSM.Rows.Count > 0) { foreach (DataRow row in data_BSM.Rows) { var jc_bsm = row["BSM"].ToTrim(); if (!pcBSMList.Contains(jc_bsm)) pcBSMList.Add(jc_bsm); } } pCursor = Temp_DLTBGXGC.FeatureClass.Search(new QueryFilterClass() { SubFields = "OBJECTID,BSM,TBMJ,SHAPE" }, true); var _itbmj = Temp_DLTBGXGC.FeatureClass.FindField("TBMJ"); var bsmIdx = Temp_DLTBGXGC.FeatureClass.FindField("BSM"); feature = null; Dictionary AreaList = new Dictionary(); while ((feature = pCursor.NextFeature()) != null) { string bsm = feature.Value[bsmIdx].ToTrim(); if (!pcBSMList.Contains(bsm)) continue; double area = GetEllipseArea(feature.ShapeCopy); AreaList.Add(feature.OID, area.ToDouble()); } DataTable data = rdbHelper.ExecuteDatatable("tab", "select OBJECTID,BSM,ZLDWDM_1,TBMJ from DLTBGXGC ", true); Dictionary _GXGCvaluePairs = new Dictionary();//记录平差结果 if (data_BSM != null && data_BSM.Rows.Count > 0) { foreach (DataRow row in data_BSM.Rows) { var jc_TBMJ = row["TBMJ"].ToDouble(); List shpList = new List(); var rows = data.Select($"BSM ='{row["BSM"]}'"); foreach (var item in rows) { Adjustment adj = new Adjustment(); adj.ID = item["OBJECTID"].ToInt(); if (AreaList.ContainsKey(adj.ID)) adj.bgmj = AreaList[adj.ID]; shpList.Add(adj); } if (shpList.Count > 0) { AreaAdjustment(shpList, jc_TBMJ);//面积平差 foreach (var item in shpList) { if (!_GXGCvaluePairs.ContainsKey(item.ID)) _GXGCvaluePairs.Add(item.ID, item.bgmj); } } } } var strBSM = GetNewBSM(new List() { JcTbLayer.FeatureClass }); Dictionary dicTBBH = new Dictionary(); GetMaxTBBH(JcTbLayer.FeatureClass, ref dicTBBH); rdbHelper.BeginTransaction(); foreach (var oid in _GXGCvaluePairs.Keys) { rdbHelper.ExecuteSQL(string.Format(@"update dltbgxgc set tbbgmj={1} where objectid={0};", oid, _GXGCvaluePairs[oid])); } rdbHelper.Commit(); DataTable txbgTB = rdbHelper.ExecuteDatatable("tab", "select OBJECTID,BSM,ZLDWDM_1,TBMJ from DLTBGXGC where (bgxw='2' or bgxw='3') and bsm_1 is null and tbbh_1 is null and tbbgmj is null", true); rdbHelper.BeginTransaction(); foreach (DataRow item in txbgTB.Rows) { rdbHelper.ExecuteSQL(string.Format(@"update dltbgxgc set tbbgmj=TBMJ where objectid={0};", item["OBJECTID"])); } rdbHelper.Commit(); #endregion rdbHelper.ExecuteSQL(string.Format(@"update dltbgxgc set tbbgmj=TBMJ,BSM_1=BSM,TBBH_1=TBBH where BGXW='1'")); rdbHelper.ExecuteSQL(string.Format(@"update dltbgxgc set shape_area_1=tbbgmj where BGXW='1'")); #region 调出面积平差 DataTable pcDT = rdbHelper.ExecuteDatatable("pc", "select sum(tbbgmj) from dltbgxgc where xzqtzlx='2'", true); double tcMJ = pcDT.Rows[0][0].ToDouble(); if (parm.PrjInfo.KZMJ != null && tcMJ > 0) { double ldmjc = (parm.PrjInfo.KZMJ.TZQ_LDMJ - parm.PrjInfo.KZMJ.TZH_LDMJ).ToDouble(2); if (!(parm.PrjInfo.KZMJ.TZQ_LDMJ == 0 && parm.PrjInfo.KZMJ.TZH_LDMJ == 0 && parm.PrjInfo.KZMJ.TZQ_HDMJ == 0 && parm.PrjInfo.KZMJ.TZH_HDMJ == 0)) { double mjc = (ldmjc - tcMJ).ToDouble(2); while (mjc != 0) { int pcs = Math.Abs(mjc / 0.01).ToInt(); string pcSql = string.Format($@"select objectid,tbbgmj,bsm,xzqtzlx,bgxw from dltbgxgc where xzqtzlx = '2' and bgxw = '2' and tbbgmj<>tbmj ORDER by tbbgmj desc LIMIT {pcs}"); DataTable temp = rdbHelper.ExecuteDatatable("temp", pcSql, true); pcSql = $@"select * from dltbgxgc where (xzqtzlx='0' or xzqtzlx is null) and bsm in ( select bsm from dltbgxgc where xzqtzlx = '2' and bgxw = '2' and tbbgmj<>tbmj ORDER by tbbgmj desc LIMIT {pcs} )"; DataTable temp1 = rdbHelper.ExecuteDatatable("temp2", pcSql, true); Dictionary hc_bsmCount = new Dictionary(); Dictionary bsmCount = new Dictionary(); rdbHelper.BeginTransaction(); string upMJSql = $@" update dltbgxgc set tbbgmj=tbbgmj+0.01 where objectid in (select objectid from dltbgxgc where xzqtzlx = '2' and bgxw = '2' and tbbgmj<>tbmj ORDER by tbbgmj DESC LIMIT {pcs})"; if (mjc < 0) { upMJSql = $@" update dltbgxgc set tbbgmj=tbbgmj-0.01 where objectid in (select objectid from dltbgxgc where xzqtzlx = '2' and bgxw = '2' and tbbgmj<>tbmj ORDER by tbbgmj DESC LIMIT {pcs})"; } rdbHelper.ExecuteSQL(upMJSql); for (int i = 0; i < temp.Rows.Count; i++) { if (mjc > 0) { //+ int oid = temp.Rows[i]["OBJECTID"].ToInt(); string tempBSM = temp.Rows[i]["BSM"].ToTrim(); string strTZLX = temp.Rows[i]["XZQTZLX"].ToTrim(); if (_GXGCvaluePairs.ContainsKey(oid)) { if (hc_bsmCount.ContainsKey(tempBSM)) { hc_bsmCount[tempBSM] = hc_bsmCount[tempBSM] + 1; } else { hc_bsmCount.Add(tempBSM, 1); } _GXGCvaluePairs[oid] = (_GXGCvaluePairs[oid] + 0.01).ToDouble(2); } } else { //- int oid = temp.Rows[i]["OBJECTID"].ToInt(); string tempBSM = temp.Rows[i]["BSM"].ToTrim(); string strTZLX = temp.Rows[i]["XZQTZLX"].ToTrim(); if (_GXGCvaluePairs.ContainsKey(oid)) { if (hc_bsmCount.ContainsKey(tempBSM)) { hc_bsmCount[tempBSM] = hc_bsmCount[tempBSM] + 1; } else { hc_bsmCount.Add(tempBSM, 1); } _GXGCvaluePairs[oid] = (_GXGCvaluePairs[oid] - 0.01).ToDouble(2); } } } for (int i = 0; i < temp1.Rows.Count; i++) { if (mjc > 0) { //+ int oid = temp1.Rows[i]["OBJECTID"].ToInt(); string tempBSM = temp1.Rows[i]["BSM"].ToTrim(); string strTZLX = temp1.Rows[i]["XZQTZLX"].ToTrim(); if (_GXGCvaluePairs.ContainsKey(oid)) { if (bsmCount.ContainsKey(tempBSM)) { continue; } else { bsmCount.Add(tempBSM, 1); } double value = 0.01 * hc_bsmCount[tempBSM]; _GXGCvaluePairs[oid] = (_GXGCvaluePairs[oid] - value).ToDouble(2); rdbHelper.ExecuteSQL($@"update dltbgxgc set tbbgmj=tbbgmj-{value} where objectid={oid}"); } } else { //- int oid = temp1.Rows[i]["OBJECTID"].ToInt(); string tempBSM = temp1.Rows[i]["BSM"].ToTrim(); string strTZLX = temp1.Rows[i]["XZQTZLX"].ToTrim(); if (_GXGCvaluePairs.ContainsKey(oid)) { if (bsmCount.ContainsKey(tempBSM)) { continue; } else { bsmCount.Add(tempBSM, 1); } double value = 0.01 * hc_bsmCount[tempBSM]; _GXGCvaluePairs[oid] = (_GXGCvaluePairs[oid] + value).ToDouble(2); rdbHelper.ExecuteSQL($@"update dltbgxgc set tbbgmj=tbbgmj+{value} where objectid={oid}"); } } } rdbHelper.Commit(); if (mjc > 0) { mjc = Math.Round(mjc - temp.Rows.Count * 0.01, 2); } else if (mjc < 0) { mjc = Math.Round(mjc + temp.Rows.Count * 0.01, 2); } } } } #endregion txbgTB = rdbHelper.ExecuteDatatable("tab", "select FID_DLTBGX,sum(tbbgmj) bghtbmj,ZLDWDM_1,BGXW,BSM,XZQTZLX from dltbgxgc where bgxw='2' or bgxw='3' or xzqtzlx='1' or (bgxw='1' and substr(ZLDWDM,0,13)<>substr(ZLDWDM_1,0,13)) group by FID_DLTBGX;", true); rdbHelper.BeginTransaction(); foreach (DataRow item in txbgTB.Rows) { string TBBH = string.Empty; string BGQBSM = string.Empty; if (item["BGXW"].ToTrim() != "1" || item["XZQTZLX"].ToTrim() == "1") { var strbsm = strBSM.Substring(0, 10); var Maxbsm = strBSM.Substring(10).ToInt() + 1; strBSM = strbsm + Maxbsm.ToString().PadLeft(8, '0');//最新标识码 } else { BGQBSM = item["BSM"].ToTrim(); } string strZLDM = item["ZLDWDM_1"].ToTrim(); if (strZLDM.Length > 12) strZLDM = strZLDM.Substring(0, 12); if (dicTBBH.ContainsKey(strZLDM)) { dicTBBH[strZLDM] = dicTBBH[strZLDM] + 1;//最大图斑编号-去最新值 TBBH = dicTBBH[strZLDM].ToTrim(); } else { dicTBBH.Add(strZLDM, 1); TBBH = dicTBBH[strZLDM].ToTrim(); } rdbHelper.ExecuteSQL(string.Format(@"update dltbgxgc set BSM_1='{1}',TBBH_1='{2}',shape_area_1={3} where FID_DLTBGX={0};", item["FID_DLTBGX"], string.IsNullOrWhiteSpace(BGQBSM) ? strBSM : BGQBSM, TBBH, item["BGHTBMJ"])); } //foreach (DataRow dr in txbgTB.Rows) //{ // rdbHelper.ExecuteSQL(string.Format(@"update dltbgxgc set shape_area_1={1} where FID_DLTBGX={0}", dr["FID_DLTBGX"], dr["BGHTBMJ"])); //} rdbHelper.Commit(); rdbHelper.ExecuteSQL(string.Format(@"update DLTBGXGC set BZ_1='1' WHERE BGXW ='1' and ( TRIM(IfNull(ZLDWDM,'')) != TRIM(IfNull(ZLDWDM_1,'')) or TRIM(IfNull(ZLDWMC,'')) != TRIM(IfNull(ZLDWMC_1,'')) or TRIM(IfNull(QSDWDM,'')) != TRIM(IfNull(QSDWDM_1,'')) or TRIM(IfNull(QSDWMC,'')) != TRIM(IfNull(QSDWMC_1,'')) ) and TRIM(IfNull(DLBM,'')) = TRIM(IfNull(DLBM_1,'')) and TRIM(IfNull(DLMC,'')) = TRIM(IfNull(DLMC_1,'')) and TRIM(IfNull(QSXZ,'')) = TRIM(IfNull(QSXZ_1,'')) and TRIM(IfNull(KCDLBM,'')) = TRIM(IfNull(KCDLBM_1,'')) and ((IfNull(KCXS,0)==0) = (IfNull(KCXS_1,0)=0)) and TRIM(IfNull(GDLX,'')) = TRIM(IfNull(GDLX_1,'')) and TRIM(IfNull(GDPDJB,'')) = TRIM(IfNull(GDPDJB_1,'')) and ((IfNull(XZDWKD,0)==0) = (IfNull(XZDWKD_1,0)=0)) and TRIM(IfNull(TBXHDM,'')) = TRIM(IfNull(TBXHDM_1,'')) and TRIM(IfNull(TBXHMC,'')) = TRIM(IfNull(TBXHMC_1,'')) and TRIM(IfNull(ZZSXDM,'')) = TRIM(IfNull(ZZSXDM_1,'')) and TRIM(IfNull(ZZSXMC,'')) = TRIM(IfNull(ZZSXMC_1,'')) and ((IfNull(GDDB,0)==0) = (IfNull(GDDB_1,0)=0)) and TRIM(IfNull(FRDBS,'')) = TRIM(IfNull(FRDBS_1,'')) and TRIM(IfNull(CZCSXM,'')) = TRIM(IfNull(CZCSXM_1,''))")); rdbHelper.ExecuteSQL(string.Format(@"update DLTBGXGC set BZ_1='1' WHERE BGXW ='1' and (XZQTZLX = '2' or XZQTZLX = '4')")); Console.WriteLine("Msg:正在写入过程数据..."); #region 生成更新过程层 DataTable data_BGXW = rdbHelper.ExecuteDatatable("tab", @"select FID_DLTBGX,FID_JC_DLTB,BGXW,TBBGMJ,BSM_1,TBBH_1,OBJECTID,TBMJ,bz_1 from DLTBGXGC WHERE BGXW IS NOT NULL ", true); GXGCFcToFc(Temp_DLTBGXGC.FeatureClass, GxgcTBLayer.FeatureClass, null, false, data_BGXW, _GXGCvaluePairs); #endregion Console.WriteLine("Msg:正在写入更新数据..."); #region 生成更新层 IFeatureClassAPI TempGXAPI = wsAPI1.OpenFeatureClass("DLTBGX"); DataTable dtDLTBGX = rdbHelper.ExecuteDatatable("tab", @"select FID_DLTBGX,shape_area_1 as TBMJ,BSM_1,TBBH_1,BZ_1 from DLTBGXGC WHERE BGXW IS NOT NULL and ((XZQTZLX <> '2' and XZQTZLX<> '4') or XZQTZLX is NULL) ", true); GXFcToFc(TempGXAPI.FeatureClass, GxTbLayer.FeatureClass, null, dtDLTBGX); #endregion #region 关于田坎系数调整: //1.变更前后均为耕地,涉及切割时,切割后的耕地坡度和田坎系数继承原耕地,不重算(耕地内部二级类变化的,坡度不变,系数调整)。 //2.变更前后均为耕地,涉及合并时,如果合并前的耕地坡度或田坎系数不一样,不合并(位置相邻、地类、坡度、系数等均一致的可合并)。 //3.耕地部分变更为非耕地的,剩余耕地重算坡度级别,并相应调整田坎系数。变更为非耕地的图斑面积大于等于400平米时(多部件合计400),认定为部分变更;否则视同前后均为耕地,按规则1、2处理。 //GD_FGD(GxgcTBLayer.FeatureClass, GxTbLayer.FeatureClass); #endregion //CustomGPHelper.RepairGeo(GxTbLayer.FeatureClass); //CustomGPHelper.RepairGeo(GxgcTBLayer.FeatureClass); if (Parm != null && Parm.PrjInfo != null && (Parm.PrjInfo.ProjType == EnumProjType.RCBG_BCGD || Parm.PrjInfo.ProjType == EnumProjType.RCBG_ZJG)) { //为日常变更赋值部分属性 IFeatureCursor featureGC = GxgcTBLayer.FeatureClass.Update(null, true); IFeature GCFeature = null; int XMMCIndex = GxgcTBLayer.FeatureClass.FindField("XMMC"); int XMBHIndex = GxgcTBLayer.FeatureClass.FindField("XMBH"); int DKMCIndex = GxgcTBLayer.FeatureClass.FindField("DKMC"); IFeatureLayer BgTbFLayer = OpenLayer(BgWsAPI, "DLTBBG");//只读取属性信息 int BgXMMCIndex = BgTbFLayer.FeatureClass.FindField("XMMC"); int BgXMBHIndex = BgTbFLayer.FeatureClass.FindField("XMBH"); int BgDKMCIndex = BgTbFLayer.FeatureClass.FindField("DKMC"); while ((GCFeature = featureGC.NextFeature()) != null) { List features = FeatureAPI.Identify2(GCFeature.ShapeCopy, BgTbFLayer); if (features == null || features.Count == 0) continue; if (features.Count == 1) { if (XMMCIndex != -1 && BgXMMCIndex != -1) GCFeature.Value[XMMCIndex] = features[0].Value[BgXMMCIndex]; if (XMBHIndex != -1 && BgXMBHIndex != -1) GCFeature.Value[XMBHIndex] = features[0].Value[BgXMBHIndex]; if (DKMCIndex != -1 && BgDKMCIndex != -1) GCFeature.Value[DKMCIndex] = features[0].Value[BgDKMCIndex]; GCFeature.Store(); } else { double sumMJ = 0; IFeature featureTemp = null; foreach (IFeature Fitem in features) { double sumMJTemp = FeatureAPI.GetInterArea(Fitem.ShapeCopy, GCFeature.ShapeCopy); if (sumMJTemp > sumMJ) { featureTemp = Fitem; sumMJ = sumMJTemp; } } if (featureTemp != null) { if (XMMCIndex != -1 && BgXMMCIndex != -1) GCFeature.Value[XMMCIndex] = featureTemp.Value[BgXMMCIndex]; if (XMBHIndex != -1 && BgXMBHIndex != -1) GCFeature.Value[XMBHIndex] = featureTemp.Value[BgXMBHIndex]; if (DKMCIndex != -1 && BgDKMCIndex != -1) GCFeature.Value[DKMCIndex] = featureTemp.Value[BgDKMCIndex]; GCFeature.Store(); } else { //Console.WriteLine($"Msg:为相交的数据:{GCFeature.OID}"); } } } featureGC.Flush(); } Console.WriteLine("Msg:正在生成年末数据..."); base.CreateNMK(parm); Console.WriteLine($"Log:地类图斑数据提取完成。耗时:{GetTime(StartTime)}"); } catch (Exception ex) { LogAPI.Debug(ex); Console.WriteLine("Err:地类图斑数据提取失败!" + ex.Message); Console.WriteLine("Err:地类图斑数据提取失败!" + ex.StackTrace); } finally { //this.CloseLoading(); //if (JcTbLayer.FeatureClass != null) // Marshal.ReleaseComObject(JcTbLayer.FeatureClass); //if (GxTbLayer.FeatureClass != null) // Marshal.ReleaseComObject(GxTbLayer.FeatureClass); //if (GxgcTBLayer.FeatureClass != null) // Marshal.ReleaseComObject(GxgcTBLayer.FeatureClass); //if (BgTbLayer.FeatureClass != null) // Marshal.ReleaseComObject(BgTbLayer.FeatureClass); } } private void GD_FGD(IFeatureClass DLTBGXGCFC, IFeatureClass DLTBGXFC) { IWorkspace pOutWork = null; try { string TempDir = CreateTempDB("KCXSUpdate_1"); string dbPath = TempDir + @"\Temp" + ".sqlite"; pOutWork = CreateDBWorkspace(dbPath); IRDBHelper rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); rdbHelper.ExecuteSQL(" drop table DLTBGXGC "); TableToTable((DLTBGXGCFC as FeatureClass).Workspace as IFeatureWorkspace, pOutWork, "DLTBGXGC"); DataTable dt = rdbHelper.ExecuteDatatable("dt", @" select bgqtbbsm,bghtbbsm,bgqgdpdjb,bghgdpdjb,bgqkcxs,bghkcxs,BGQGDLX,BGHGDLX,TBBGMJ from DLTBGXGC d2 WHERE BGHTBBSM||'-'||TBBGMJ in( select BGHTBBSM||'-'||MAX(TBBGMJ) TBBGMJ from DLTBGXGC d WHERE BGHTBBSM in (select BGHTBBSM from dltbgxgc where substr(bgqdlbm,1,2)='01' and substr(bghdlbm,1,2)='01' and bgxw='2' and (BGQGDPDJB<>BGHGDPDJB or BGQKCXS<> BGHKCXS ) ) group by BGHTBBSM )and bgqtbbsm not in (select bgqtbbsm from (SELECT BGQTBBSM ,substr(bghdlbm,1,2) BGHDLBM,COUNT(1) from dltbgxgc group by BGQTBBSM ,substr(bghdlbm,1,2) ) group by BGQTBBSM HAVING count(1)>1) ", true); for (int i = 0; i < dt.Rows.Count; i++) { (DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGXGC set BGHKCXS={dt.Rows[i]["BGQKCXS"]} where BGHTBBSM='{dt.Rows[i]["BGHTBBSM"]}'"); (DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGXGC set BGHGDPDJB='{dt.Rows[i]["BGQGDPDJB"]}' where BGHTBBSM='{dt.Rows[i]["BGHTBBSM"]}'"); (DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGXGC set BGHGDLX='{dt.Rows[i]["BGQGDLX"]}' where BGHTBBSM='{dt.Rows[i]["BGHTBBSM"]}'"); (DLTBGXFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGX set KCXS={dt.Rows[i]["BGQKCXS"]} where BSM='{dt.Rows[i]["BGHTBBSM"]}'"); (DLTBGXFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGX set GDPDJB='{dt.Rows[i]["BGQGDPDJB"]}' where BSM='{dt.Rows[i]["BGHTBBSM"]}'"); (DLTBGXFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGX set GDLX='{dt.Rows[i]["BGQGDLX"]}' where BSM='{dt.Rows[i]["BGHTBBSM"]}'"); } } catch (Exception ex) { LogAPI.Debug("异常:" + ex.Message); } finally { if (pOutWork != null) Marshal.ReleaseComObject(pOutWork); } } public void CalculateArea(object pParm) { try { CalcAreaParm CalParm = pParm as CalcAreaParm; IFeatureLayer _Layer = GeoDBAPI.DeSerialzedPersist(CalParm.StrLayer) as IFeatureLayer; IFeatureCursor pCursor = _Layer.FeatureClass.Search(new QueryFilterClass() { SubFields = "OBJECTID,BSM,TBMJ,SHAPE" }, true); var _itbmj = _Layer.FeatureClass.FindField("TBMJ"); var bsmIdx = _Layer.FeatureClass.FindField("BSM"); IFeature feature = null; while ((feature = pCursor.NextFeature()) != null) { string bsm = feature.Value[bsmIdx].ToTrim(); if (!CalParm.BsmList.Contains(bsm)) continue; double area = GetEllipseArea(feature.ShapeCopy); lock (AreaList) { AreaList.Add(feature.OID, area.ToDouble()); } } } catch (Exception ex) { //Console.WriteLine(ex.Message); } } public class CalcAreaParm { public string StrLayer { get; set; } public int StartIndex { get; set; } public List BsmList { get; set; } } public void OpenDB(IDGParameter parm) { try { LayerCfg layerInfo = null; if (parm.PrjInfo != null && !string.IsNullOrWhiteSpace(parm.PrjInfo.TempData)) { byte[] contentArray = Convert.FromBase64String(parm.PrjInfo.TempData); string LayerCfg = System.Text.Encoding.Default.GetString(contentArray); layerInfo = SerializeAPI.DeserializeToObject(LayerCfg); } if (layerInfo == null) { throw new Exception("Err:获取图层信息失败!"); } //FileInfo fileInfo = new FileInfo(parm.PrjInfo.BGDatabase); string PathBgDB = parm.PrjInfo.BGDatabase;// Path.Combine(, "BGDB" + ".gdb"); string PathZLDB = parm.PrjInfo.ZLDatabase; //string PathNMDB = parm.PrjInfo.NMDatabase; BgWsAPI = new WorkspaceAPI(PathBgDB, WorkspaceTypeEnum.GDBFile, true); if (BgWsAPI.CurrentWorkspace == null) { Console.WriteLine("打开变更数据库失败!"); return; } ZlWsAPI = new WorkspaceAPI(PathZLDB, WorkspaceTypeEnum.GDBFile, true); if (ZlWsAPI.CurrentWorkspace == null) { Console.WriteLine("打开增量数据库失败!"); return; } NmWsAPI = new WorkspaceAPI(parm.PrjInfo.NMDatabase, WorkspaceTypeEnum.GDBFile, true); if (NmWsAPI.CurrentWorkspace == null) { Console.WriteLine("打开年末数据库失败!"); //return; } LayerCfg JCLayerInfo = layerInfo.Layers.FirstOrDefault(f => f.LayerName == "年初数据"); if (JCLayerInfo == null) { throw new Exception("Err:获取年初数据库失败!"); } List NcList = JCLayerInfo.GetAllItem(); //if (parm.ExeDLTB) //{ LayerCfg _JcTBLayerInfo = NcList.FirstOrDefault(f => f.LayerName == "地类图斑"); _jcTbLayer = OpenLayer(_JcTBLayerInfo); if (_jcTbLayer == null) { throw new Exception("Err:获取年初地类图斑数据失败!"); } else CheackJCGDB(_jcTbLayer); LayerCfg _JcPdtLayerInfo = NcList.FirstOrDefault(f => f.LayerName == "坡度图"); _jcPdtLayer = OpenLayer(_JcPdtLayerInfo); if (_jcPdtLayer == null) { //throw new Exception("Err:获取年初坡度图数据失败!"); } _bgTbLayer = OpenLayer(BgWsAPI, "DLTBBG"); _gxTbLayer = OpenLayer(ZlWsAPI, "DLTBGX"); _gxgcTBLayer = OpenLayer(ZlWsAPI, "DLTBGXGC"); _gxPdtLayer = OpenLayer(ZlWsAPI, "PDTGX"); _nmTbLayer = OpenLayer(NmWsAPI, "DLTB_NMK"); } catch (Exception ex) { Console.WriteLine("打开年末数据库失败!" + ex.Message + ex.StackTrace); throw ex; } } public void CheackJCGDB(IFeatureLayer JClayer) { if (((IDataset)JClayer.FeatureClass).Name != "DLTB") { throw new Exception("Err:年初地类图斑要素类名称非“DLTB”,需使用国家下发的原始基础库!"); } if (JClayer.FeatureClass.OIDFieldName != "OBJECTID") { throw new Exception("Err:年初地类图斑数据主键字段非“OBJECTID”,需使用国家下发的原始基础库!"); } if (JClayer.FeatureClass.Fields.FieldCount == 0) { throw new Exception("Err:年初地类图斑数据字段结构与国家下发模板存在差异,需使用国家下发的原始基础库!"); } string FieldsJH = "OBJECTID,BSM,TBYBH,YSDM,TBBH,DLBM,DLMC,QSXZ,QSDWDM,QSDWMC,ZLDWDM,ZLDWMC,TBMJ,KCDLBM,KCXS,KCMJ,TBDLMJ,GDLX,GDPDJB,XZDWKD,TBXHDM,TBXHMC,ZZSXDM,ZZSXMC,GDDB,FRDBS,CZCSXM,SJNF,MSSM,HDMC,BZ"; foreach (var item in FieldsJH.Split(',')) { int fieldIndex = JClayer.FeatureClass.Fields.FindField(item); if (fieldIndex == -1) throw new Exception($"Err:年初地类图斑数据缺失字段“{item}”,需使用国家下发的原始基础库!"); } for (int i = 0; i < JClayer.FeatureClass.Fields.FieldCount; i++) { IField field = JClayer.FeatureClass.Fields.get_Field(i); if (!field.Editable || field.Name.ToUpper().Contains("SHAPE") || field.Name == "XZQTZLX") continue; if (!FieldsJH.Contains(field.Name)) throw new Exception($"Err:年初地类图斑数据出现非国家下发字段“{field.Name}”,需使用国家下发的原始基础库!"); } } private IWorkspace CreateDBWorkspace(string pDbPath) { try { if (!File.Exists(pDbPath)) { Console.WriteLine(string.Format("指定的文件路径{0}不存在!", pDbPath)); return null; } IWorkspaceFactory pOutWorkFactory = null; pOutWorkFactory = new SqlWorkspaceFactoryClass(); IWorkspace pOutWork = pOutWorkFactory.OpenFromFile(pDbPath, 0); return pOutWork; } catch (Exception ex) { Console.WriteLine($"Log:CreateDBWorkspace错误:{ex.Message}"); throw; } } private IFeatureLayer ProcessBGTB() { IFeatureLayer result = null; IWorkspaceAPI wsAPI = null; IFeatureClassAPI fcAPI = null; try { #region 空属性值 赋值 #region 变更图斑 string BgtbName = (BgTbLayer.FeatureClass as FeatureClass).BrowseName; Console.WriteLine($"Log:变更图斑空属性赋值:" + BgtbName); //Console.WriteLine($"Log:KCDLBM"); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set XZQTZLX =Null where XZQTZLX='3' "); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set XZQTZLX =Null where XZQTZLX='0' ");//变更层行政区调整类型影响变更过程图斑合并问题; (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set XZQTZLX =Null where XZQTZLX is Null OR XZQTZLX='' or XZQTZLX=' ' or XZQTZLX=' ' "); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set KCDLBM =Null where KCDLBM is Null or KCDLBM=' ' or KCDLBM=' ' "); //Console.WriteLine($"Log:KCDLBM"); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set KCXS=0 where KCXS is Null "); //Console.WriteLine($"Log:KCXS"); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set GDLX =Null where GDLX is Null or GDLX=' ' or GDLX=' ' "); //Console.WriteLine($"Log:GDLX"); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set GDPDJB =Null where GDPDJB is Null or GDPDJB=' ' or GDPDJB=' ' "); //Console.WriteLine($"Log:GDPDJB"); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set XZDWKD=0 where XZDWKD is Null "); //Console.WriteLine($"Log:XZDWKD"); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set TBXHDM =Null where TBXHDM is Null or TBXHDM=' ' or TBXHDM=' ' "); //Console.WriteLine($"Log:TBXHDM"); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set TBXHMC =Null where TBXHMC is Null or TBXHMC=' ' or TBXHMC=' ' "); //Console.WriteLine($"Log:TBXHMC"); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set ZZSXDM =Null where ZZSXDM is Null or ZZSXDM=' ' or ZZSXDM=' ' "); //Console.WriteLine($"Log:ZZSXDM"); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set ZZSXMC =Null where ZZSXMC is Null or ZZSXMC=' ' or ZZSXMC=' ' "); //Console.WriteLine($"Log:ZZSXMC"); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set GDDB =0 where GDDB is Null "); //Console.WriteLine($"Log:GDDB"); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set FRDBS =Null where FRDBS is Null or FRDBS=' ' or FRDBS=' ' "); //Console.WriteLine($"Log:FRDBS"); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set CZCSXM =Null where CZCSXM is Null or CZCSXM=' ' or CZCSXM=' ' "); //Console.WriteLine($"Log:CZCSXM"); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set MSSM =Null where MSSM is Null or MSSM=' ' or MSSM=' ' "); //Console.WriteLine($"Log:MSSM"); (BgTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {BgtbName} set HDMC =Null where HDMC is Null or HDMC=' ' or HDMC=' ' "); //Console.WriteLine($"Log:HDMC"); #endregion #region 基础地类图斑 //string JC_DLTBName = (JcTbLayer.FeatureClass as FeatureClass).BrowseName; //Console.WriteLine($"Log:基础图斑空属性赋值:" + JC_DLTBName); //Console.WriteLine($"Log:KCDLBM"); //(JcTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {JC_DLTBName} set KCDLBM =Null where KCDLBM is Null or KCDLBM=' ' or KCDLBM=' ' "); //Console.WriteLine($"Log:KCXS"); //(JcTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {JC_DLTBName} set KCXS =0 where KCXS is Null"); //Console.WriteLine($"Log:GDLX"); //(JcTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {JC_DLTBName} set GDLX =Null where GDLX is Null or GDLX=' ' or GDLX=' ' "); //Console.WriteLine($"Log:GDPDJB"); //(JcTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {JC_DLTBName} set GDPDJB =Null where GDPDJB is Null or GDPDJB=' ' or GDPDJB=' ' "); //Console.WriteLine($"Log:XZDWKD"); //(JcTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {JC_DLTBName} set XZDWKD =0 where XZDWKD is Null"); //Console.WriteLine($"Log:TBXHDM"); //(JcTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {JC_DLTBName} set TBXHDM =Null where TBXHDM is Null or TBXHDM=' ' or TBXHDM=' ' "); //Console.WriteLine($"Log:TBXHMC"); //(JcTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {JC_DLTBName} set TBXHMC =Null where TBXHMC is Null or TBXHMC=' ' or TBXHMC=' ' "); //Console.WriteLine($"Log:ZZSXDM"); //(JcTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {JC_DLTBName} set ZZSXDM =Null where ZZSXDM is Null or ZZSXDM=' ' or ZZSXDM=' ' "); //Console.WriteLine($"Log:ZZSXMC"); //(JcTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {JC_DLTBName} set ZZSXMC =Null where ZZSXMC is Null or ZZSXMC=' ' or ZZSXMC=' ' "); //Console.WriteLine($"Log:GDDB"); //(JcTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {JC_DLTBName} set GDDB =0 where GDDB is Null"); //Console.WriteLine($"Log:FRDBS"); //(JcTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {JC_DLTBName} set FRDBS =Null where FRDBS is Null or FRDBS=' ' or FRDBS=' ' "); //Console.WriteLine($"Log:CZCSXM"); //(JcTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {JC_DLTBName} set CZCSXM =Null where CZCSXM is Null or CZCSXM=' ' or CZCSXM=' ' "); //Console.WriteLine($"Log:MSSM"); //(JcTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {JC_DLTBName} set MSSM =Null where MSSM is Null or MSSM=' ' or MSSM=' ' "); //Console.WriteLine($"Log:HDMC"); //(JcTbLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Update {JC_DLTBName} set HDMC =Null where HDMC is Null or HDMC=' ' or HDMC=' ' "); //Console.WriteLine($"Log:属性处理完成"); #endregion #endregion #region 新增质检规则“地类图斑更新过程层变更前图斑细化代码标注“LQGD”,“MQGD”,“SHGD”,“SMGD”,变更后地类为耕地的图斑,变更前后图斑细化代码应保持不变”,地类图斑更新过程层变更前图斑细化代码为林区耕地、牧区耕地、沙荒耕地或石漠化耕地,变更后地类仍为耕地的图斑,变更前后图斑细化代码应保持不变。 GD_TBXHDM(); #endregion //GeoprocessorHelper helper = new GeoprocessorHelper(); //相邻同属性图斑是否合并(针对原始变更图斑层) if (Parm.AllowUnion) { LogAPI.Debug("变更图斑合并……"); IVariantArray mGPParm = new VarArrayClass(); mGPParm.Add(BgTbLayer); mGPParm.Add(TempDbPath); mGPParm.Add("DLTBBG"); CustomGPHelper.DLTBBGDissolve_Tool(mGPParm); wsAPI = new WorkspaceAPI(TempDbPath, WorkspaceTypeEnum.GDBFile, true); fcAPI = wsAPI.OpenFeatureClass("DLTBBG"); BgTbLayer.FeatureClass = fcAPI.FeatureClass; } IVariantArray mTBBGGPParm = new VarArrayClass(); mTBBGGPParm.Add(BgTbLayer); mTBBGGPParm.Add(JcTbLayer); mTBBGGPParm.Add(TempDbPath); CustomGPHelper.DLTBBG_Tool(mTBBGGPParm); if (wsAPI == null) wsAPI = new WorkspaceAPI(TempDbPath, WorkspaceTypeEnum.GDBFile, true); fcAPI = wsAPI.OpenFeatureClass("TempDLTBGX"); if (Parm.AllowPDFZ) { LogAPI.Debug("耕地坡度赋值……"); IFeatureLayer tempLayer = new FeatureLayerClass() { FeatureClass = fcAPI.FeatureClass, Name = "地类图斑" }; IVariantArray mGPParm = new VarArrayClass(); mGPParm.Add(tempLayer); if (GxPdtLayer.FeatureClass.FeatureCount(null) > 0) { mGPParm.Add(GxPdtLayer); CustomGPHelper.SetGDPDJB_Tool(mGPParm); if (wsAPI == null) wsAPI = new WorkspaceAPI(TempDbPath, WorkspaceTypeEnum.GDBFile,true); fcAPI = wsAPI.OpenFeatureClass("TempDLTBGX"); } else if (JcPdtLayer != null && JcPdtLayer.FeatureClass.FeatureCount(null) > 0) { mGPParm.Add(JcPdtLayer); CustomGPHelper.SetGDPDJB_Tool(mGPParm); if (wsAPI == null) wsAPI = new WorkspaceAPI(TempDbPath, WorkspaceTypeEnum.GDBFile, true); fcAPI = wsAPI.OpenFeatureClass("TempDLTBGX"); } } if (Parm.AllowUnion) { BgtbName = "TempDLTBGX"; Console.WriteLine($"Log:变更图斑空属性赋值:" + BgtbName); if (Parm.AutoSetGDLX) { wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set GDLX='TT' where GDPDJB in ('2','3','4','5') and DLBM = '0101' and (GDLX <> 'TT' and GDLX <> 'PD' or GDLX is NULL) "); wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set GDLX='PD' where GDPDJB in ('2','3','4','5') and (DLBM='0102' or DLBM='0103') and (GDLX <> 'TT' and GDLX <> 'PD' or GDLX is NULL) "); } if (Parm.AutoCalcGDKCSX) { wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set GDLX =Null,KCDLBM=Null,KCXS=0 where GDPDJB='1' "); //if (Parm.KCXSDic.ContainsKey("2")) //{ // wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set KCDLBM ='1203',KCXS={Parm.KCXSDic["2"]} where GDPDJB='2' and GDLX='TT' "); //} foreach (string key in Parm.KCXSDic.Keys) { string[] strGDPDArr = key.Split('-'); string strGDLX = strGDPDArr[0]; string strGDPDJB = strGDPDArr[1]; decimal strKCXS = Parm.KCXSDic[key]; string strKCDLBM = string.Empty; if ("2,3,4,5".Contains(strGDPDJB) && strKCXS != 0) strKCDLBM = "1203"; wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set KCDLBM ='{strKCDLBM}',KCXS={strKCXS} where GDPDJB='{strGDPDJB}' and GDLX='{strGDLX}' "); } } //Console.WriteLine($"Log:KCDLBM"); wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set KCDLBM =Null where KCDLBM is Null or KCDLBM=' ' or KCDLBM=' ' "); //Console.WriteLine($"Log:KCDLBM"); wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set KCXS=0 where KCXS is Null "); //Console.WriteLine($"Log:KCXS"); wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set GDLX =Null where GDLX is Null or GDLX=' ' or GDLX=' ' "); //Console.WriteLine($"Log:GDLX"); wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set GDPDJB =Null where GDPDJB is Null or GDPDJB=' ' or GDPDJB=' ' "); //Console.WriteLine($"Log:GDPDJB"); wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set XZDWKD=0 where XZDWKD is Null "); //Console.WriteLine($"Log:XZDWKD"); wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set TBXHDM =Null where TBXHDM is Null or TBXHDM=' ' or TBXHDM=' ' "); //Console.WriteLine($"Log:TBXHDM"); wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set TBXHMC =Null where TBXHMC is Null or TBXHMC=' ' or TBXHMC=' ' "); //Console.WriteLine($"Log:TBXHMC"); wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set ZZSXDM =Null where ZZSXDM is Null or ZZSXDM=' ' or ZZSXDM=' ' "); //Console.WriteLine($"Log:ZZSXDM"); wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set ZZSXMC =Null where ZZSXMC is Null or ZZSXMC=' ' or ZZSXMC=' ' "); //Console.WriteLine($"Log:ZZSXMC"); wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set GDDB =0 where GDDB is Null "); //Console.WriteLine($"Log:GDDB"); wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set FRDBS =Null where FRDBS is Null or FRDBS=' ' or FRDBS=' ' "); //Console.WriteLine($"Log:FRDBS"); wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set CZCSXM =Null where CZCSXM is Null or CZCSXM=' ' or CZCSXM=' ' "); //Console.WriteLine($"Log:CZCSXM"); wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set MSSM =Null where MSSM is Null or MSSM=' ' or MSSM=' ' "); //Console.WriteLine($"Log:MSSM"); wsAPI.CurrentWorkspace.ExecuteSQL($"Update {BgtbName} set HDMC =Null where HDMC is Null or HDMC=' ' or HDMC=' ' "); //Console.WriteLine($"Log:HDMC"); LogAPI.Debug("更新图斑合并……"); IFeatureLayer tempLayer = new FeatureLayerClass() { FeatureClass = fcAPI.FeatureClass, Name = "地类图斑" }; IVariantArray mGPParm = new VarArrayClass(); mGPParm.Add(tempLayer); mGPParm.Add(TempDbPath); mGPParm.Add("DLTBGX"); CustomGPHelper.DLTBBGDissolve_Tool(mGPParm); wsAPI = new WorkspaceAPI(TempDbPath, WorkspaceTypeEnum.GDBFile, true); fcAPI = wsAPI.OpenFeatureClass("DLTBGX"); } else { IFeatureLayer tempLayer = new FeatureLayerClass() { FeatureClass = fcAPI.FeatureClass, Name = "地类图斑" }; IFeatureLayer AllGxTBLayer = null; GPParamClass gPParamClass = new GPParamClass(); gPParamClass.FirstFeatureLayer = tempLayer; gPParamClass.OutFeatureClassPath = TempDbPath; gPParamClass.IsGetOutPutFeature = true; gPParamClass.ListDissolveFiledName = new List(); gPParamClass.FcName = "DLTBGX"; gPParamClass.GPType = EnumGPType.FcToFc; GPHelper.Instance.ExeGPForProces(gPParamClass, ref AllGxTBLayer); if (wsAPI == null) wsAPI = new WorkspaceAPI(TempDbPath, WorkspaceTypeEnum.GDBFile, true); fcAPI = wsAPI.OpenFeatureClass("DLTBGX"); } IFeatureLayer tempDLTBGX = new FeatureLayerClass() { FeatureClass = fcAPI.FeatureClass, Name = "地类图斑更新" }; if (wsAPI == null) wsAPI = new WorkspaceAPI(TempDbPath, WorkspaceTypeEnum.GDBFile, true); IFeatureClassAPI jcFcAPI = wsAPI.OpenFeatureClass("JC_DLTB"); IFeatureLayer tempJC_DLTB = new FeatureLayerClass() { FeatureClass = jcFcAPI.FeatureClass, Name = "基础地类图斑" }; IFeatureLayer ptempLayer = null; GPParamClass gPParamClass2 = new GPParamClass(); gPParamClass2.FirstFeatureLayer = tempDLTBGX; gPParamClass2.GPType = EnumGPType.Default; GPHelper.Instance.ExeGPForProces(gPParamClass2, ref ptempLayer); IVariantArray mDLTBGXGCPParm = new VarArrayClass(); mDLTBGXGCPParm.Add(tempDLTBGX); mDLTBGXGCPParm.Add(tempJC_DLTB); mDLTBGXGCPParm.Add(TempDbPath); //mDLTBGXGCPParm.Add(TempSqlitePath); CustomGPHelper.DLTBGXGC_Tool(mDLTBGXGCPParm); //fcAPI = wsAPI.OpenFeatureClass("TempDLTBGX"); } catch (Exception ex) { Console.WriteLine($"Log:变更前执行变更图斑数据处理失败:{ex.Message}"); Console.WriteLine($"Log:变更前执行变更图斑数据处理失败:{ex.StackTrace}"); LogAPI.Debug(ex); throw ex; } return result; } /// /// 新增质检规则“地类图斑更新过程层变更前图斑细化代码标注“LQGD”,“MQGD”,“SHGD”,“SMGD”,变更后地类为耕地的图斑,变更前后图斑细化代码应保持不变”,地类图斑更新过程层变更前图斑细化代码为林区耕地、牧区耕地、沙荒耕地或石漠化耕地,变更后地类仍为耕地的图斑,变更前后图斑细化代码应保持不变。 /// /// /// private void GD_TBXHDM() { IWorkspace pOutWork = null; GPParamClass paramClass = new GPParamClass(); IFeatureLayer IntersectLayer = null; IFeatureSelection jcfeatureSelection = null; IFeatureSelection bgfeatureSelection = null; try { string TempDir = CreateTempDB("BGTB_JCDLTB"); string temppath = System.IO.Path.Combine(TempDir, "TempGDB.gdb"); bgfeatureSelection = BgTbLayer as IFeatureSelection; bgfeatureSelection.Clear(); bgfeatureSelection.SelectFeatures(new QueryFilterClass() { WhereClause = "dlbm in ('0101','0102','0103') and (tbxhdm is null or tbxhdm='')" }, esriSelectionResultEnum.esriSelectionResultNew, false); if ((BgTbLayer as IFeatureSelection).SelectionSet.Count > 0) { jcfeatureSelection = JcTbLayer as IFeatureSelection; jcfeatureSelection.Clear(); jcfeatureSelection.SelectFeatures(new QueryFilterClass() { WhereClause = "tbxhdm in('LQGD','MQGD','SHGD','SMGD')" }, esriSelectionResultEnum.esriSelectionResultNew, false); if ((JcTbLayer as IFeatureSelection).SelectionSet.Count > 0) { GPParamClass gPParamClass = new GPParamClass { FirstFeatureLayer = BgTbLayer, SecondFeatureLayer = JcTbLayer, OutFeatureClassPath = $"{TempDir}\\TempGDB.gdb\\BGTB_JCDLTB", IsGetOutPutFeature = true, GPType = EnumGPType.Intersect }; GPHelper.Instance.ExeGPForProces(gPParamClass, ref IntersectLayer); } } bgfeatureSelection.Clear(); jcfeatureSelection.Clear(); if (IntersectLayer != null) { IFeature feature = null; WorkspaceAPI BgWsAPI = new WorkspaceAPI($"{TempDir}\\TempGDB.gdb", WorkspaceTypeEnum.GDBFile, true); IFeatureClassAPI FeatureClass = BgWsAPI.OpenFeatureClass("BGTB_JCDLTB"); IFeatureCursor Cursor = FeatureClass.FeatureClass.Search(new QueryFilterClass() { WhereClause = " dlbm in ('0101','0102','0103') and (tbxhdm is null or tbxhdm='') and tbxhdm_1 in('LQGD','MQGD','SHGD','SMGD')" }, false); var ibgtboid = FeatureClass.FeatureClass.FindField("FID_DLTBBG"); var ixhdm = FeatureClass.FeatureClass.FindField("TBXHDM_1"); var ixhmc = FeatureClass.FeatureClass.FindField("TBXHMC_1"); while ((feature = Cursor.NextFeature()) != null) { string oid = feature.Value[ibgtboid].ToTrim(); string TBXHDM = feature.Value[ixhdm].ToTrim(); string TBXHMC = feature.Value[ixhmc].ToTrim(); (BgTbLayer as FeatureClass).Workspace.ExecuteSQL($"update DLTBBG set TBXHDM='{TBXHDM}' where OBJECTID={oid} "); (BgTbLayer as FeatureClass).Workspace.ExecuteSQL($"update DLTBBG set TBXHMC='{TBXHMC}' where OBJECTID={oid} "); } } if (Parm.AllowPDFZ) { //string dbPath = TempDir + @"\Temp" + ".sqlite"; //pOutWork = CreateDBWorkspace(dbPath); //IRDBHelper rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); //rdbHelper.ExecuteSQL(" drop table BGTB_JCDLTB "); //IWorkspaceAPI wsAPI1 = new WorkspaceAPI(temppath, WorkspaceTypeEnum.GDBFile); //TableToTable(wsAPI1.CurrentWorkspace as IFeatureWorkspace, pOutWork, "BGTB_JCDLTB"); //DataTable dt = rdbHelper.ExecuteDatatable("dt", @" select bgqtbbsm,bghtbbsm,bgqgdpdjb,bghgdpdjb,bgqkcxs,bghkcxs,BGQGDLX,BGHGDLX,TBBGMJ from DLTBGXGC d2 WHERE BGHTBBSM||'-'||TBBGMJ in( select BGHTBBSM||'-'||MAX(TBBGMJ) TBBGMJ from DLTBGXGC d WHERE BGHTBBSM in (select BGHTBBSM from dltbgxgc where substr(bgqdlbm,1,2)='01' and substr(bghdlbm,1,2)='01' and bgxw='2' and (BGQGDPDJB<>BGHGDPDJB or BGQKCXS<> BGHKCXS ) ) group by BGHTBBSM )and bgqtbbsm not in (select bgqtbbsm from (SELECT BGQTBBSM ,substr(bghdlbm,1,2) BGHDLBM,COUNT(1) from dltbgxgc group by BGQTBBSM ,substr(bghdlbm,1,2) ) group by BGQTBBSM HAVING count(1)>1) ", true); } } catch (Exception ex) { LogAPI.Debug("异常:" + ex.Message); } finally { if (pOutWork != null) Marshal.ReleaseComObject(pOutWork); } } private void SetDLTBBG_PDJB() { IWorkspace pOutWork = null; try { //string TempDir = CreateTempDB("KCXSUpdate_1"); //string dbPath = TempDir + @"\Temp" + ".sqlite"; //pOutWork = CreateDBWorkspace(dbPath); //IRDBHelper rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); //rdbHelper.ExecuteSQL(" drop table DLTBGXGC "); //TableToTable((DLTBGXGCFC as FeatureClass).Workspace as IFeatureWorkspace, pOutWork, "DLTBGXGC"); //DataTable dt = rdbHelper.ExecuteDatatable("dt", @" select bgqtbbsm,bghtbbsm,bgqgdpdjb,bghgdpdjb,bgqkcxs,bghkcxs,BGQGDLX,BGHGDLX,TBBGMJ from DLTBGXGC d2 WHERE BGHTBBSM||'-'||TBBGMJ in( select BGHTBBSM||'-'||MAX(TBBGMJ) TBBGMJ from DLTBGXGC d WHERE BGHTBBSM in (select BGHTBBSM from dltbgxgc where substr(bgqdlbm,1,2)='01' and substr(bghdlbm,1,2)='01' and bgxw='2' and (BGQGDPDJB<>BGHGDPDJB or BGQKCXS<> BGHKCXS ) ) group by BGHTBBSM )and bgqtbbsm not in (select bgqtbbsm from (SELECT BGQTBBSM ,substr(bghdlbm,1,2) BGHDLBM,COUNT(1) from dltbgxgc group by BGQTBBSM ,substr(bghdlbm,1,2) ) group by BGQTBBSM HAVING count(1)>1) ", true); //for (int i = 0; i < dt.Rows.Count; i++) //{ // (DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGXGC set BGHKCXS={dt.Rows[i]["BGQKCXS"]} where BGHTBBSM='{dt.Rows[i]["BGHTBBSM"]}'"); // (DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGXGC set BGHGDPDJB='{dt.Rows[i]["BGQGDPDJB"]}' where BGHTBBSM='{dt.Rows[i]["BGHTBBSM"]}'"); // (DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGXGC set BGHGDLX='{dt.Rows[i]["BGQGDLX"]}' where BGHTBBSM='{dt.Rows[i]["BGHTBBSM"]}'"); // (DLTBGXFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGX set KCXS={dt.Rows[i]["BGQKCXS"]} where BSM='{dt.Rows[i]["BGHTBBSM"]}'"); // (DLTBGXFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGX set GDPDJB='{dt.Rows[i]["BGQGDPDJB"]}' where BSM='{dt.Rows[i]["BGHTBBSM"]}'"); // (DLTBGXFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGX set GDLX='{dt.Rows[i]["BGQGDLX"]}' where BSM='{dt.Rows[i]["BGHTBBSM"]}'"); //} } catch (Exception ex) { LogAPI.Debug("异常:" + ex.Message); } finally { if (pOutWork != null) Marshal.ReleaseComObject(pOutWork); } } private void GD_() { IWorkspace pOutWork = null; GPParamClass paramClass = new GPParamClass(); IFeatureLayer IntersectLayer = null; try { string TempDir = CreateTempDB("BGTB_JCDLTB1"); IFeatureLayer bgselect = null; paramClass = new GPParamClass(); paramClass.FirstFeatureLayer = BgTbLayer; paramClass.GPType = EnumGPType.SelectLayerByAttribute; paramClass.IsGetOutPutFeature = true; paramClass.Where_clause = "dlbm in ('0101','0102','0103')"; paramClass.FcName = "BGTB"; paramClass.TempGDBPath = $"{TempDir}\\TempGDB.gdb"; GPHelper.Instance.ExeGPForProces(paramClass, ref bgselect); IFeatureLayer jcselect = null; paramClass = new GPParamClass(); paramClass.FirstFeatureLayer = JcTbLayer; paramClass.GPType = EnumGPType.SelectLayerByAttribute; paramClass.IsGetOutPutFeature = true; paramClass.Where_clause = "dlbm in ('0101','0102','0103')"; paramClass.FcName = "JCTB"; paramClass.TempGDBPath = $"{TempDir}\\TempGDB.gdb"; GPHelper.Instance.ExeGPForProces(paramClass, ref jcselect); paramClass = new GPParamClass(); paramClass.FirstFeatureLayer = bgselect; paramClass.SecondFeatureLayer = jcselect; paramClass.OutFeatureClassPath = $"{TempDir}\\TempGDB.gdb\\BGTB_JCDLTB"; paramClass.IsGetOutPutFeature = true; paramClass.GPType = EnumGPType.Intersect; GPHelper.Instance.ExeGPForProces(paramClass, ref IntersectLayer); IFeature feature = null; IFeatureCursor Cursor = IntersectLayer.FeatureClass.Search(null, false); var ibgtboid = IntersectLayer.FeatureClass.FindField("FID_BGTB"); var ikcxs = IntersectLayer.FeatureClass.FindField("KCXS_1"); var igdpdjb = IntersectLayer.FeatureClass.FindField("GDPDJB_1"); var igdlx = IntersectLayer.FeatureClass.FindField("GDLX_1"); if (IntersectLayer != null) { while ((feature = Cursor.NextFeature()) != null) { string oid = feature.Value[ibgtboid].ToTrim(); string KCXS = feature.Value[ikcxs].ToTrim(); string GDPDJB = feature.Value[igdpdjb].ToTrim(); string GDLX = feature.Value[igdlx].ToTrim(); (BgTbLayer as FeatureClass).Workspace.ExecuteSQL($"update DLTBBG set KCXS={KCXS} where OBJECTID={oid} "); (BgTbLayer as FeatureClass).Workspace.ExecuteSQL($"update DLTBBG set GDPDJB={GDPDJB} where OBJECTID={oid} "); (BgTbLayer as FeatureClass).Workspace.ExecuteSQL($"update DLTBBG set GDLX='{GDLX}' where OBJECTID={oid} "); } } } catch (Exception ex) { LogAPI.Debug("异常:" + ex.Message); } finally { if (pOutWork != null) Marshal.ReleaseComObject(pOutWork); } } private IFeatureLayer GenerateTempGXGC(IFeatureLayer pTempBgTbLayer, string pTempAttrDBPath) { IFeatureLayer result = null; GPParamClass paramClass = new GPParamClass(); try { //GPParamClass paramClass = new GPParamClass(); IFeatureLayer tempLayer = null; paramClass = new GPParamClass(); paramClass.FirstFeatureLayer = JcTbLayer; paramClass.SecondFeatureLayer = pTempBgTbLayer; paramClass.TempGDBPath = $"{TempDbPath}"; paramClass.Tolerance = "-0.001"; paramClass.IsGetOutPutFeature = true; paramClass.GPType = EnumGPType.YBG; GPHelper.Instance.ExeGPForProces(paramClass, ref tempLayer); IWorkspaceAPI wsAPI = new WorkspaceAPI(TempDbPath, WorkspaceTypeEnum.GDBFile); IFeatureClassAPI fcAPI = wsAPI.OpenFeatureClass("GXGC_Multipart"); result = new FeatureLayerClass() { FeatureClass = fcAPI.FeatureClass, Name = fcAPI.FeatureClass.AliasName }; return result; #region 设置基础地类图斑选中 if (JcTbLayer.FeatureClass.FeatureCount(null) != pTempBgTbLayer.FeatureClass.FeatureCount(null)) { paramClass.Tolerance = "0.0001"; paramClass.FirstFeatureLayer = JcTbLayer; paramClass.SecondFeatureLayer = pTempBgTbLayer; paramClass.IsGetOutPutFeature = true; paramClass.GPType = EnumGPType.SelectLayerByLocation; paramClass.Overlap_type = "INTERSECT"; GPHelper.Instance.ExeGPForProces(paramClass, ref result); } #endregion #region 变更层与基础地类图斑联合 paramClass = new GPParamClass() { FirstFeatureLayer = pTempBgTbLayer, SecondFeatureLayer = result, OutFeatureClassPath = $"{TempDbPath}\\BGTB_DLTBUnion", IsGetOutPutFeature = true, PreserveAttributes = "ALL", GPType = EnumGPType.Union }; GPHelper.Instance.ExeGPForProces(paramClass, ref result); #endregion #region 拆分多部件 paramClass = new GPParamClass(); paramClass.FirstFeatureLayer = result; paramClass.OutFeatureClassPath = $"{TempDbPath}\\GXGC_Multipart"; paramClass.IsGetOutPutFeature = true; paramClass.GPType = EnumGPType.MultipartToSinglePath; GPHelper.Instance.ExeGPForProces(paramClass, ref result); #endregion #region TableToTable string dbPath = pTempAttrDBPath; IRDBHelper rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); rdbHelper.ExecuteSQL(" drop table GXGC_Multipart "); rdbHelper.DisConnect(); IWorkspace ws = (result.FeatureClass as FeatureClass).Workspace; //添加字段 IFieldEdit _field = new FieldClass(); _field.Name_2 = "BGXW"; _field.Type_2 = esriFieldType.esriFieldTypeString; _field.Length_2 = 2; if (result.FeatureClass.FindField("BGXW") == -1) result.FeatureClass.AddField(_field as IField); //矢量数据至db文件 //(result.FeatureClass as ITable).DeleteSearchedRows(new QueryFilterClass() { WhereClause = "Shape_area < 0.01" }); TableToTable(ws as IFeatureWorkspace, pOutWork, "GXGC_Multipart"); #endregion } catch (Exception ex) { Console.WriteLine($"Log:生成临时更新过程层数据失败:{ex.Message}"); throw ex; } return result; } public double GetEllipseArea(IGeometry polygon) { try { // 1、获得投影 String SphName = polygon.SpatialReference.Name.ToString().ToUpper(); // 2、获得椭球 ICoordinate coordinate = CoordinateFactory.CreateCoordinate(); if (SphName.Contains("XIAN_1980") || SphName.Contains("XIAN1980")) { coordinate = CoordinateFactory.CreateCoordinate(KGIS.Framework.AE.GaussCalculate.Spheroid.SphXian80); } else if (SphName.Contains("BEIJING_1954") || SphName.Contains("BEIJING1954")) { coordinate = CoordinateFactory.CreateCoordinate(KGIS.Framework.AE.GaussCalculate.Spheroid.SphBeijing54); } else if (SphName.Contains("WGS_1984") || SphName.Contains("WGS1984")) { coordinate = CoordinateFactory.CreateCoordinate(KGIS.Framework.AE.GaussCalculate.Spheroid.SphWGS84); } else if (SphName.Contains("CGCS_2000") || SphName.Contains("CGCS2000")) { coordinate = CoordinateFactory.CreateCoordinate(KGIS.Framework.AE.GaussCalculate.Spheroid.SphCGCS2000); } else { return -1; } // 3、计算面积 IGeometry pGeometry = polygon as IGeometry; double PolygonArea = 0.0; // 4、保留两位小数 PolygonArea = Math.Round(coordinate.CalculateTerranArea(pGeometry), 2, MidpointRounding.AwayFromZero); return PolygonArea; } catch (Exception ex) { throw ex; } } public void GDPDExcute() { //IFeatureClassAPI GXAPI = null; //IFeatureClassAPI pdtFcAPI = null; IFeatureLayer PDTLayer = null; IFeature feature = null; IFeatureCursor cursor = null; IWorkspaceFactory pFtWsFct = null; IWorkspaceName workspaceName = null; IFeatureLayer unionLayer = null; IFeatureClassAPI unionFcAPI = null; try { Console.WriteLine("Msg:正在进行耕地坡度级别赋值,请稍后..."); #region 变更图斑层(GDB) //// 获取变更图斑 //GXAPI = new FeatureClassAPI(BgTbLayer.FeatureClass); //if (GXAPI == null || GXAPI.FeatureClass == null) //{ // Console.WriteLine("Err:未获取到更新层图斑"); // return; //} #endregion #region 坡度图层(MDB) PDTLayer = GxPdtLayer; if (GxPdtLayer == null && JcPdtLayer == null) { Console.WriteLine("Warning:当前工程不存在坡度图图层!"); return; } if (PDTLayer.FeatureClass.FeatureCount(null) <= 0) { PDTLayer = JcPdtLayer; } if (PDTLayer.FeatureClass.FeatureCount(null) <= 0) { Console.WriteLine("Warning:当前工程中未导入坡度数据!"); return; } #endregion //IWorkspaceAPI psTempWorkspaceAPI = new WorkspaceAPI(pTempGDbPath, WorkspaceTypeEnum.GDBFile); //IFeatureClassAPI tempdltbgxFeatureclassAPI = psTempWorkspaceAPI.CreateFeatureClass("TempDLTBGX", (BgTbLayer.FeatureClass as IGeoDataset).SpatialReference, BgTbLayer.FeatureClass.Fields); //tempdltbgxFeatureclassAPI.AddField("OLDOBJECTID", esriFieldType.esriFieldTypeInteger, "老OBJECTID"); //IFeatureClass tempdltbgxFC = tempdltbgxFeatureclassAPI.FeatureClass; //Dictionary fieldsDic = new Dictionary(); //for (int i = 0; i < tempdltbgxFC.Fields.FieldCount; i++) //{ // IField field = tempdltbgxFC.Fields.Field[i]; // if (field.Name == tempdltbgxFC.ShapeFieldName || field.Name.Contains(tempdltbgxFC.ShapeFieldName) || field.Name == tempdltbgxFC.OIDFieldName || !field.Editable) continue; // if (!"DLBM,GDLX,GDDB,GDPDJB,KCXS".Contains(field.Name)) continue; // int index = -1; // index = BgTbLayer.FeatureClass.Fields.FindField(field.Name); // if (index == -1) // index = BgTbLayer.FeatureClass.Fields.FindFieldByAliasName(field.AliasName); // if (index == -1) // continue; // fieldsDic.Add(i, index); //} //if (fieldsDic.Count == 0) // return; //IFeatureBuffer buffer = tempdltbgxFC.CreateFeatureBuffer(); //IFeatureCursor tempgxCursor = tempdltbgxFC.Insert(true); //int oldOIDIndex = tempdltbgxFC.FindField("OLDOBJECTID"); //if (oldOIDIndex == -1) // return; //IQueryFilter queryfilter = new QueryFilterClass(); //queryfilter.WhereClause = string.Format("DLBM like '01%' "); //int gdCount = BgTbLayer.FeatureClass.FeatureCount(queryfilter); //if (gdCount == 0) // return; //IFeature gxtbFeature = null; //IFeatureCursor dltbgxCursor = BgTbLayer.FeatureClass.Search(queryfilter, true); //int OIDIndex = BgTbLayer.FeatureClass.FindField("OBJECTID"); //int num = 0; //while ((gxtbFeature = dltbgxCursor.NextFeature()) != null) //{ // num++; // if (gxtbFeature.ShapeCopy.IsEmpty) continue; // buffer.Shape = gxtbFeature.ShapeCopy; // foreach (int item in fieldsDic.Keys) // { // if (string.IsNullOrWhiteSpace(gxtbFeature.Value[fieldsDic[item]].ToTrim())) // buffer.Value[item] = DBNull.Value; // buffer.Value[item] = gxtbFeature.Value[fieldsDic[item]]; // } // buffer.Value[oldOIDIndex] = gxtbFeature.Value[OIDIndex]; // tempgxCursor.InsertFeature(buffer); // if (num % 1000 == 0) // { // tempgxCursor.Flush(); // } // Marshal.ReleaseComObject(gxtbFeature); //} //tempgxCursor.Flush(); //DLTBGX与PDTGX 相交 GPParamClass gPParamClass = new GPParamClass(); gPParamClass.FirstFeatureLayer = BgTbLayer; gPParamClass.SecondFeatureLayer = PDTLayer; gPParamClass.OutFeatureClassPath = TempDbPath + "\\TB_PD"; gPParamClass.IsGetOutPutFeature = true; gPParamClass.GPType = EnumGPType.Identify; GPHelper.Instance.ExeGPForProces(gPParamClass, ref unionLayer); unionFcAPI = new FeatureClassAPI(unionLayer.FeatureClass); cursor = unionFcAPI.FeatureClass.Search(null, true); feature = null; Dictionary DicPDJB = new Dictionary(); Dictionary DicMJ = new Dictionary(); Dictionary> DicPDJB_MJ = new Dictionary>(); int idxOID = unionFcAPI.FeatureClass.FindField("OLDOBJECTID"); if (idxOID == -1) { return; } int idxArea = unionFcAPI.FeatureClass.FindField("SHAPE_AREA"); int idxPDJB = unionFcAPI.FeatureClass.FindField("PDJB"); while ((feature = cursor.NextFeature()) != null) { int oid = Convert.ToInt32(feature.Value[idxOID].ToTrim()); if (oid == 456) { } double area = feature.Value[idxArea].ToDouble(2); string pdjb = feature.Value[idxPDJB].ToTrim(); if (!DicPDJB_MJ.ContainsKey(oid)) { DicPDJB_MJ.Add(oid, new List() { new PDJBModel() { PDJB = pdjb, MJ = area } }); } else { List list = DicPDJB_MJ[oid]; PDJBModel pdjbMod = list.FirstOrDefault(f => f.PDJB == pdjb); if (pdjbMod == null) { list.Add(new PDJBModel() { PDJB = pdjb, MJ = area }); } else { pdjbMod.MJ += area; } DicPDJB_MJ[oid] = list; } if (!DicMJ.ContainsKey(oid)) { DicMJ.Add(oid, area); DicPDJB.Add(oid, pdjb); } else if (DicMJ[oid] < area) { DicMJ[oid] = area; DicPDJB[oid] = pdjb; } } cursor = BgTbLayer.FeatureClass.Update(new QueryFilter() { WhereClause = "DLBM like '01%' " }, false); int Objectid_GX = BgTbLayer.FeatureClass.FindField("objectid"); int BSM_GX = BgTbLayer.FeatureClass.FindField("BSM"); int GDPDJB_GX = BgTbLayer.FeatureClass.FindField("GDPDJB"); int GDLX_GX = BgTbLayer.FeatureClass.FindField("GDLX"); int idxKCXS = BgTbLayer.FeatureClass.FindField("KCXS"); int DLBM_GX = BgTbLayer.FeatureClass.FindField("DLBM"); int GDPDJBIndex = PDTLayer.FeatureClass.FindField("PDJB"); var count = BgTbLayer.FeatureClass.FeatureCount(new QueryFilter() { WhereClause = "DLBM like '01%' " }); var featurecount = 0; while ((feature = cursor.NextFeature()) != null) { featurecount++; if (featurecount % 500 == 0) { Console.WriteLine($"Msg:正在进行耕地坡度赋值...【{featurecount}/{count}】"); } if (feature.OID == 529) { } string pdjb = string.Empty; if (!DicPDJB_MJ.ContainsKey(feature.OID)) { continue; } double tempmj = feature.Value[feature.Fields.FindField("SHAPE_AREA")].ToDouble(0); if (tempmj == 850.0) { } List list = DicPDJB_MJ[feature.OID]; list = list.OrderByDescending(o => o.MJ).ToList(); pdjb = list[0].PDJB;//[feature.OID]; feature.Value[GDPDJB_GX] = pdjb; string dlbm = feature.Value[DLBM_GX].ToString(); string bghbsm = feature.Value[BSM_GX].ToString(); string UpdateGCSql = string.Empty; string strGDLX = feature.Value[GDLX_GX].ToTrim(); if (pdjb == "1") { strGDLX = ""; } else if (!string.IsNullOrWhiteSpace(dlbm) && "2,3,4,5".Contains(pdjb) && string.IsNullOrWhiteSpace(strGDLX)) { string kcxsKey1 = string.Format("{0}-{1}", "TT", pdjb); double xs1 = 0; if (Parm.KCXSDic.ContainsKey(kcxsKey1)) { xs1 = Parm.KCXSDic[kcxsKey1].ToDouble(); } string kcxsKey2 = string.Format("{0}-{1}", "PD", pdjb); double xs2 = 0; if (Parm.KCXSDic.ContainsKey(kcxsKey2)) { xs2 = Parm.KCXSDic[kcxsKey2].ToDouble(); } if (xs1 == 0 && xs2 != 0) { strGDLX = "PD"; } else if (xs1 != 0 && xs2 == 0) { strGDLX = "TT"; } else { if (dlbm == "0101") { strGDLX = "TT"; } else if ("0102,0103".Contains(dlbm)) { strGDLX = "PD"; } } } string kcxsKey = string.Format("{0}-{1}", strGDLX, pdjb); if (Parm.KCXSDic.ContainsKey(kcxsKey)) { feature.Value[idxKCXS] = Parm.KCXSDic[kcxsKey].ToDouble(); } feature.Value[GDLX_GX] = strGDLX; cursor.UpdateFeature(feature); Marshal.ReleaseComObject(feature); } } catch (Exception ex) { Console.WriteLine("Warning:耕地坡度级别赋值异常:" + ex.Message); Console.WriteLine("Warning:耕地坡度级别赋值异常:" + ex); } finally { //ProgressHelper.CloseProcessBar(); if (feature != null) Marshal.ReleaseComObject(feature); if (cursor != null) Marshal.ReleaseComObject(cursor); if (pFtWsFct != null) Marshal.ReleaseComObject(pFtWsFct); if (workspaceName != null) Marshal.ReleaseComObject(workspaceName); if (unionLayer != null) Marshal.ReleaseComObject(unionLayer); } } #region 获取最新图斑编号 private void GetMaxTBBH(IFeatureClass fc, ref Dictionary result) { ICursor cursor = (fc as ITable).Search(new QueryFilterClass() { SubFields = "ZLDWDM,TBBH" }, true); IRow row = null; int zlIndex = -1; int bhIndex = -1; while ((row = cursor.NextRow()) != null) { if (zlIndex == -1) zlIndex = row.Fields.FindField("ZLDWDM"); if (bhIndex == -1) bhIndex = row.Fields.FindField("TBBH"); if (zlIndex != -1 && bhIndex != -1) { string zl = row.Value[zlIndex].ToTrim(); if (zl.Length > 12) zl = zl.Substring(0, 12); zl = zl.Replace(zl.Substring(0, 6), Parm.PrjInfo.CODE); int tbbh = 0; int.TryParse(row.Value[bhIndex].ToString(), out tbbh); if (result.ContainsKey(zl)) { if (result[zl] < tbbh) result[zl] = tbbh; } else { result.Add(zl, tbbh); } } } } #endregion #region 获取最新标识码 public string GetNewBSM(List fcList) { string result = string.Empty; int xh = 0; string leftStr = string.Empty; foreach (var item in fcList) { string MaxBSM = GetMaxBSM(item); if (MaxBSM.Length != 18) continue; int xh2 = Convert.ToInt32(MaxBSM.Substring(10)); leftStr = MaxBSM.Substring(0, 10); if (xh < xh2) xh = xh2; } xh++; if (string.IsNullOrWhiteSpace(leftStr)) leftStr = Parm.PrjInfo.CODE + "1210"; result = leftStr + xh.ToString().PadLeft(8, '0'); return result; } private static string GetMaxBSM(IFeatureClass fc) { string BSM = string.Empty; int BSMIndex = fc.FindField("BSM"); if (BSMIndex == -1) return BSM; ITable table = (ITable)fc; // 创建一个ITableSort接口对象 ITableSort tableSort = new TableSortClass(); tableSort.Table = table; if (table.FindField("XZQTZLX") != -1) { tableSort.QueryFilter = new QueryFilterClass() { WhereClause = "XZQTZLX is NULL" }; } tableSort.Fields = "BSM"; tableSort.set_Ascending("BSM", false); tableSort.Sort(null); ICursor cursor = tableSort.Rows; IRow row = cursor.NextRow(); if (row != null) { int maxBSM = 0; int currBSM = 0; string BSMStr = row.Value[BSMIndex].ToString(); if (BSMStr.Length != 18) return BSM; string subBSMStr = BSMStr.Substring(9); try { currBSM = Convert.ToInt32(subBSMStr); } catch (Exception) { return BSM; } if (currBSM > maxBSM) maxBSM = currBSM; if (BSMStr.Length != 18) return BSM; string maxStr = maxBSM.ToString(); int zeroNum = 9 - maxStr.Length; for (int i = 0; i < zeroNum; i++) { maxStr = 0 + maxStr; } BSM = BSMStr.Substring(0, 9) + maxStr; } return BSM; } #endregion #region 面积平差 /// /// 面积平差 /// /// 需要平差的对象集合 /// 控制面积 public void AreaAdjustment(List shpList, double pKZMJ) { try { if (shpList.Count == 1) { shpList[0].bgmj = pKZMJ; return; } shpList = shpList.OrderByDescending(o => o.bgmj).ToList(); double mjc = Math.Round(shpList.Sum(s => s.bgmj) - pKZMJ, 2); //平差 while (Math.Round(mjc, 2) != 0) { int tpsm = (int)(Math.Abs(Math.Round(mjc, 2)) / (double)0.01); int e = tpsm / shpList.Count; int f = tpsm % shpList.Count; if (tpsm < 0)//int值溢出了 { long tems = (long)(Math.Abs(Math.Round(mjc, 2)) / (double)0.01); e = (int)(tems / shpList.Count); f = (int)(tems % shpList.Count); } if (f != 0) { double tpmj = (e + 1) * 0.01; for (int i = 0; i < f; i++) { if (mjc < 0) shpList[i].bgmj = shpList[i].bgmj + tpmj; else shpList[i].bgmj = shpList[i].bgmj - tpmj; } } if (e != 0) { double tpmj = e * 0.01; for (int i = f; i < shpList.Count; i++) { if (mjc < 0) shpList[i].bgmj = shpList[i].bgmj + tpmj; else shpList[i].bgmj = shpList[i].bgmj - tpmj; } } mjc = Math.Round(shpList.Sum(s => s.bgmj), 2) - pKZMJ; } } catch (Exception ex) { LogAPI.Debug("面积平差错误:" + ex.Message); LogAPI.Debug(ex); throw ex; } } #endregion #region GXGCFcToFc public bool GXGCFcToFc(IFeatureClass FeatureClass, IFeatureClass pFc, IQueryFilter pFilter, bool pIsCut, DataTable data_BSM, Dictionary GXGCvaluePairs) { IFeatureCursor S_Cursor = null; IFeatureCursor T_Cursor = null; try { if (FeatureClass == null || pFc == null) return false; //获取对应关系 Dictionary dicField = new Dictionary(); Dictionary dicField1 = new Dictionary(); for (int i = 0; i < pFc.Fields.FieldCount; i++) { //IField field = pFc.Fields.Field[i]; //if (field.Name == pFc.ShapeFieldName || field.Name.Contains(pFc.ShapeFieldName) || field.Name == pFc.OIDFieldName || !field.Editable) continue; //int index = -1; //if (field.Name.Contains("BGQ")) //{ // index = FeatureClass.Fields.FindField($"{field.Name.Replace("BGQTB", "")}_1"); // if (index == -1) // index = FeatureClass.Fields.FindField($"{field.Name.Replace("BGQ", "")}_1"); // if (index == -1) // index = FeatureClass.Fields.FindField($"{field.Name.Replace("BGQ", "")}"); //} //else //if (field.Name.Contains("BGH")) //{ // index = FeatureClass.Fields.FindField(field.Name.Replace("BGHTB", "")); // if (index == -1) // index = FeatureClass.Fields.FindField(field.Name.Replace("BGH", "")); //} //else //if (field.Name == "BGHTBBSM" || field.Name == "BGQTBBSM") //{ // index = FeatureClass.Fields.FindField($"BSM"); //} //if (index == -1) continue; //dicField.Add(i, index); //index = FeatureClass.Fields.FindField($"{field.Name.Replace("BGQTB", "").Replace("BGHTB", "")}_1"); //if (index == -1) // index = FeatureClass.Fields.FindField($"{field.Name.Replace("BGQ", "").Replace("BGH", "")}_1"); //if (field.Name == "BGHTBBSM" || field.Name == "BGQTBBSM") //{ // index = FeatureClass.Fields.FindField($"BSM"); //} //if (index == -1) continue; //dicField1.Add(i, index); IField field = pFc.Fields.Field[i]; if (field.Name == pFc.ShapeFieldName || field.Name.Contains(pFc.ShapeFieldName) || field.Name == pFc.OIDFieldName || !field.Editable) continue; int index = -1; if (field.Name.Contains("BGQ")) { string fieldName = field.Name.Replace("BGQTB", "").Replace("BGQ", ""); if ("BGQTBBH,BGQTBMJ,BGQTBXHDM,BGQTBXHMC,BGQTBDLMJ".Contains(field.Name)) fieldName = field.Name.Replace("BGQ", ""); index = FeatureClass.Fields.FindField($"{fieldName}"); if (index == -1) index = FeatureClass.Fields.FindField(fieldName); } else if (field.Name.Contains("BGH")) { string fieldName = field.Name.Replace("BGHTB", "").Replace("BGH", ""); if ("BGHTBBH,BGHTBMJ,BGHTBXHDM,BGHTBXHMC,BGHTBDLMJ".Contains(field.Name)) fieldName = field.Name.Replace("BGH", ""); index = FeatureClass.Fields.FindField(fieldName + "_1"); } if (index == -1) continue; dicField.Add(i, index); string fName = field.Name.Replace("BGQTB", "").Replace("BGHTB", "").Replace("BGQ", "").Replace("BGH", ""); index = FeatureClass.Fields.FindField($"{fName}_1"); if ("BGQTBBH,BGQTBMJ,BGQTBXHDM,BGQTBXHMC,BGQTBDLMJ,BGHTBBH,BGHTBMJ,BGHTBXHDM,BGHTBXHMC,BGHTBDLMJ".Contains(field.Name)) fName = field.Name.Replace("BGH", "").Replace("BGQ", ""); index = FeatureClass.Fields.FindField($"{fName}_1"); if (index == -1) index = FeatureClass.Fields.FindField(fName); if (index == -1) continue; dicField1.Add(i, index); } (pFc as ITable).DeleteSearchedRows(null); string s = (pFc as FeatureClass).Workspace.PathName; IFeatureClassLoad pFclsLoad = pFc as IFeatureClassLoad; if (pFclsLoad != null) pFclsLoad.LoadOnlyMode = true; //此处写编辑的代码 S_Cursor = FeatureClass.Search(pFilter, true); IFeature f = null; T_Cursor = pFc.Insert(true); IFeatureBuffer buffer = pFc.CreateFeatureBuffer(); var iFID_DLTBBG = FeatureClass.FindField("FID_DLTBGX"); var iFID_DLTB = FeatureClass.FindField("FID_JC_DLTB"); var ibgxw = pFc.FindField("BGXW"); //var ibgxw = pFc.FindField("BGXW"); var itbbgmj = pFc.FindField("TBBGMJ"); var ibgqkcxs = pFc.FindField("BGQKCXS"); var ibgqkcmj = pFc.FindField("BGQKCMJ"); var ibgqtbdlmj = pFc.FindField("BGQTBDLMJ"); var ibghkcxs = pFc.FindField("BGHKCXS"); var ibghkcmj = pFc.FindField("BGHKCMJ"); var ibghtbdlmj = pFc.FindField("BGHTBDLMJ"); var ibsm = pFc.FindField("BSM"); var igxsj = pFc.FindField("GXSJ"); var idxONLYZLBG = pFc.FindField("ONLYZLBG"); var idxBGHTBBSM = pFc.FindField("BGHTBBSM"); var idxBGHTBBH = pFc.FindField("BGHTBBH"); var idxXZQTZLX = pFc.FindField("XZQTZLX"); var idxJCTBBH = FeatureClass.FindField("TBBH_1"); if (idxJCTBBH == -1) idxJCTBBH = FeatureClass.FindField("TBBH"); var idxJCXZQTZLX = FeatureClass.FindField("XZQTZLX"); var tbbgmj = 0.00; int bsm = 1; while ((f = S_Cursor.NextFeature()) != null) { string tempXZQTZLX = f.Value[idxJCXZQTZLX].ToTrim(); if (GXGCvaluePairs.ContainsKey(f.OID)) { tbbgmj = GXGCvaluePairs[f.OID]; //if (tbbgmj == 0) continue; } var FID_DLTBBG = f.Value[iFID_DLTBBG].ToString(); var FID_DLTB = f.Value[iFID_DLTB].ToString(); var row = data_BSM.Select($"FID_DLTBGX={FID_DLTBBG} and FID_JC_DLTB={FID_DLTB} "); if (row == null || row.Length == 0) continue; buffer.Shape = f.ShapeCopy; if (pFilter is ISpatialFilter && pIsCut) { if (FeatureAPI.IsInterSect((pFilter as ISpatialFilter).Geometry, f.ShapeCopy)) { buffer.Shape = FeatureAPI.InterSect(f.ShapeCopy, (pFilter as SpatialFilterClass).Geometry); } else { continue; } } if (FID_DLTBBG == "-1") { foreach (int item in dicField1.Keys)//被动变更的图斑 变更前后属性相同 { try { if (f.Value[dicField1[item]].ToString().Contains(" ") || f.Value[dicField1[item]] is DBNull) { buffer.Value[item] = f.Value[dicField1[item]].ToTrim(); } else { buffer.Value[item] = f.Value[dicField1[item]]; } } catch { buffer.Value[item] = f.Value[dicField1[item]]; } } } else { foreach (int item in dicField.Keys) { try { buffer.Value[item] = f.Value[dicField[item]]; } catch { buffer.Value[item] = f.Value[dicField[item]]; } } } if (idxJCTBBH != -1) buffer.Value[idxBGHTBBH] = f.Value[idxJCTBBH]; buffer.Value[ibgxw] = row[0]["BGXW"]; if (GXGCvaluePairs.ContainsKey(f.OID)) tbbgmj = GXGCvaluePairs[f.OID]; else tbbgmj = row[0]["TBBGMJ"].ToDouble(); buffer.Value[itbbgmj] = Math.Round(tbbgmj, 2);//图斑变更面积 var bgqkcmj = Math.Round((decimal)(buffer.Value[ibgqkcxs].ToDouble() * tbbgmj), 2, MidpointRounding.AwayFromZero).ToDouble();//变更前扣除面积 buffer.Value[ibgqkcmj] = bgqkcmj; buffer.Value[ibgqtbdlmj] = tbbgmj - bgqkcmj;//变更前图斑地类面积 var bghkcmj = Math.Round((decimal)(buffer.Value[ibghkcxs].ToDouble() * tbbgmj), 2, MidpointRounding.AwayFromZero).ToDouble();//变更后扣除面积 if (tempXZQTZLX == "2" || tempXZQTZLX == "4") { buffer.Value[ibghkcmj] = 0; buffer.Value[ibghtbdlmj] = 0;//变更后图斑地类面积 buffer.Value[idxBGHTBBSM] = ""; buffer.Value[idxBGHTBBH] = ""; for (int i = 0; i < pFc.Fields.FieldCount; i++) { IField bghField = pFc.Fields.Field[i]; if (bghField.Name.StartsWith("BGH")) { try { buffer.Value[i] = DBNull.Value; } catch (Exception ex) { buffer.Value[i] = 0; } } } } else if (tempXZQTZLX == "3") { for (int i = 0; i < pFc.Fields.FieldCount; i++) { IField bghField = pFc.Fields.Field[i]; if (bghField.Name.StartsWith("BGQ")) { try { buffer.Value[i] = DBNull.Value; } catch (Exception ex) { buffer.Value[i] = 0; } } } buffer.Value[ibghkcmj] = bghkcmj; buffer.Value[ibghtbdlmj] = tbbgmj - bghkcmj;//变更后图斑地类面积 buffer.Value[idxBGHTBBSM] = row[0]["BSM_1"]; buffer.Value[idxBGHTBBH] = row[0]["TBBH_1"]; } else { buffer.Value[ibghkcmj] = bghkcmj; buffer.Value[ibghtbdlmj] = tbbgmj - bghkcmj;//变更后图斑地类面积 buffer.Value[idxBGHTBBSM] = row[0]["BSM_1"]; buffer.Value[idxBGHTBBH] = row[0]["TBBH_1"]; } buffer.Value[idxONLYZLBG] = row[0]["BZ_1"]; if (idxJCXZQTZLX != -1) { if (string.IsNullOrWhiteSpace(f.Value[idxJCXZQTZLX].ToTrim())) { buffer.Value[idxXZQTZLX] = "0"; } else { buffer.Value[idxXZQTZLX] = f.Value[idxJCXZQTZLX]; } } else { buffer.Value[idxXZQTZLX] = "0"; } buffer.Value[ibsm] = $"{Parm.PrjInfo.CODE}2111{(bsm++).ToString().PadLeft(8, '0')}"; buffer.Value[igxsj] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31); T_Cursor.InsertFeature(buffer); } T_Cursor.Flush(); if (pFclsLoad != null) pFclsLoad.LoadOnlyMode = false; return true; } catch (Exception ex) { throw ex; } } #endregion #region GXFcToFc public bool GXFcToFc(IFeatureClass FeatureClass, IFeatureClass pFc, IQueryFilter pFilter, DataTable dtDLTBGX) { IFeatureCursor S_Cursor = null; IFeatureCursor T_Cursor = null; try { if (FeatureClass == null || pFc == null) return false; Dictionary dicField = new Dictionary(); int index = -1; for (int i = 0; i < pFc.Fields.FieldCount; i++) { IField field = pFc.Fields.Field[i]; if (field.Name == pFc.ShapeFieldName || field.Name.Contains(pFc.ShapeFieldName) || field.Name == pFc.OIDFieldName || !field.Editable) continue; index = FeatureClass.Fields.FindField($"BGH{field.Name}"); if (index == -1) index = FeatureClass.Fields.FindField($"BGHTB{field.Name}"); if (index == -1) index = FeatureClass.Fields.FindField(field.Name); if (index == -1) continue; dicField.Add(i, index); } IFeatureClassLoad pFclsLoad = pFc as IFeatureClassLoad; if (pFclsLoad != null) pFclsLoad.LoadOnlyMode = true; //此处写编辑的代码 S_Cursor = FeatureClass.Search(pFilter, true); IFeature f = null; T_Cursor = pFc.Insert(true); int idxBSM = pFc.FindField("BSM"); int idxTBBH = pFc.FindField("TBBH"); int idxTBMJ = pFc.FindField("TBMJ"); int idxGXSJ = pFc.FindField("GXSJ"); //int idxGXSJ = pFc.FindField("SJNF"); var idxONLYZLBG = pFc.FindField("ONLYZLBG"); int idxGXOID = FeatureClass.FindField("FID_DLTBGX"); IFeatureBuffer buffer = pFc.CreateFeatureBuffer(); while ((f = S_Cursor.NextFeature()) != null) { int gxOID = f.OID;// f.Value[idxGXOID].ToInt(); var row = dtDLTBGX.Select($"FID_DLTBGX={gxOID}"); if (row == null || row.Length == 0) continue; if (row[0]["TBMJ"].ToDouble() <= 0) continue; buffer.Shape = f.ShapeCopy; foreach (int item in dicField.Keys) { buffer.Value[item] = f.Value[dicField[item]]; } buffer.Value[idxBSM] = row[0]["BSM_1"]; buffer.Value[idxTBBH] = row[0]["TBBH_1"]; buffer.Value[idxTBMJ] = row[0]["TBMJ"]; buffer.Value[idxONLYZLBG] = row[0]["BZ_1"]; buffer.Value[idxGXSJ] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31); T_Cursor.InsertFeature(buffer); } T_Cursor.Flush(); if (pFclsLoad != null) pFclsLoad.LoadOnlyMode = false; return true; } catch (Exception) { throw; } } #endregion #region FcToFc public bool FcToFc(IFeatureClass FeatureClass, IFeatureClass pFc, IQueryFilter pFilter) { IFeatureCursor S_Cursor = null; IFeatureCursor T_Cursor = null; try { if (FeatureClass == null || pFc == null) return false; Dictionary dicField = new Dictionary(); int index = -1; for (int i = 0; i < pFc.Fields.FieldCount; i++) { IField field = pFc.Fields.Field[i]; if (field.Name == pFc.ShapeFieldName || field.Name.Contains(pFc.ShapeFieldName) || field.Name == pFc.OIDFieldName || !field.Editable) continue; index = FeatureClass.Fields.FindField($"{field.Name}"); if (index == -1) continue; dicField.Add(i, index); } IFeatureClassLoad pFclsLoad = pFc as IFeatureClassLoad; if (pFclsLoad != null) pFclsLoad.LoadOnlyMode = true; //此处写编辑的代码 S_Cursor = FeatureClass.Search(pFilter, true); IFeature f = null; IFeatureBuffer buffer = pFc.CreateFeatureBuffer(); T_Cursor = pFc.Insert(true); while ((f = S_Cursor.NextFeature()) != null) { buffer.Shape = f.ShapeCopy; foreach (int item in dicField.Keys) { buffer.Value[item] = f.Value[dicField[item]]; } T_Cursor.InsertFeature(buffer); } T_Cursor.Flush(); if (pFclsLoad != null) pFclsLoad.LoadOnlyMode = false; return true; } catch (Exception) { throw; } } #endregion #region TableToTable public bool TableToTable(IFeatureWorkspace pInWork, IWorkspace pOutWork, string tableName, IQueryFilter queryFilter = null) { try { if (pInWork == null || pOutWork == null || string.IsNullOrEmpty(tableName)) return false; IWorkspace2 workspace2 = pInWork as IWorkspace2; if (workspace2 != null) { if (!workspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, tableName)) { return false; } } ITable pInTable = pInWork.OpenTable(tableName); if (pInTable == null) return false; IDataset pIndataset = (IDataset)pInTable; IDatasetName pInDatasetName = (IDatasetName)pIndataset.FullName; IEnumDataset enumDataset = pOutWork.get_Datasets(esriDatasetType.esriDTTable); IDataset dataset; enumDataset.Reset(); while ((dataset = enumDataset.Next()) != null) { string[] names = dataset.Name.Split('.'); if (string.Equals(names[names.Length - 1], tableName, StringComparison.CurrentCultureIgnoreCase)) { dataset.Delete(); break; } } IDataset pOutDataset = (IDataset)pOutWork; IDatasetName pOutDatasetName = new TableNameClass(); pOutDatasetName.WorkspaceName = (IWorkspaceName)pOutDataset.FullName; pOutDatasetName.Name = tableName; IFieldChecker fieldChecker = new FieldCheckerClass(); IFields targetFeatureClassFields = pInTable.Fields; IFields sourceFeatureClassFields = pInTable.Fields; IEnumFieldError enumFieldError; fieldChecker.InputWorkspace = pInWork as IWorkspace; fieldChecker.ValidateWorkspace = pOutWork; fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError, out targetFeatureClassFields); IFeatureDataConverter one2another = new FeatureDataConverterClass(); try { one2another.ConvertTable(pInDatasetName, queryFilter, pOutDatasetName, targetFeatureClassFields, "", 1000, 0); } finally { Marshal.ReleaseComObject(one2another); } return true; } catch (Exception ex) { Console.WriteLine($"Log:TableToTable处理失败:{ex.Message}"); Console.WriteLine($"Log:TableToTable处理失败:{ex.StackTrace}"); //LogAPI.Debug(ex); throw ex; } } #endregion } public class Adjustment { public int ID { get; set; } public double bgmj { get; set; } } public class PDJBModel { public string PDJB { get; set; } public double MJ { get; set; } } }