You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1447 lines
72 KiB
1447 lines
72 KiB
//using ESRI.ArcGIS.AnalysisTools; |
|
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.DataSourcesGDB; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using ESRI.ArcGIS.Geometry; |
|
using ESRI.ArcGIS.Geoprocessing; |
|
using ESRI.ArcGIS.Geoprocessor; |
|
using KGIS.Framework.AE; |
|
using KGIS.Framework.AE.Enum; |
|
//using KGIS.Framework.AE.GPHelper; |
|
using KGIS.Framework.AE.ExtensionMethod; |
|
using KGIS.Framework.DBOperator; |
|
//using KGIS.Framework.Maps; |
|
using KGIS.Framework.Platform; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.ExtensionMethod; |
|
using KGIS.Framework.Utils.Helper; |
|
using Kingo.PluginServiceInterface; |
|
//using KUI.Windows; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Data; |
|
using System.IO; |
|
using System.Linq; |
|
using System.Runtime.InteropServices; |
|
using Kingo.PluginServiceInterface.Model; |
|
using ESRI.ArcGIS.AnalysisTools; |
|
using KGIS.Framework.ThreadManager; |
|
using KGIS.Framework.AE.GPHelper; |
|
using ESRI.ArcGIS.esriSystem; |
|
//using IDEParameter; |
|
|
|
namespace IDGForNDBG |
|
{ |
|
public class XZQ_IDGHelper : BaseIDG |
|
{ |
|
public string IDataChangeName { get => "XZQ_IDGHelper"; } |
|
private string TempGDBPath = string.Empty; |
|
private string TempDBPath = string.Empty; |
|
private string TempDir = string.Empty; |
|
|
|
IDGParameter IDGParm = null; |
|
|
|
|
|
public void Execute(IDGParameter pParm) |
|
{ |
|
ThreadManager.Instance.QueueUserWorkItem(new System.Threading.WaitCallback(ExeXZQ), pParm); |
|
//ExeXZQ(pParm); |
|
} |
|
|
|
|
|
public void ExeXZQ(object obj) |
|
{ |
|
IFeatureCursor _Cursor = null; |
|
IFeature f = null; |
|
IQueryFilter _Filter = null; |
|
IWorkspaceAPI _WsAPI = null; |
|
try |
|
{ |
|
Kingo.ThreadManager.TaskParameter taskParm = obj as Kingo.ThreadManager.TaskParameter; |
|
IDGParameter Parm = taskParm.Data as IDGParameter; |
|
//IDGParameter Parm = obj as IDGParameter; |
|
IDGParm = Parm; |
|
DateTime StartTime = DateTime.Now; |
|
Console.WriteLine("Log:正在进行行政区数据提取,请稍候..."); |
|
|
|
GPParamClass paramClass = new GPParamClass(); |
|
TempDir = CreateTempDB("XZQ"); |
|
TempGDBPath = System.IO.Path.Combine(TempDir, "TempGDB.gdb"); |
|
TempDBPath = TempDir + @"\Temp" + ".sqlite"; |
|
|
|
DBLayerSourceHelper layerSourceHelper = OpenDB(Parm); |
|
|
|
IRDBHelper rdbHelper = null; |
|
List<DataDicTionary> qsDic = null; |
|
try |
|
{ |
|
rdbHelper = RDBFactory.CreateDbHelper(System.IO.Path.Combine(Parm.PrjInfo.ProjDir, "BGTJ.sqlite"), DatabaseType.SQLite); |
|
DataTable dicDt = rdbHelper.ExecuteDatatable("Dic", string.Format("SELECT * from Sys_Dicdetail where OWNERDIC=(select id from Sys_DicManage where ALIASNAME='QSDM')"), true); |
|
|
|
qsDic = KGIS.Framework.Utils.Utility.TBToList.ToList<DataDicTionary>(dicDt);// Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.QSDM); |
|
} |
|
catch (Exception ex) |
|
{ |
|
Console.WriteLine("Err:获取权属字典失败_行政区!" + ex.Message); |
|
LogAPI.Debug(ex); |
|
} |
|
finally |
|
{ |
|
if (rdbHelper != null) |
|
rdbHelper.DisConnect(); |
|
} |
|
IFeatureLayer tempjcXzqLayer = layerSourceHelper.JcXzqLayer; |
|
string HRXZQ = Parm.PrjInfo.DR_XZQPath; |
|
if (!string.IsNullOrWhiteSpace(HRXZQ)) |
|
{ |
|
IWorkspaceAPI hrWsAPI = null; |
|
IFeatureClassAPI hrFcAPI = null; |
|
IFeatureLayer hrXZQLayer = null; |
|
if (HRXZQ.ToLower().Contains(".gdb")) |
|
{ |
|
string hr_dbPath = HRXZQ.Substring(0, HRXZQ.ToLower().IndexOf(".gdb")); |
|
hr_dbPath = hr_dbPath + ".gdb"; |
|
hrWsAPI = new WorkspaceAPI(hr_dbPath, WorkspaceTypeEnum.GDBFile, true); |
|
FileInfo fInfo = new FileInfo(HRXZQ); |
|
hrFcAPI = hrWsAPI.OpenFeatureClass(fInfo.Name); |
|
hrXZQLayer = new FeatureLayerClass() { FeatureClass = hrFcAPI.FeatureClass }; |
|
} |
|
else if (HRXZQ.ToLower().Contains(".shp")) |
|
{ |
|
FileInfo fInfo = new FileInfo(HRXZQ); |
|
Console.WriteLine("Log:正在加载行政区数据" + fInfo.Name); |
|
IWorkspaceFactory pWorkspaceFactory = new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass(); |
|
IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(fInfo.DirectoryName, 0); |
|
hrWsAPI = new WorkspaceAPI(pWorkspace); |
|
hrFcAPI = hrWsAPI.OpenFeatureClass2(fInfo.Name.Split('.')[0]); |
|
hrXZQLayer = new FeatureLayerClass() { FeatureClass = hrFcAPI.FeatureClass }; |
|
} |
|
GPParamClass gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = layerSourceHelper.JcXzqLayer; |
|
gPParamClass.SecondFeatureLayer = hrXZQLayer; |
|
//gPParamClass.TempGDBPath = TempGDBPath; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.GPType = EnumGPType.Erase; |
|
//gPParamClass.FcName = "CJDCQ"; |
|
gPParamClass.OutFeatureClassPath = System.IO.Path.Combine(TempGDBPath, "XZQ"); |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref tempjcXzqLayer); |
|
hrFcAPI.FcToFc(tempjcXzqLayer.FeatureClass, null, false); |
|
tempjcXzqLayer.Name = "行政区"; |
|
} |
|
|
|
IFeatureLayer ptempLayer = null; |
|
GPParamClass gPParamClass2 = new GPParamClass(); |
|
gPParamClass2.FirstFeatureLayer = tempjcXzqLayer; |
|
gPParamClass2.GPType = EnumGPType.Default; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass2, ref ptempLayer); |
|
|
|
|
|
Console.WriteLine("Log:正在处理行政区数据"); |
|
IVariantArray GPParam = new VarArrayClass(); |
|
GPParam.Add(layerSourceHelper.GxgcTBLayer); |
|
GPParam.Add(tempjcXzqLayer); |
|
GPParam.Add(layerSourceHelper.NmTbLayer); |
|
GPParam.Add(TempGDBPath); |
|
GPParam.Add(TempDBPath); |
|
GPParam.Add("XZQBG"); |
|
GPHelper.Instance.ExeGp(GPParam); |
|
_WsAPI = new WorkspaceAPI(TempGDBPath, WorkspaceTypeEnum.GDBFile, true); |
|
IFeatureClassAPI GcFcAPI = _WsAPI.OpenFeatureClass("XZQGXGC"); |
|
IFeatureLayer tempGxGcLayer = new FeatureLayerClass() { FeatureClass = GcFcAPI.FeatureClass }; |
|
Console.WriteLine("Log:正在生成行政区更新过程数据"); |
|
|
|
rdbHelper = RDBFactory.CreateDbHelper(TempDBPath, DatabaseType.SQLite); |
|
|
|
DataTable tempDt = rdbHelper.ExecuteDatatable("temp", string.Format("select * from XZQGXGC"), true); |
|
if (tempDt != null) |
|
{ |
|
int idxXZQMC_1 = tempGxGcLayer.FeatureClass.FindField("XZQMC_1"); |
|
foreach (DataRow dr in tempDt.Rows) |
|
{ |
|
if (!(qsDic != null && qsDic.Count > 0)) |
|
continue; |
|
string xzqdm = dr["XZQDM_1"].ToTrim(); |
|
string xzqmc = dr["XZQMC_1"].ToTrim(); |
|
if (string.IsNullOrWhiteSpace(xzqmc)) |
|
{ |
|
DataDicTionary dic = qsDic.FirstOrDefault(d => d.CODE == xzqdm); |
|
if (dic != null) |
|
{ |
|
xzqmc = dic.NAME; |
|
} |
|
int oid = dr["OBJECTID"].ToInt(); |
|
rdbHelper.ExecuteSQL($"update XZQGXGC set XZQMC_1='{xzqmc}' where OBJECTID={oid}"); |
|
if (idxXZQMC_1 != -1) |
|
{ |
|
IFeature tempF = tempGxGcLayer.FeatureClass.GetFeature(oid); |
|
tempF.Value[idxXZQMC_1] = xzqmc; |
|
tempF.Store(); |
|
} |
|
} |
|
} |
|
} |
|
|
|
rdbHelper.ExecuteSQL(@"ALTER TABLE XZQGXGC ADD COLUMN xzqtzlx VARCHAR(2);"); |
|
rdbHelper.ExecuteSQL(@"update XZQGXGC set xzqtzlx='2',XZQDM_1='',XZQMC_1='',mssm_1='',hdmc_1='' where objectid in ( |
|
select FID_XZQGXGC from xzqgxgc_dltbnm where xzqtzlx=2 group by FID_XZQGXGC |
|
)"); |
|
rdbHelper.ExecuteSQL(@"update XZQGXGC set xzqtzlx='3' where objectid in ( |
|
select FID_XZQGXGC from xzqgxgc_dltbnm where xzqtzlx=3 group by FID_XZQGXGC |
|
)"); |
|
|
|
rdbHelper.ExecuteSQL("update XZQGXGC set bgxw='1' where XZQDM != XZQDM_1 or XZQMC != XZQMC_1 or mssm != mssm_1 or IfNull(hdmc,'') != IfNull(hdmc_1,'')"); |
|
//rdbHelper.ExecuteSQL("update XZQGXGC set bgxw='2' where FID_XZQGX in (select FID_XZQGX from XZQGXGC group by FID_XZQGX HAVING count(1)>1)"); |
|
//rdbHelper.ExecuteSQL("update XZQGXGC set bgxw='2' where FID_XZQ in (select FID_XZQ from XZQGXGC group by FID_XZQ HAVING count(1)>1)"); |
|
rdbHelper.ExecuteSQL("update XZQGXGC set bgxw='2' where FID_XZQGX in (select FID_XZQGX from XZQGXGC group by FID_XZQGX HAVING count(1)>1) or FID_XZQ in (select FID_XZQ from XZQGXGC group by FID_XZQ HAVING count(1)>1)"); |
|
rdbHelper.ExecuteSQL("update XZQGXGC set bgxw='0' where bgxw is null and XZQDM = XZQDM_1 and XZQMC = XZQMC_1 and mssm = mssm_1 and IfNull(hdmc,'') = IfNull(hdmc_1,'')"); |
|
rdbHelper.ExecuteSQL("update XZQGXGC set bgxw='3' where XZQTZLX='3' and FID_XZQ=-1"); |
|
DataTable gcDt = rdbHelper.ExecuteDatatable("Gc", string.Format("select objectid,FID_XZQGX,bgxw,xzqdm,xzqdm_1,mssm,mssm_1,XZQTZLX from XZQGXGC"), true); |
|
Dictionary<int, int> delOIDs = new Dictionary<int, int>(); |
|
Dictionary<int, int> msOIDs = new Dictionary<int, int>(); |
|
Dictionary<int, string> BgxwList = new Dictionary<int, string>(); |
|
List<string> listBGDM = new List<string>(); |
|
if (gcDt != null && gcDt.Rows.Count > 0) |
|
{ |
|
foreach (DataRow dr in gcDt.Rows) |
|
{ |
|
string strXZQTZLX = dr["XZQTZLX"].ToTrim(); |
|
string strBgxw = dr["BGXW"].ToTrim(); |
|
int oid = dr["OBJECTID"].ToInt(); |
|
int gxOID = dr["FID_XZQGX"].ToInt(); |
|
if (strXZQTZLX == "2" || strXZQTZLX == "4") |
|
{ |
|
msOIDs.Add(oid, gxOID); |
|
BgxwList.Add(oid, strBgxw); |
|
} |
|
else |
|
if (strBgxw == "0") |
|
{ |
|
delOIDs.Add(oid, dr["FID_XZQGX"].ToInt()); |
|
} |
|
else |
|
{ |
|
BgxwList.Add(oid, strBgxw); |
|
string bgqdm = dr["XZQDM"].ToTrim() + "_" + dr["MSSM"].ToTrim(); |
|
string bghdm = dr["XZQDM_1"].ToTrim() + "_" + dr["MSSM_1"].ToTrim(); |
|
if (!listBGDM.Contains(bgqdm)) |
|
listBGDM.Add(bgqdm); |
|
if (!listBGDM.Contains(bghdm)) |
|
listBGDM.Add(bghdm); |
|
} |
|
} |
|
} |
|
|
|
_Filter = new QueryFilterClass(); |
|
_Filter.SubFields = "OBJECTID,BGXW,XZQDM,XZQDM_1,MSSM,MSSM_1,XZQMC_1,HDMC_1"; |
|
_Cursor = tempGxGcLayer.FeatureClass.Update(_Filter, true); |
|
int idx = tempGxGcLayer.FeatureClass.FindField("BGXW"); |
|
int idxBGQDM = tempGxGcLayer.FeatureClass.FindField("XZQDM"); |
|
int idxBGQMSSM = tempGxGcLayer.FeatureClass.FindField("MSSM"); |
|
int idxBGHDM = tempGxGcLayer.FeatureClass.FindField("XZQDM_1"); |
|
int idxBGHMSSM = tempGxGcLayer.FeatureClass.FindField("MSSM_1"); |
|
int idxBGHZLDWMC = tempGxGcLayer.FeatureClass.FindField("XZQMC_1"); |
|
int idxBGHHDMC = tempGxGcLayer.FeatureClass.FindField("HDMC_1"); |
|
while ((f = _Cursor.NextFeature()) != null) |
|
{ |
|
string bgqdm = f.Value[idxBGQDM].ToTrim() + "_" + f.Value[idxBGQMSSM].ToTrim(); |
|
string bghdm = f.Value[idxBGHDM].ToTrim() + "_" + f.Value[idxBGHMSSM].ToTrim(); |
|
if (msOIDs.ContainsKey(f.OID)) |
|
{ |
|
if (BgxwList.ContainsKey(f.OID)) |
|
f.Value[idx] = BgxwList[f.OID]; |
|
else |
|
f.Value[idx] = "1"; |
|
f.Value[idxBGHDM] = ""; |
|
f.Value[idxBGHMSSM] = ""; |
|
f.Value[idxBGHZLDWMC] = ""; |
|
f.Value[idxBGHHDMC] = ""; |
|
} |
|
else if (delOIDs.ContainsKey(f.OID) && !listBGDM.Contains(bgqdm) && !listBGDM.Contains(bghdm)) |
|
f.Value[idx] = "0"; |
|
else if (BgxwList.ContainsKey(f.OID)) |
|
f.Value[idx] = BgxwList[f.OID]; |
|
else |
|
f.Value[idx] = "1"; |
|
_Cursor.UpdateFeature(f); |
|
} |
|
_Cursor.Flush(); |
|
_Filter = new QueryFilterClass(); |
|
_Filter.WhereClause = "BGXW = '0'"; |
|
(tempGxGcLayer.FeatureClass as ITable).DeleteSearchedRows(_Filter); |
|
IWorkspaceAPI wsAPI = new WorkspaceAPI(TempGDBPath, WorkspaceTypeEnum.GDBFile); |
|
IFeatureClassAPI fcAPI = wsAPI.OpenFeatureClass("XZQGX"); |
|
_Filter.WhereClause = ""; |
|
_Cursor = fcAPI.FeatureClass.Update(_Filter, true); |
|
idx = fcAPI.FeatureClass.FindField("HDMC"); |
|
int idxXZQDM = fcAPI.FeatureClass.FindField("XZQDM"); |
|
int idxMSSM = fcAPI.FeatureClass.FindField("MSSM"); |
|
while ((f = _Cursor.NextFeature()) != null) |
|
{ |
|
string xzqdm = f.Value[idxXZQDM].ToTrim() + "_" + f.Value[idxMSSM].ToTrim(); |
|
if ((delOIDs.ContainsValue(f.OID) && !listBGDM.Contains(xzqdm)) || msOIDs.ContainsValue(f.OID)) |
|
{ |
|
f.Value[idx] = "-1"; |
|
_Cursor.UpdateFeature(f); |
|
} |
|
} |
|
_Cursor.Flush(); |
|
_Filter.WhereClause = "HDMC = '-1'"; |
|
(fcAPI.FeatureClass as ITable).DeleteSearchedRows(_Filter); |
|
DataTable dtBGMJ = rdbHelper.ExecuteDatatable("bgmj", "SELECT FID_XZQGXGC,FID_DLTB_NMK,TBMJ FROM XZQGXGC_DLTBNM", true); |
|
Dictionary<int, double> DicBGMJs = new Dictionary<int, double>(); |
|
if (dtBGMJ != null) |
|
{ |
|
foreach (DataRow dr in dtBGMJ.Rows) |
|
{ |
|
int oid = dr["FID_XZQGXGC"].ToInt(); |
|
double area = dr["TBMJ"].ToDouble(2); |
|
if (area < 0.01) continue; |
|
if (DicBGMJs.ContainsKey(oid)) |
|
{ |
|
DicBGMJs[oid] = (DicBGMJs[oid] + area).ToDouble(2); |
|
} |
|
else |
|
{ |
|
DicBGMJs.Add(oid, area); |
|
} |
|
} |
|
} |
|
DataTable dtBGHMJ = rdbHelper.ExecuteDatatable("BGHMJ", "SELECT XZQDM_1,XZQMC_1,MSSM_1,FID_DLTB_NMK,TBMJ FROM XZQGXGC_DLTBNM", true); |
|
Dictionary<string, double> DicBGHMJs = new Dictionary<string, double>(); |
|
Dictionary<int, double> DicTBMJs = new Dictionary<int, double>(); |
|
if (dtBGHMJ != null) |
|
{ |
|
foreach (DataRow dr in dtBGHMJ.Rows) |
|
{ |
|
string dm = dr["XZQDM_1"].ToTrim(); |
|
string mc = dr["XZQMC_1"].ToTrim(); |
|
string mssm = dr["MSSM_1"].ToTrim(); |
|
if (string.IsNullOrWhiteSpace(mc) && qsDic != null) |
|
{ |
|
DataDicTionary dic = qsDic.FirstOrDefault(d => d.CODE == dm); |
|
if (dic != null) |
|
{ |
|
mc = dic.NAME; |
|
} |
|
} |
|
|
|
string zl = $"{dm}_{mc}_{mssm}"; |
|
int nmOid = dr["FID_DLTB_NMK"].ToInt(); |
|
double area = dr["TBMJ"].ToDouble(2); |
|
if (area < 0.01) continue; |
|
if (DicTBMJs.ContainsKey(nmOid)) |
|
{ |
|
continue; |
|
} |
|
else |
|
{ |
|
DicTBMJs.Add(nmOid, area); |
|
} |
|
if (DicBGHMJs.ContainsKey(zl)) |
|
{ |
|
DicBGHMJs[zl] = (DicBGHMJs[zl] + area).ToDouble(2); |
|
} |
|
else |
|
{ |
|
DicBGHMJs.Add(zl, area); |
|
} |
|
} |
|
} |
|
//(layerSourceHelper.GxgcXzqLayer.FeatureClass as ITable).DeleteSearchedRows(null); |
|
(layerSourceHelper.GxgcXzqLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL("Delete From XZQGXGC WHERE 1=1"); |
|
Dictionary<int, string> GXAttribute = new Dictionary<int, string>(); |
|
GXGCFcToFc(tempGxGcLayer.FeatureClass, layerSourceHelper.GxgcXzqLayer.FeatureClass, DicBGMJs, DicBGHMJs, Parm.PrjInfo.CODE, qsDic, ref GXAttribute, layerSourceHelper); |
|
Console.WriteLine("Log:正在生成行政区更新数据"); |
|
//(layerSourceHelper.GxXzqLayer.FeatureClass as ITable).DeleteSearchedRows(null); |
|
(layerSourceHelper.GxXzqLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL("Delete From XZQGX WHERE 1=1"); |
|
GXFcToFc(fcAPI.FeatureClass, layerSourceHelper.GxXzqLayer.FeatureClass, GXAttribute, qsDic); |
|
_Filter = new QueryFilterClass(); |
|
//_Filter.WhereClause = "BGXW<>'1'"; |
|
if (layerSourceHelper.GxgcXzqLayer.FeatureClass.FeatureCount(_Filter) > 0) |
|
{ |
|
Console.WriteLine("Log:正在生成行政区界线更新数据"); |
|
XZQExtractExe(Parm, layerSourceHelper); |
|
} |
|
Console.WriteLine($"Log:行政区数据提取完成。耗时:{GetTime(StartTime)}"); |
|
} |
|
catch (Exception ex) |
|
{ |
|
Console.WriteLine("Log:行政区数据提取失败"); |
|
Console.WriteLine("Log:行政区数据提取失败。" + ex.Message); |
|
Console.WriteLine("Log:行政区数据提取失败。" + ex.StackTrace); |
|
throw ex; |
|
} |
|
} |
|
|
|
public bool GXGCFcToFc(IFeatureClass FeatureClass, IFeatureClass pFc, Dictionary<int, double> pDicBGMJ, Dictionary<string, double> pDicBGHMJ, string Code, List<DataDicTionary> pQsDic, ref Dictionary<int, string> pGxAttribure, DBLayerSourceHelper pDBLayerSourceHelper) |
|
{ |
|
IFeatureCursor S_Cursor = null; |
|
IFeatureCursor T_Cursor = null; |
|
try |
|
{ |
|
if (FeatureClass == null || pFc == null) return false; |
|
if (pGxAttribure == null) |
|
pGxAttribure = new Dictionary<int, string>(); |
|
//获取对应关系 |
|
Dictionary<int, int> dicField = new Dictionary<int, int>(); |
|
Dictionary<int, int> dicField1 = new Dictionary<int, int>(); |
|
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")) |
|
{ |
|
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"); |
|
} |
|
else if (field.Name.ToUpper() == "BGXW") |
|
{ |
|
index = FeatureClass.Fields.FindField(field.Name); |
|
} |
|
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); |
|
if (index == -1) |
|
index = FeatureClass.Fields.FindField($"{fName}_1"); |
|
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(null, true); |
|
IFeature f = null; |
|
T_Cursor = pFc.Insert(true); |
|
IFeatureBuffer buffer = pFc.CreateFeatureBuffer(); |
|
var iFID_DLTBBG = FeatureClass.FindField("FID_XZQGX"); |
|
var iFID_DLTB = FeatureClass.FindField("FID_XZQ"); |
|
var idxBGQBSM = FeatureClass.FindField("BSM"); |
|
var idxTempBGHDM = FeatureClass.FindField("XZQDM_1"); |
|
var ibgxw = pFc.FindField("BGXW"); |
|
var itbbgmj = pFc.FindField("BGMJ"); |
|
var ibsm = pFc.FindField("BSM"); |
|
var igxsj = pFc.FindField("GXSJ"); |
|
var idxBGHBSM = pFc.FindField("BGHBSM"); |
|
var idxZLDM = pFc.FindField("BGHXZQDM"); |
|
var idxZLMC = pFc.FindField("BGHXZQMC"); |
|
var idxMSSM = pFc.FindField("BGHMSSM"); |
|
var idxHDMC = pFc.FindField("BGHHDMC"); |
|
var idxBGHDCMJ = pFc.FindField("BGHDCMJ"); |
|
var tbbgmj = 0.00; |
|
int bsm = 1; |
|
string MaxBSM = string.Empty; |
|
if (string.IsNullOrWhiteSpace(MaxBSM)) |
|
MaxBSM = GetNewBSM(new List<IFeatureClass>() { pDBLayerSourceHelper.JcXzqLayer.FeatureClass }); |
|
while ((f = S_Cursor.NextFeature()) != null) |
|
{ |
|
|
|
if (pDicBGMJ.ContainsKey(f.OID)) |
|
{ |
|
tbbgmj = pDicBGMJ[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_DLTBBG={FID_DLTBBG} and FID_DLTB={FID_DLTB} "); |
|
//if (row == null || row.Length == 0) continue; |
|
buffer.Shape = f.ShapeCopy; |
|
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) |
|
{ |
|
if (item == 57 || item == 58) |
|
{ |
|
} |
|
try |
|
{ |
|
buffer.Value[item] = f.Value[dicField[item]]; |
|
} |
|
catch |
|
{ |
|
buffer.Value[item] = f.Value[dicField[item]]; |
|
} |
|
} |
|
} |
|
|
|
string xzqmc = buffer.Value[idxZLMC].ToTrim(); |
|
if (string.IsNullOrWhiteSpace(xzqmc) && pQsDic != null) |
|
{ |
|
string xzqdm = buffer.Value[idxZLDM].ToTrim(); |
|
DataDicTionary dic = pQsDic.FirstOrDefault(d => d.CODE == xzqdm); |
|
if (dic != null) |
|
{ |
|
xzqmc = dic.NAME; |
|
} |
|
buffer.Value[idxZLMC] = xzqmc; |
|
} |
|
|
|
if (pDicBGMJ.ContainsKey(f.OID)) |
|
tbbgmj = pDicBGMJ[f.OID]; |
|
buffer.Value[itbbgmj] = Math.Round(tbbgmj, 2);//图斑变更面积 |
|
buffer.Value[ibsm] = $"{Code}1211{(bsm++).ToString().PadLeft(8, '0')}"; |
|
buffer.Value[igxsj] = new DateTime(2023, 12, 31); |
|
string key = buffer.Value[idxZLDM].ToTrim() + "_" + buffer.Value[idxZLMC].ToTrim() + "_" + buffer.Value[idxMSSM].ToTrim(); |
|
if (pDicBGHMJ.ContainsKey(key)) |
|
{ |
|
buffer.Value[idxBGHDCMJ] = pDicBGHMJ[key]; |
|
} |
|
string bgxw = buffer.Value[ibgxw].ToTrim(); |
|
string strTempBGHDM = f.Value[idxTempBGHDM].ToTrim(); |
|
|
|
if (string.IsNullOrWhiteSpace(strTempBGHDM)) |
|
{ |
|
buffer.Value[idxBGHDCMJ] = 0; |
|
buffer.Value[idxBGHBSM] = ""; |
|
buffer.Value[idxZLDM] = ""; |
|
buffer.Value[idxZLMC] = ""; |
|
buffer.Value[idxMSSM] = ""; |
|
if (idxHDMC != -1) |
|
buffer.Value[idxHDMC] = ""; |
|
} |
|
if (bgxw == "1" && !string.IsNullOrWhiteSpace(strTempBGHDM)) |
|
{ |
|
string attr = f.Value[idxBGQBSM].ToTrim() + "_" + buffer.Value[idxBGHDCMJ]; |
|
if (!pGxAttribure.ContainsKey(FID_DLTBBG.ToInt())) |
|
pGxAttribure.Add(FID_DLTBBG.ToInt(), attr); |
|
buffer.Value[idxBGHBSM] = f.Value[idxBGQBSM]; |
|
} |
|
string strBGHBSM = buffer.Value[idxBGHBSM].ToTrim(); |
|
if (((bgxw == "2" || bgxw == "4") && !string.IsNullOrWhiteSpace(strTempBGHDM)) || bgxw == "3" || (!strBGHBSM.StartsWith(IDGParm.PrjInfo.CODE) && !string.IsNullOrWhiteSpace(strTempBGHDM))) |
|
{ |
|
string attr = string.Empty; |
|
string bghBSM = string.Empty; |
|
if (pGxAttribure.ContainsKey(FID_DLTBBG.ToInt())) |
|
{ |
|
attr = pGxAttribure[FID_DLTBBG.ToInt()]; |
|
if (!attr.Split('_')[0].StartsWith(IDGParm.PrjInfo.CODE)) |
|
{ |
|
string bsmPrefix = IDGParm.PrjInfo.CODE + MaxBSM.Substring(6, 4); |
|
int MaxNum = Convert.ToInt32(MaxBSM.Substring(9)); |
|
bghBSM = bsmPrefix + (MaxNum + 1).ToString().PadLeft(8, '0'); |
|
pGxAttribure[FID_DLTBBG.ToInt()] = pGxAttribure[FID_DLTBBG.ToInt()].Replace(strBGHBSM, bghBSM); |
|
MaxBSM = bghBSM; |
|
//attr = bghBSM + "_" + buffer.Value[idxBGHDCMJ]; |
|
//pGxAttribure.Add(FID_DLTBBG.ToInt(), attr); |
|
} |
|
else |
|
{ |
|
bghBSM = attr.Split('_')[0]; |
|
} |
|
//bghBSM = attr.Split('_')[0]; |
|
} |
|
else |
|
{ |
|
string bsmPrefix = IDGParm.PrjInfo.CODE + MaxBSM.Substring(6, 4); |
|
int MaxNum = Convert.ToInt32(MaxBSM.Substring(9)); |
|
bghBSM = bsmPrefix + (MaxNum + 1).ToString().PadLeft(8, '0'); |
|
MaxBSM = bghBSM; |
|
attr = bghBSM + "_" + buffer.Value[idxBGHDCMJ]; |
|
pGxAttribure.Add(FID_DLTBBG.ToInt(), attr); |
|
} |
|
buffer.Value[idxBGHBSM] = bghBSM; |
|
|
|
} |
|
T_Cursor.InsertFeature(buffer); |
|
} |
|
T_Cursor.Flush(); |
|
if (pFclsLoad != null) |
|
pFclsLoad.LoadOnlyMode = false; |
|
return true; |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
} |
|
|
|
|
|
public bool GXFcToFc(IFeatureClass FeatureClass, IFeatureClass pFc, Dictionary<int, string> pGXAttribute, List<DataDicTionary> pQsDic) |
|
{ |
|
IFeatureCursor S_Cursor = null; |
|
IFeatureCursor T_Cursor = null; |
|
try |
|
{ |
|
if (FeatureClass == null || pFc == null) return false; |
|
Dictionary<int, int> dicField = new Dictionary<int, int>(); |
|
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(null, true); |
|
IFeature f = null; |
|
T_Cursor = pFc.Insert(true); |
|
IFeatureBuffer buffer = pFc.CreateFeatureBuffer(); |
|
int idxBSM = pFc.FindField("BSM"); |
|
int idxYSDM = pFc.FindField("YSDM"); |
|
int idxXZQDM = pFc.FindField("XZQDM"); |
|
int idxXZQMC = pFc.FindField("XZQMC"); |
|
int idxDCMJ = pFc.FindField("DCMJ"); |
|
int idxJSMJ = pFc.FindField("JSMJ"); |
|
int idxGXSJ = pFc.FindField("GXSJ"); |
|
while ((f = S_Cursor.NextFeature()) != null) |
|
{ |
|
buffer.Shape = f.ShapeCopy; |
|
foreach (int item in dicField.Keys) |
|
{ |
|
buffer.Value[item] = f.Value[dicField[item]]; |
|
} |
|
if (pQsDic != null) |
|
{ |
|
DataDicTionary dic = pQsDic.FirstOrDefault(d => d.CODE == buffer.Value[idxXZQDM].ToTrim()); |
|
if (dic != null) |
|
{ |
|
buffer.Value[idxXZQMC] = dic.NAME; |
|
} |
|
} |
|
if (pGXAttribute != null && pGXAttribute.ContainsKey(f.OID)) |
|
{ |
|
string[] attrs = pGXAttribute[f.OID].Split('_'); |
|
buffer.Value[idxBSM] = attrs[0]; |
|
buffer.Value[idxDCMJ] = attrs[1]; |
|
} |
|
buffer.Value[idxJSMJ] = f.ShapeCopy.GetEllipseArea(); |
|
buffer.Value[idxYSDM] = "1000600100"; |
|
if (idxGXSJ != -1) |
|
{ |
|
buffer.Value[idxGXSJ] = new DateTime(2023, 12, 31); |
|
} |
|
T_Cursor.InsertFeature(buffer); |
|
} |
|
T_Cursor.Flush(); |
|
if (pFclsLoad != null) |
|
pFclsLoad.LoadOnlyMode = false; |
|
return true; |
|
} |
|
catch (Exception) |
|
{ |
|
throw; |
|
} |
|
} |
|
|
|
public DBLayerSourceHelper OpenDB(IDGParameter parm) |
|
{ |
|
DBLayerSourceHelper result = new DBLayerSourceHelper(); |
|
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 = KGIS.Framework.Utils.SerializeAPI.DeserializeToObject<LayerCfg>(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;// System.IO.Path.Combine(fileInfo.DirectoryName, "NMDB" + ".gdb"); |
|
result.BgWsAPI = new WorkspaceAPI(PathBgDB, WorkspaceTypeEnum.GDBFile); |
|
if (result.BgWsAPI.CurrentWorkspace == null) |
|
{ |
|
Console.WriteLine("打开变更数据库失败!"); |
|
return result; |
|
} |
|
result.ZlWsAPI = new WorkspaceAPI(PathZLDB, WorkspaceTypeEnum.GDBFile); |
|
if (result.ZlWsAPI.CurrentWorkspace == null) |
|
{ |
|
Console.WriteLine("打开增量数据库失败!"); |
|
return result; |
|
} |
|
result.NmWsAPI = new WorkspaceAPI(PathNMDB, WorkspaceTypeEnum.GDBFile); |
|
|
|
|
|
LayerCfg JCLayerInfo = layerInfo.Layers.FirstOrDefault(f => f.LayerName == "年初数据"); |
|
if (JCLayerInfo == null) |
|
{ |
|
throw new Exception("Err:获取年初数据库失败!"); |
|
} |
|
List<LayerCfg> NcList = JCLayerInfo.GetAllItem(); |
|
//if (parm.ExeDLTB) |
|
//{ |
|
// LayerCfg _JcTBLayerInfo = NcList.FirstOrDefault(f => f.LayerName == "地类图斑"); |
|
|
|
// _jcTbLayer = OpenLayer(_JcTBLayerInfo); |
|
// if (_jcTbLayer == null) |
|
// { |
|
// throw new Exception("Err:获取年初地类图斑数据失败!"); |
|
// } |
|
|
|
//} |
|
|
|
{ |
|
LayerCfg _JcXzqLayerInfo = NcList.FirstOrDefault(f => f.LayerName == "行政区"); |
|
result.JcXzqLayer = OpenLayer(_JcXzqLayerInfo); |
|
if (result.JcXzqLayer == null) |
|
throw new Exception("Err:获取年初行政区数据失败!"); |
|
LayerCfg _JcXzqJxLayerInfo = NcList.FirstOrDefault(f => f.LayerName == "行政区界线"); |
|
result.JcXzqJxLayer = OpenLayer(_JcXzqJxLayerInfo); |
|
if (result.JcXzqJxLayer == null) |
|
throw new Exception("Err:获取年初行政区界线数据失败!"); |
|
result.GxXzqLayer = OpenLayer(result.ZlWsAPI, "XZQGX"); |
|
result.GxgcXzqLayer = OpenLayer(result.ZlWsAPI, "XZQGXGC"); |
|
result.GxXzqJxLayer = OpenLayer(result.ZlWsAPI, "XZQJXGX"); |
|
result.GxgcTBLayer = OpenLayer(result.ZlWsAPI, "DLTBGXGC"); |
|
if (result.NmTbLayer == null) |
|
result.NmTbLayer = OpenLayer(result.NmWsAPI, "DLTB_NMK"); |
|
} |
|
return result; |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
} |
|
|
|
#region 提取行政区界线 |
|
public void XZQExtractExe(IDGParameter pParm, DBLayerSourceHelper pLayerSourceHelper) |
|
{ |
|
bool cb_XZQDMChange = false; |
|
//IFeatureClass XZQGXFeatureClass = null; |
|
//IFeatureClass XZQGXGCFeatureClass = null; |
|
//IFeatureLayer JCXZQFeatureLayer = null; |
|
//IFeatureLayer JCXZQJXFeatureLayer = null; |
|
//IFeatureClassAPI xzqgxgcfcAPI = null; |
|
|
|
//IFeatureLayer gx_xzqLayer = null; |
|
//IFeatureLayer gxgc_xzqLayer = null; |
|
//IFeatureLayer gx_xzqjxLayer = null; |
|
try |
|
{ |
|
//if (_MapService == null) |
|
// _MapService = MapsManager.Instance.MapService; |
|
|
|
//gx_xzqLayer = GxXzqLayer; |
|
//gxgc_xzqLayer = GxgcXzqLayer; |
|
//gx_xzqjxLayer = GxXzqJxLayer; |
|
//XZQGXFeatureClass = gx_xzqLayer.FeatureClass;// _MapService.GetFeatureClassByName("XZQGX");//行政区更新层 |
|
//XZQGXGCFeatureClass = gxgc_xzqLayer.FeatureClass;// _MapService.GetFeatureClassByName("XZQGXGC");//行政区更新过程层 |
|
//JCXZQFeatureLayer = JcXzqLayer;// _MapService.GetFeatureLayerByLayerName("行政区");//基础行政区 |
|
//JCXZQJXFeatureLayer = JcXzqJxLayer;// _MapService.GetFeatureLayerByLayerName("行政区界线");//基础行政区界线 |
|
//if (XZQGXGCFeatureClass.FeatureCount(null) == 0) return; |
|
//xzqgxgcfcAPI = new FeatureClassAPI(XZQGXGCFeatureClass); |
|
//List<IFeature> xzqgxgcList = xzqgxgcfcAPI.QueryFeatures(null); |
|
//IFeature xzqGXGC = FeatureAPI.MergeFeature(xzqgxgcList); |
|
//if (xzqGXGC == null) |
|
//{ |
|
// LogAPI.Debug("行政区更新过程层数据为空!"); |
|
// return; |
|
//} |
|
//List<IFeature> features = FeatureAPI.Identify(xzqGXGC.ShapeCopy, JCXZQFeatureLayer); |
|
|
|
|
|
//IFeatureClassAPI tempxzqgxFeatureclassAPI = psTempWorkspaceAPI.CreateFeatureClass("XZQGX_TEMP", (pLayerSourceHelper.GxXzqLayer.FeatureClass as IGeoDataset).SpatialReference, pLayerSourceHelper.GxXzqLayer.FeatureClass.Fields); |
|
//tempxzqgxFeatureclassAPI.AddField("IsJCTB", esriFieldType.esriFieldTypeString, "基础图斑"); |
|
//JCXZQInsertGX(features, tempxzqgxFeatureclassAPI.FeatureClass, null);//将基础村级调查区数据插入到更新过程层,变更前变更后的属性数据一致 |
|
|
|
//IFeatureClassAPI xzqgxFeatureclassAPI = psTempWorkspaceAPI.CreateFeatureClass("XZQGX", (pLayerSourceHelper.GxXzqLayer.FeatureClass as IGeoDataset).SpatialReference, pLayerSourceHelper.GxXzqLayer.FeatureClass.Fields); |
|
//xzqgxFeatureclassAPI.AddField("IsJCTB", esriFieldType.esriFieldTypeString, "基础图斑"); |
|
|
|
//IFeatureClassAPI fcAPI = new FeatureClassAPI(pLayerSourceHelper.GxXzqLayer.FeatureClass); |
|
//fcAPI.FcToFc(xzqgxFeatureclassAPI.FeatureClass, null, false); |
|
|
|
//IQueryFilter filter = new QueryFilterClass(); |
|
//filter.WhereClause = string.Format(" BGHXZQDM is null or BGHXZQDM =''"); |
|
//XZQGXMSInsertGX(pLayerSourceHelper.GxgcXzqLayer.FeatureClass, xzqgxFeatureclassAPI.FeatureClass, filter); |
|
|
|
//IFeatureLayer xzqgxJCLayer = null; |
|
//GPParamClass gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = new FeatureLayerClass() { FeatureClass = tempxzqgxFeatureclassAPI.FeatureClass }; |
|
//gPParamClass.SecondFeatureLayer = new FeatureLayerClass() { FeatureClass = xzqgxFeatureclassAPI.FeatureClass }; |
|
//gPParamClass.OutFeatureClassPath = System.IO.Path.Combine(TempGDBPath, "XZQGX_JC"); |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//gPParamClass.GPType = EnumGPType.Erase; |
|
////GeoprocessorHelper gpHelper = new GeoprocessorHelper(); |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref xzqgxJCLayer); |
|
//fcAPI = new FeatureClassAPI(xzqgxJCLayer.FeatureClass); |
|
//fcAPI.AddField("IsJCTB", esriFieldType.esriFieldTypeString, "基础图斑"); |
|
|
|
//fcAPI = new FeatureClassAPI(xzqgxJCLayer.FeatureClass); |
|
//fcAPI.FcToFc(xzqgxFeatureclassAPI.FeatureClass, null, false); |
|
|
|
//filter = new QueryFilterClass(); |
|
//filter.WhereClause = string.Format("SHAPE_AREA<0.1"); |
|
//(xzqgxFeatureclassAPI.FeatureClass as ITable).DeleteSearchedRows(filter); |
|
|
|
//// 村级调查区更新过程要素转线 |
|
//IFeatureLayer xzqgxjxLayer = null; |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = new FeatureLayerClass() { FeatureClass = xzqgxFeatureclassAPI.FeatureClass }; |
|
//gPParamClass.OutFeatureClassPath = System.IO.Path.Combine(TempGDBPath, "XZQGX_JX"); |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//gPParamClass.GPType = EnumGPType.PolygonToLine; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref xzqgxjxLayer); |
|
|
|
//// 村级调查区更新过程界线取消线分割 |
|
//IFeatureLayer gxjxUnsplitLayer = null; |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = xzqgxjxLayer; |
|
//gPParamClass.OutFeatureClassPath = System.IO.Path.Combine(TempGDBPath, "XZQGXJX_Unsplit"); |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//gPParamClass.ListDissolveFiledName = new List<string>() { "LEFT_FID", "RIGHT_FID" }; |
|
//gPParamClass.GPType = EnumGPType.UnsplitLine; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref gxjxUnsplitLayer); |
|
|
|
if (pLayerSourceHelper.GxgcXzqLayer.FeatureClass.FeatureCount(null) == 0) return; |
|
IVariantArray parameters = new VarArrayClass(); |
|
parameters.Add(pLayerSourceHelper.GxXzqLayer); |
|
parameters.Add(pLayerSourceHelper.GxgcXzqLayer); |
|
parameters.Add(pLayerSourceHelper.JcXzqLayer); |
|
parameters.Add(TempGDBPath); |
|
parameters.Add("XZQJX"); |
|
GPHelper.Instance.ExeGp(parameters); |
|
IWorkspaceAPI psTempWorkspaceAPI = new WorkspaceAPI(TempGDBPath, WorkspaceTypeEnum.GDBFile); |
|
IFeatureClassAPI xzqgxFeatureclassAPI = psTempWorkspaceAPI.OpenFeatureClass("GXTB"); |
|
IFeatureClassAPI gxjxUnsplitLayer = psTempWorkspaceAPI.OpenFeatureClass("XZQGXGCJX_Unsplit"); |
|
|
|
Dictionary<int, string> xzqdmDic = new Dictionary<int, string>(); |
|
Dictionary<int, string> isjctbDic = new Dictionary<int, string>(); |
|
int objectidIndex = xzqgxFeatureclassAPI.FeatureClass.Fields.FindField("OBJECTID"); |
|
int bghXZQDMIndex = xzqgxFeatureclassAPI.FeatureClass.Fields.FindField("XZQDM"); |
|
int bghMSSMIndex = xzqgxFeatureclassAPI.FeatureClass.Fields.FindField("MSSM"); |
|
int gxgcIndex = xzqgxFeatureclassAPI.FeatureClass.Fields.FindField("IsJCTB"); |
|
IFeatureCursor gxgcjxCursor = xzqgxFeatureclassAPI.FeatureClass.Search(null, true); |
|
IFeature gxgcFeature = null; |
|
while ((gxgcFeature = gxgcjxCursor.NextFeature()) != null) |
|
{ |
|
if (objectidIndex == -1) |
|
continue; |
|
int objectid = int.Parse(gxgcFeature.Value[objectidIndex].ToString()); |
|
string strMSSM = string.Empty; |
|
if (bghMSSMIndex != -1) |
|
{ |
|
strMSSM = gxgcFeature.Value[bghMSSMIndex].ToTrim(); |
|
} |
|
if (bghXZQDMIndex != -1) |
|
{ |
|
string XZQDM = gxgcFeature.Value[bghXZQDMIndex].ToString() + "_" + strMSSM; |
|
if (objectid != 0) |
|
xzqdmDic.Add(objectid, XZQDM); |
|
} |
|
if (gxgcIndex != -1) |
|
{ |
|
string jctb = gxgcFeature.Value[gxgcIndex].ToString(); |
|
|
|
if (objectid != 0) |
|
isjctbDic.Add(objectid, jctb); |
|
} |
|
|
|
Marshal.ReleaseComObject(gxgcFeature); |
|
} |
|
IFeatureClass XZQJXGXFeatureClass = pLayerSourceHelper.GxXzqJxLayer.FeatureClass;// gx_xzqjxLayer.FeatureClass;// _MapService.GetFeatureClassByName("XZQJXGX"); |
|
ITable table = XZQJXGXFeatureClass as ITable; |
|
table.DeleteSearchedRows(null); |
|
|
|
int leftidIndex = gxjxUnsplitLayer.FeatureClass.Fields.FindField("LEFT_FID"); |
|
int rightIndex = gxjxUnsplitLayer.FeatureClass.Fields.FindField("RIGHT_FID"); |
|
int shapeLengthIndex = gxjxUnsplitLayer.FeatureClass.Fields.FindField("SHAPE_LENGTH"); |
|
IFeatureCursor gxgcjxUnsplitCursor = gxjxUnsplitLayer.FeatureClass.Search(null, true); |
|
IFeature f = null; |
|
List<int> JC_OID = new List<int>(); |
|
List<int> MS_OID = new List<int>(); |
|
IFeatureCursor xzqgxCur = pLayerSourceHelper.GxXzqLayer.FeatureClass.Search(null, true); |
|
IFeature xzqgx = null; |
|
while ((xzqgx = xzqgxCur.NextFeature()) != null) |
|
{ |
|
List<IFeature> jcjx_features = FeatureAPI.Identify2(xzqgx.ShapeCopy, pLayerSourceHelper.JcXzqJxLayer); |
|
foreach (var item in jcjx_features) |
|
{ |
|
if (!MS_OID.Contains(item.OID)) |
|
MS_OID.Add(item.OID); |
|
} |
|
} |
|
while ((f = gxgcjxUnsplitCursor.NextFeature()) != null) |
|
{ |
|
IPolyline line = f.ShapeCopy as IPolyline; |
|
IPoint p = line.FromPoint; |
|
List<IFeature> lines = FeatureAPI.Identify2(p, new FeatureLayerClass() { FeatureClass = gxjxUnsplitLayer.FeatureClass, SpatialReference = (gxjxUnsplitLayer.FeatureClass as IGeoDataset).SpatialReference }); |
|
if (lines.Count < 3) |
|
{ |
|
foreach (var item in lines) |
|
{ |
|
if (item.OID == f.OID) |
|
continue; |
|
try |
|
{ |
|
IFeatureEdit edit = item as IFeatureEdit; |
|
edit.Split(p); |
|
} |
|
catch (Exception ex) |
|
{ |
|
} |
|
} |
|
} |
|
} |
|
|
|
if (cb_XZQDMChange == true) |
|
{ |
|
gxgcjxUnsplitCursor = pLayerSourceHelper.JcXzqJxLayer.FeatureClass.Search(null, true); |
|
while ((f = gxgcjxUnsplitCursor.NextFeature()) != null) |
|
{ |
|
string jcjxlx2 = f.Value[f.Fields.FindField("JXLX")].ToString(); |
|
string jcjxxz2 = f.Value[f.Fields.FindField("JXXZ")].ToString(); |
|
InsertXZQGXFeature(f, 0, jcjxlx2, jcjxxz2, pLayerSourceHelper.JcXzqJxLayer.FeatureClass, XZQJXGXFeatureClass); |
|
if (MS_OID.Contains(f.OID)) |
|
MS_OID.Remove(f.OID); |
|
} |
|
} |
|
|
|
gxgcjxUnsplitCursor = gxjxUnsplitLayer.FeatureClass.Search(null, true); |
|
while ((f = gxgcjxUnsplitCursor.NextFeature()) != null) |
|
{ |
|
if (leftidIndex == -1 || rightIndex == -1) |
|
{ |
|
continue; |
|
} |
|
if (f.OID == 13) |
|
{ |
|
} |
|
List<IFeature> jcjx_features = FeatureAPI.Identify2(f.ShapeCopy, pLayerSourceHelper.JcXzqJxLayer); |
|
|
|
int leftID = int.Parse(f.Value[leftidIndex].ToString()); |
|
int rightID = int.Parse(f.Value[rightIndex].ToString()); |
|
double gxshapeLength = f.Value[shapeLengthIndex].ToDouble(2); |
|
string leftxzqdm = leftID == -1 ? "" : xzqdmDic[leftID]; |
|
string rightxzqdm = rightID == -1 ? "" : xzqdmDic[rightID]; |
|
string leftIsjctb = leftID == -1 ? "0" : isjctbDic[leftID]; |
|
string rightIsjctb = rightID == -1 ? "0" : isjctbDic[rightID]; |
|
|
|
string bghJXLX = string.Empty; |
|
if (!string.IsNullOrWhiteSpace(leftIsjctb) && !string.IsNullOrWhiteSpace(rightIsjctb) && jcjx_features.Count > 1) |
|
{ |
|
foreach (var item in jcjx_features) |
|
{ |
|
if (MS_OID.Contains(item.OID)) |
|
MS_OID.Remove(item.OID); |
|
} |
|
continue; |
|
} |
|
if (leftxzqdm.Replace("_", "").Length == rightxzqdm.Replace("_", "").Length) |
|
{ |
|
if (leftxzqdm.Length < 6) |
|
{ |
|
bghJXLX = ""; |
|
|
|
} |
|
else if (leftxzqdm.Substring(0, 6) != rightxzqdm.Substring(0, 6)) |
|
{ |
|
//县界 |
|
bghJXLX = "650200"; |
|
} |
|
else if (leftxzqdm.Substring(0, 9) == rightxzqdm.Substring(0, 9)) |
|
{ |
|
//乡镇界 |
|
bghJXLX = ""; |
|
} |
|
else |
|
{ |
|
//乡镇界 |
|
bghJXLX = "660200"; |
|
} |
|
} |
|
else if (rightxzqdm.Contains("_01") || leftxzqdm.Contains("_01")) |
|
{ |
|
bghJXLX = "250202"; |
|
} |
|
else if (rightxzqdm == "_" && leftxzqdm == "_") |
|
{ |
|
bghJXLX = ""; |
|
} |
|
else |
|
{ |
|
//县界 |
|
bghJXLX = "650200"; |
|
} |
|
if (cb_XZQDMChange == true) |
|
{ |
|
InsertXZQGXFeature(f, 3, bghJXLX, "600001", pLayerSourceHelper.JcXzqJxLayer.FeatureClass, XZQJXGXFeatureClass); |
|
continue; |
|
} |
|
|
|
if (jcjx_features.Count > 1) |
|
{ |
|
//相关基础界线标记删除,新生成的界线标记新增 |
|
foreach (var item in jcjx_features) |
|
{ |
|
if (JC_OID.Contains(item.OID)) |
|
continue; |
|
JC_OID.Add(item.OID); |
|
string jcjxlx2 = item.Value[item.Fields.FindField("JXLX")].ToString(); |
|
string jcjxxz2 = item.Value[item.Fields.FindField("JXXZ")].ToString(); |
|
InsertXZQGXFeature(item, 0, jcjxlx2, jcjxxz2, pLayerSourceHelper.JcXzqJxLayer.FeatureClass, XZQJXGXFeatureClass); |
|
if (MS_OID.Contains(item.OID)) |
|
MS_OID.Remove(item.OID); |
|
} |
|
if (!string.IsNullOrWhiteSpace(bghJXLX)) |
|
InsertXZQGXFeature(f, 3, bghJXLX, "600001", pLayerSourceHelper.JcXzqJxLayer.FeatureClass, XZQJXGXFeatureClass); |
|
continue; |
|
} |
|
if (jcjx_features.Count == 0) |
|
{ |
|
//新生成的界线标记新增 |
|
InsertXZQGXFeature(f, 3, bghJXLX, "600001", pLayerSourceHelper.JcXzqJxLayer.FeatureClass, XZQJXGXFeatureClass); |
|
continue; |
|
} |
|
IFeature jcfeature = jcjx_features[0]; |
|
string jcjxlx = jcfeature.Value[jcfeature.Fields.FindField("JXLX")].ToString(); |
|
string jcjxxz = jcfeature.Value[jcfeature.Fields.FindField("JXXZ")].ToString(); |
|
double jcshapeLength = jcfeature.Value[jcfeature.Fields.FindField("SHAPE_LENGTH")].ToDouble(2); |
|
if (string.IsNullOrWhiteSpace(bghJXLX)) |
|
{ |
|
if (!JC_OID.Contains(jcfeature.OID)) |
|
{ |
|
JC_OID.Add(jcfeature.OID); |
|
InsertXZQGXFeature(jcfeature, 0, jcjxlx, jcjxxz, pLayerSourceHelper.JcXzqJxLayer.FeatureClass, XZQJXGXFeatureClass); |
|
if (MS_OID.Contains(jcfeature.OID)) |
|
MS_OID.Remove(jcfeature.OID); |
|
} |
|
continue; |
|
} |
|
if (gxshapeLength == jcshapeLength) |
|
{ |
|
if (!string.IsNullOrWhiteSpace(leftIsjctb) && !string.IsNullOrWhiteSpace(rightIsjctb) && jcjxlx == bghJXLX) |
|
{ |
|
continue; |
|
} |
|
//长度一样,表示界线图形为变化 |
|
if (bghJXLX == jcjxlx) |
|
{ |
|
InsertXZQGXFeature(jcfeature, 4, jcjxlx, jcjxxz, pLayerSourceHelper.JcXzqJxLayer.FeatureClass, XZQJXGXFeatureClass); |
|
if (MS_OID.Contains(jcfeature.OID)) |
|
MS_OID.Remove(jcfeature.OID); |
|
continue; |
|
} |
|
else |
|
{ |
|
if (!JC_OID.Contains(jcfeature.OID)) |
|
{ |
|
JC_OID.Add(jcfeature.OID); |
|
InsertXZQGXFeature(jcfeature, 0, jcjxlx, jcjxxz, pLayerSourceHelper.JcXzqJxLayer.FeatureClass, XZQJXGXFeatureClass); |
|
if (MS_OID.Contains(jcfeature.OID)) |
|
MS_OID.Remove(jcfeature.OID); |
|
} |
|
//相关基础界线标记删除,新生成的界线标记新增 |
|
InsertXZQGXFeature(f, 3, bghJXLX, jcjxxz, pLayerSourceHelper.JcXzqJxLayer.FeatureClass, XZQJXGXFeatureClass); |
|
} |
|
} |
|
else |
|
{ |
|
if (!JC_OID.Contains(jcfeature.OID)) |
|
{ |
|
JC_OID.Add(jcfeature.OID); |
|
InsertXZQGXFeature(jcfeature, 0, jcjxlx, jcjxxz, pLayerSourceHelper.JcXzqJxLayer.FeatureClass, XZQJXGXFeatureClass); |
|
if (MS_OID.Contains(jcfeature.OID)) |
|
MS_OID.Remove(jcfeature.OID); |
|
} |
|
//相关基础界线标记删除,新生成的界线标记新增 |
|
InsertXZQGXFeature(f, 3, bghJXLX, jcjxxz, pLayerSourceHelper.JcXzqJxLayer.FeatureClass, XZQJXGXFeatureClass); |
|
} |
|
|
|
} |
|
foreach (var item in MS_OID) |
|
{ |
|
IFeature jcfeature = pLayerSourceHelper.JcXzqJxLayer.FeatureClass.GetFeature(item); |
|
string jcjxlx = jcfeature.Value[jcfeature.Fields.FindField("JXLX")].ToString(); |
|
string jcjxxz = jcfeature.Value[jcfeature.Fields.FindField("JXXZ")].ToString(); |
|
InsertXZQGXFeature(jcfeature, 0, jcjxlx, jcjxxz, pLayerSourceHelper.JcXzqJxLayer.FeatureClass, XZQJXGXFeatureClass); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("行政区数据提取发生异常!异常信息如下:"); |
|
LogAPI.Debug(ex); |
|
LogAPI.Debug("异常信息结束"); |
|
} |
|
} |
|
|
|
private void JCXZQInsertGX(List<IFeature> jcfeatures, IFeatureClass gxfeatureClass, IQueryFilter pFilter) |
|
{ |
|
IFeatureCursor T_Cursor = null; |
|
try |
|
{ |
|
Dictionary<int, int> fieldsDic = new Dictionary<int, int>(); |
|
for (int i = 0; i < gxfeatureClass.Fields.FieldCount; i++) |
|
{ |
|
IField field = gxfeatureClass.Fields.Field[i]; |
|
if (field.Name == gxfeatureClass.ShapeFieldName || field.Name.Contains(gxfeatureClass.ShapeFieldName) || field.Name == gxfeatureClass.OIDFieldName || !field.Editable) continue; |
|
|
|
int index = -1; |
|
index = jcfeatures[0].Fields.FindField(field.Name); |
|
if (index == -1) |
|
index = jcfeatures[0].Fields.FindField(field.AliasName); |
|
if (index == -1) |
|
continue; |
|
|
|
fieldsDic.Add(i, index); |
|
} |
|
if (fieldsDic.Count != 0) |
|
{ |
|
IFeatureBuffer buffer = gxfeatureClass.CreateFeatureBuffer(); |
|
T_Cursor = gxfeatureClass.Insert(true); |
|
int gxgcIndex = gxfeatureClass.FindField("IsJCTB"); |
|
for (int i = 0; i < jcfeatures.Count; i++) |
|
{ |
|
IFeature f = jcfeatures[i]; |
|
buffer.Shape = f.ShapeCopy; |
|
|
|
foreach (int item in fieldsDic.Keys) |
|
{ |
|
if (string.IsNullOrWhiteSpace(f.Value[fieldsDic[item]].ToTrim())) |
|
buffer.Value[item] = DBNull.Value; |
|
buffer.Value[item] = f.Value[fieldsDic[item]]; |
|
} |
|
if (gxgcIndex != -1) |
|
{ |
|
buffer.Value[gxgcIndex] = "1"; |
|
} |
|
T_Cursor.InsertFeature(buffer); |
|
} |
|
T_Cursor.Flush(); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("基础村级调查区向临时库村级调查区更新层插入数据失败:" + ex.Message); |
|
} |
|
} |
|
|
|
private void XZQGXMSInsertGX(IFeatureClass gxgcfeatureClass, IFeatureClass gxfeatureClass, IQueryFilter pFilter) |
|
{ |
|
IFeatureCursor T_Cursor = null; |
|
IFeatureCursor S_Cursor = null; |
|
|
|
try |
|
{ |
|
Dictionary<int, int> fieldsDic = new Dictionary<int, int>(); |
|
for (int i = 0; i < gxfeatureClass.Fields.FieldCount; i++) |
|
{ |
|
IField field = gxfeatureClass.Fields.Field[i]; |
|
if (field.Name == gxfeatureClass.ShapeFieldName || field.Name.Contains(gxfeatureClass.ShapeFieldName) || field.Name == gxfeatureClass.OIDFieldName || !field.Editable) continue; |
|
|
|
int index = -1; |
|
string gxgcfield = "BGH" + field.Name; |
|
index = gxgcfeatureClass.Fields.FindField(gxgcfield); |
|
if (index == -1) |
|
continue; |
|
|
|
fieldsDic.Add(i, index); |
|
} |
|
|
|
if (fieldsDic.Count != 0) |
|
{ |
|
IFeatureBuffer buffer = gxfeatureClass.CreateFeatureBuffer(); |
|
T_Cursor = gxfeatureClass.Insert(true); |
|
int gxgcIndex = gxfeatureClass.FindField("IsJCTB"); |
|
|
|
IFeature gxgcfeature = null; |
|
S_Cursor = gxgcfeatureClass.Search(pFilter, true); |
|
while ((gxgcfeature = S_Cursor.NextFeature()) != null) |
|
{ |
|
buffer.Shape = gxgcfeature.ShapeCopy; |
|
foreach (int item in fieldsDic.Keys) |
|
{ |
|
if (string.IsNullOrWhiteSpace(gxgcfeature.Value[fieldsDic[item]].ToTrim())) |
|
buffer.Value[item] = DBNull.Value; |
|
buffer.Value[item] = gxgcfeature.Value[fieldsDic[item]]; |
|
} |
|
T_Cursor.InsertFeature(buffer); |
|
Marshal.ReleaseComObject(gxgcfeature); |
|
} |
|
T_Cursor.Flush(); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("基础行政区向临时库行政区更新层插入数据失败:" + ex.Message); |
|
} |
|
} |
|
public void InsertXZQGXFeature(IFeature pGXJX, int BGXW, string JXLX, string JXXZ, IFeatureClass JC_XZQJX, IFeatureClass XZQJXGX) |
|
{ |
|
IFeatureCursor gx_cursor = null; |
|
IFeatureBuffer gx_buffer = null; |
|
try |
|
{ |
|
bool IsInsert = true; |
|
var Identify = FeatureAPI.Identify2(pGXJX.Shape, new FeatureLayer() { FeatureClass = XZQJXGX }); |
|
if (Identify.Count > 0) |
|
{ |
|
foreach (var item in Identify) |
|
{ |
|
if (FeatureAPI.GetEqual(item.ShapeCopy, pGXJX.Shape) && FeatureAPI.GetEqual(pGXJX.Shape, item.ShapeCopy) && BGXW != 3) |
|
{ |
|
IsInsert = false; |
|
break; |
|
} |
|
} |
|
} |
|
if (IsInsert) |
|
{ |
|
if (string.IsNullOrWhiteSpace(strXZQJXMaxBSM)) |
|
{ |
|
strXZQJXMaxBSM = SetMaxBSM(JC_XZQJX, XZQJXGX); |
|
if (!strXZQJXMaxBSM.StartsWith(IDGParm.PrjInfo.CODE)) |
|
strXZQJXMaxBSM = IDGParm.PrjInfo.CODE + "1220" + "1".PadLeft(8, '0'); |
|
} |
|
else |
|
{ |
|
string bsmPrefix = IDGParm.PrjInfo.CODE + strXZQJXMaxBSM.Substring(6, 4); |
|
int MaxNum = Convert.ToInt32(strXZQJXMaxBSM.Substring(9)); |
|
strXZQJXMaxBSM = bsmPrefix + (MaxNum + 1).ToString().PadLeft(8, '0'); |
|
} |
|
gx_cursor = XZQJXGX.Insert(true); |
|
gx_buffer = XZQJXGX.CreateFeatureBuffer(); |
|
gx_buffer.Shape = pGXJX.Shape; |
|
gx_buffer.set_Value(gx_buffer.Fields.FindField("BSM"), BGXW == 3 ? strXZQJXMaxBSM : pGXJX.Value[pGXJX.Fields.FindField("BSM")]); |
|
gx_buffer.set_Value(gx_buffer.Fields.FindField("JXLX"), JXLX); |
|
gx_buffer.set_Value(gx_buffer.Fields.FindField("JXXZ"), JXXZ); |
|
gx_buffer.set_Value(gx_buffer.Fields.FindField("JXSM"), BGXW == 3 ? string.Empty : pGXJX.Value[pGXJX.Fields.FindField("JXSM")]); |
|
gx_buffer.set_Value(gx_buffer.Fields.FindField("BZ"), BGXW == 3 ? string.Empty : pGXJX.Value[pGXJX.Fields.FindField("BZ")]); |
|
gx_buffer.set_Value(gx_buffer.Fields.FindField("BGXW"), BGXW); |
|
gx_buffer.set_Value(gx_buffer.Fields.FindField("GXSJ"), new DateTime(2023, 12, 31)); |
|
gx_buffer.set_Value(gx_buffer.Fields.FindField("YSDM"), "1000600200"); |
|
gx_cursor.InsertFeature(gx_buffer); |
|
gx_cursor.Flush(); |
|
Marshal.ReleaseComObject(gx_buffer); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("写入村级调查区界线更新层数据时发生异常,异常信息如下:"); |
|
LogAPI.Debug(ex); |
|
LogAPI.Debug("异常信息结束"); |
|
} |
|
finally |
|
{ |
|
if (gx_cursor != null) |
|
Marshal.ReleaseComObject(gx_cursor); |
|
if (gx_buffer != null) |
|
Marshal.ReleaseComObject(gx_buffer); |
|
} |
|
} |
|
|
|
private string strXZQJXMaxBSM = string.Empty; |
|
|
|
private string SetMaxBSM(IFeatureClass JC_XZQJX, IFeatureClass XZQJXGC) |
|
{ |
|
var MaxBSM = GetMaxBSM(new List<IFeatureClass>() { JC_XZQJX, XZQJXGC }); |
|
string bsmPrefix = IDGParm.PrjInfo.CODE + MaxBSM.Substring(6, 4); |
|
int MaxNum = Convert.ToInt32(MaxBSM.Substring(9)); |
|
MaxBSM = bsmPrefix + (MaxNum + 1).ToString().PadLeft(8, '0'); |
|
return MaxBSM; |
|
} |
|
private string GetMaxBSM(List<IFeatureClass> fcList) |
|
{ |
|
int xh = 0; |
|
string MaxBSM = ""; |
|
string leftStr = string.Empty; |
|
foreach (var fc in fcList) |
|
{ |
|
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; |
|
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; |
|
} |
|
if (BSM.Length != 18) |
|
continue; |
|
int xh2 = Convert.ToInt32(BSM.Substring(10)); |
|
leftStr = BSM.Substring(0, 10); |
|
if (xh < xh2) |
|
{ |
|
xh = xh2; |
|
MaxBSM = BSM; |
|
} |
|
} |
|
return MaxBSM; |
|
} |
|
|
|
#endregion |
|
|
|
|
|
#region DelectDir |
|
public static void DelectDir(string srcPath) |
|
{ |
|
try |
|
{ |
|
DirectoryInfo dir = new DirectoryInfo(srcPath); |
|
FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录 |
|
foreach (FileSystemInfo i in fileinfo) |
|
{ |
|
if (i is DirectoryInfo) //判断是否文件夹 |
|
{ |
|
DirectoryInfo subdir = new DirectoryInfo(i.FullName); |
|
subdir.Delete(true); //删除子目录和文件 |
|
} |
|
else |
|
{ |
|
File.Delete(i.FullName); //删除指定文件 |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex + ":删除错误不处理"); |
|
} |
|
} |
|
#endregion |
|
|
|
|
|
|
|
#region 获取最新标识码 |
|
public string GetNewBSM(List<IFeatureClass> 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 = IDGParm.PrjInfo.CODE + "1210"; |
|
result = leftStr + xh.ToString().PadLeft(8, '0'); |
|
return result; |
|
} |
|
private string GetMaxBSM(IFeatureClass fc) |
|
{ |
|
//System.Windows.Forms.Application.DoEvents(); |
|
string BSM = string.Empty; |
|
int BSMIndex = fc.FindField("BSM"); |
|
if (BSMIndex == -1) return BSM; |
|
|
|
ITable table = (ITable)fc; |
|
ITableSort tableSort = new TableSortClass(); |
|
tableSort.Table = table; |
|
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 |
|
|
|
|
|
} |
|
}
|
|
|