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.
3000 lines
154 KiB
3000 lines
154 KiB
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.DataManagementTools; |
|
using ESRI.ArcGIS.DataSourcesGDB; |
|
using ESRI.ArcGIS.esriSystem; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using ESRI.ArcGIS.Geometry; |
|
using ESRI.ArcGIS.Geoprocessing; |
|
using ESRI.ArcGIS.Geoprocessor; |
|
//using IDEParameter; |
|
using KGIS.Framework.AE; |
|
using KGIS.Framework.AE.Enum; |
|
using KGIS.Framework.AE.ExtensionMethod; |
|
using KGIS.Framework.AE.GaussCalculate; |
|
using KGIS.Framework.AE.GPHelper; |
|
//using KGIS.Framework.AE.GPHelper; |
|
using KGIS.Framework.DBOperator; |
|
using KGIS.Framework.Platform; |
|
using KGIS.Framework.ThreadManager; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Utility; |
|
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 IDGForNDBG |
|
{ |
|
public class CZC_IDGHelper : BaseIDG |
|
{ |
|
//private IFeatureLayer _DLTBFc = null; |
|
public string IDataChangeName { get => "CZCDYDHelper"; } |
|
private string TempGDBPath = string.Empty; |
|
private string TempDBPath = string.Empty; |
|
Dictionary<int, double> AreaList = new Dictionary<int, double>(); |
|
IDGParameter pParm = null; |
|
#region ExecuteDataChange |
|
public void Execute(IDGParameter pParm) |
|
{ |
|
try |
|
{ |
|
//ExtractExe(pParm); |
|
ThreadManager.Instance.QueueUserWorkItem(new System.Threading.WaitCallback(ExtractExe), pParm); |
|
|
|
//IFeatureClass _CZCFc = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("城镇村等用地").FeatureClass; |
|
//Implement(_CZCFc, true, false); |
|
//ExtractExe(pParm, bgParm); |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
} |
|
#endregion |
|
|
|
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 = 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"); |
|
BgWsAPI = new WorkspaceAPI(PathBgDB, WorkspaceTypeEnum.GDBFile); |
|
if (BgWsAPI.CurrentWorkspace == null) |
|
{ |
|
Console.WriteLine("打开变更数据库失败!"); |
|
return; |
|
} |
|
ZlWsAPI = new WorkspaceAPI(PathZLDB, WorkspaceTypeEnum.GDBFile); |
|
if (ZlWsAPI.CurrentWorkspace == null) |
|
{ |
|
Console.WriteLine("打开增量数据库失败!"); |
|
return; |
|
} |
|
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 _JcCzcLayerInfo = NcList.FirstOrDefault(f => f.LayerName == "城镇村等用地"); |
|
_jcCzcLayer = OpenLayer(_JcCzcLayerInfo); |
|
if (_JcCzcLayerInfo == null) |
|
throw new Exception("Err:获取年初城镇村等用地数据失败!"); |
|
//if (_nmTbLayer == null) |
|
// _nmTbLayer = OpenLayer(NmWsAPI, "DLTB_NMK"); |
|
_gxCzcLayer = OpenLayer(ZlWsAPI, "CZCDYDGX"); |
|
_gxgcCzcLayer = OpenLayer(ZlWsAPI, "CZCDYDGXGC"); |
|
_gxTbLayer = OpenLayer(ZlWsAPI, "DLTBGX"); |
|
_gxgcTBLayer = OpenLayer(ZlWsAPI, "DLTBGXGC"); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
throw ex; |
|
} |
|
} |
|
|
|
|
|
|
|
public void ExtractExe(object parm) |
|
{ |
|
IRDBHelper rdbHelper = null; |
|
List<DataDicTionary> qsDic = null; |
|
DateTime StartTime = DateTime.Now; |
|
Console.WriteLine("Log:正在提取城镇村更新数据,请稍候..."); |
|
try |
|
{ |
|
Kingo.ThreadManager.TaskParameter taskParm = parm as Kingo.ThreadManager.TaskParameter; |
|
pParm = taskParm.Data as IDGParameter; |
|
//pParm = parm as IDGParameter; |
|
OpenDB(pParm); |
|
//Console.WriteLine("Log:1..."); |
|
string TempDir = CreateTempDB("CZC"); |
|
//Console.WriteLine("Log:2..."); |
|
TempGDBPath = System.IO.Path.Combine(TempDir, "TempGDB.gdb"); |
|
TempDBPath = TempDir + @"\Temp" + ".sqlite"; |
|
|
|
//FileInfo fileInfo = new FileInfo(pParm.PrjInfo.BGDatabase); |
|
rdbHelper = RDBFactory.CreateDbHelper(System.IO.Path.Combine(pParm.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 NAME='权属代码')"), true); |
|
qsDic = TBToList.ToList<DataDicTionary>(dicDt); |
|
if (qsDic == null) |
|
{ |
|
LogAPI.Debug($"Err:权属单位代码表获取失败。"); |
|
return; |
|
} |
|
Console.WriteLine("Log:正在提取城镇村数据..."); |
|
IFeatureLayer tempjcCjdcqLayer = null; |
|
//Console.WriteLine("Log:4..."); |
|
string HRCZC = pParm.PrjInfo.DR_CZCPath; |
|
|
|
//Console.WriteLine("Log:5..."); |
|
if (!string.IsNullOrEmpty(HRCZC)) |
|
{ |
|
IWorkspaceAPI hrWsAPI = null; |
|
IFeatureClassAPI hrFcAPI = null; |
|
IFeatureLayer hrCZCLayer = null; |
|
if (HRCZC.ToLower().Contains(".gdb")) |
|
{ |
|
string hr_dbPath = HRCZC.Substring(0, HRCZC.ToLower().IndexOf(".gdb")); |
|
hr_dbPath = hr_dbPath + ".gdb"; |
|
hrWsAPI = new WorkspaceAPI(hr_dbPath, WorkspaceTypeEnum.GDBFile); |
|
FileInfo fInfo = new FileInfo(HRCZC); |
|
hrFcAPI = hrWsAPI.OpenFeatureClass(fInfo.Name); |
|
hrCZCLayer = new FeatureLayerClass() { FeatureClass = hrFcAPI.FeatureClass }; |
|
} |
|
else if (HRCZC.ToLower().Contains(".shp")) |
|
{ |
|
FileInfo fInfo = new FileInfo(HRCZC); |
|
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]); |
|
hrCZCLayer = new FeatureLayerClass() { FeatureClass = hrFcAPI.FeatureClass }; |
|
} |
|
|
|
GPParamClass gPParamClass2 = new GPParamClass(); |
|
gPParamClass2.FirstFeatureLayer = JcCzcLayer; |
|
gPParamClass2.SecondFeatureLayer = hrCZCLayer; |
|
gPParamClass2.IsGetOutPutFeature = true; |
|
gPParamClass2.GPType = EnumGPType.Erase; |
|
gPParamClass2.OutFeatureClassPath = System.IO.Path.Combine(TempGDBPath, "CZCDYD"); |
|
GPHelper.Instance.ExeGPForProces(gPParamClass2, ref tempjcCjdcqLayer); |
|
hrFcAPI.FcToFc(tempjcCjdcqLayer.FeatureClass, null, false); |
|
tempjcCjdcqLayer.Name = "城镇村等用地"; |
|
SetJcCzcLayer(tempjcCjdcqLayer); |
|
} |
|
IFeatureLayer Union20XLayer = null; |
|
IFeatureLayer Union203Layer = null; |
|
|
|
//Console.WriteLine("Log:7..."); |
|
Get20XDLTB(JcTbLayer, GxTbLayer, JcCzcLayer, ref Union20XLayer, ref Union203Layer); |
|
|
|
//Console.WriteLine("Log:8..."); |
|
Console.WriteLine("Log:正在写入城镇村更新过程数据..."); |
|
//(GxgcCzcLayer.FeatureClass as ITable).DeleteSearchedRows(null); |
|
(GxgcCzcLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL("Delete From CZCDYDGXGC WHERE 1=1"); |
|
GenerateGXGC(GxgcCzcLayer, Union20XLayer, qsDic); |
|
GenerateXz203GXGC(GxgcCzcLayer, Union203Layer, qsDic); |
|
IFeatureLayer ptempLayer = null; |
|
//GPParamClass gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = GxgcCzcLayer; |
|
//gPParamClass.GPType = EnumGPType.Default; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref ptempLayer); |
|
//ZLBGTBExt(); |
|
Console.WriteLine("Log:正在写入城镇村更新层数据..."); |
|
//(GxCzcLayer.FeatureClass as ITable).DeleteSearchedRows(null); |
|
(GxCzcLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL("Delete From CZCDYDGX WHERE 1=1"); |
|
|
|
(GxgcCzcLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL(string.Format("update CZCDYDGXGC set BGHCZCDM='{1}' where BGHCZCDM='{0}'", "2205211002160000000", "2205022012070000000")); |
|
(GxgcCzcLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL(string.Format("update CZCDYDGXGC set BGHCZCDM='{1}' where BGHCZCDM='{0}'", "2205211012000000000", "2205023002000000000")); |
|
(GxgcCzcLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL(string.Format("update CZCDYDGXGC set BGHCZCDM='{1}' where BGHCZCDM='{0}'", "2205211012020000000", "2205023002020000000")); |
|
(GxgcCzcLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL(string.Format("update CZCDYDGXGC set BGHCZCDM='{1}' where BGHCZCDM='{0}'", "2205211012100000000", "2205023002100000000")); |
|
(GxgcCzcLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL(string.Format("update CZCDYDGXGC set BGHCZCDM='{1}' where BGHCZCDM='{0}'", "2205211012110000000", "2205023002110000000")); |
|
(GxgcCzcLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL(string.Format("update CZCDYDGXGC set BGHCZCDM='{1}' where BGHCZCDM='{0}'", "2205211012120000000", "2205023002120000000")); |
|
(GxgcCzcLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL(string.Format("update CZCDYDGXGC set BGHCZCDM='{1}' where BGHCZCDM='{0}'", "2205211012010000000", "2205023002010000000")); |
|
(GxgcCzcLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL(string.Format("update CZCDYDGXGC set BGHCZCDM='{1}' where BGHCZCDM='{0}'", "2205211012010000000", "2205023002010000000")); |
|
GenerateGX(GxgcCzcLayer, GxCzcLayer); |
|
Console.WriteLine("Log:正在写入城镇村更新层标识码、面积等属性..."); |
|
|
|
#region 划出/灭失城镇村写入更新过程层 |
|
int idxXZQTZLX = JcCzcLayer.FeatureClass.FindField("XZQTZLX"); |
|
if (idxXZQTZLX != -1) |
|
{ |
|
IFeatureCursor jcCursor = JcCzcLayer.FeatureClass.Search(new QueryFilter() { WhereClause = "XZQTZLX='2' or XZQTZLX='4'" }, true); |
|
IFeatureCursor gxgcCuroso = GxgcCzcLayer.FeatureClass.Insert(true); |
|
IFeatureBuffer buff = null; |
|
IFeature jcF = null; |
|
int idxBGXW = GxgcCzcLayer.FeatureClass.FindField("BGXW"); |
|
int idxGXSJ = GxgcCzcLayer.FeatureClass.FindField("GXSJ"); |
|
int idxBGMJ = GxgcCzcLayer.FeatureClass.FindField("BGMJ"); |
|
int idxJCCZCMJ = JcCzcLayer.FeatureClass.FindField("CZCMJ"); |
|
while ((jcF = jcCursor.NextFeature()) != null) |
|
{ |
|
if (buff == null) |
|
buff = GxgcCzcLayer.FeatureClass.CreateFeatureBuffer(); |
|
for (int i = 0; i < GxgcCzcLayer.FeatureClass.Fields.FieldCount; i++) |
|
{ |
|
IField field = GxgcCzcLayer.FeatureClass.Fields.Field[i]; |
|
if (!field.Editable || field.Name.Contains("SHAPE")) continue; |
|
if (field.Name.StartsWith("BGQ")) |
|
{ |
|
string jcFName = field.Name.Replace("BGQ", ""); |
|
int idx = jcF.Fields.FindField(jcFName); |
|
if (idx != -1) |
|
buff.Value[i] = jcF.Value[idx]; |
|
} |
|
} |
|
buff.Shape = jcF.ShapeCopy; |
|
if (idxBGXW != -1) |
|
buff.Value[idxBGXW] = "1"; |
|
if (idxGXSJ != -1) |
|
buff.Value[idxGXSJ] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31); |
|
if (idxBGMJ != -1 && idxJCCZCMJ != -1) |
|
buff.Value[idxBGMJ] = jcF.Value[idxJCCZCMJ]; |
|
gxgcCuroso.InsertFeature(buff); |
|
} |
|
gxgcCuroso.Flush(); |
|
} |
|
#endregion |
|
|
|
SetAttribute(GxgcCzcLayer, GxCzcLayer, JcCzcLayer); |
|
ResultPress(GxgcCzcLayer, GxCzcLayer); |
|
|
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = GxgcCzcLayer; |
|
//gPParamClass.GPType = EnumGPType.Default; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref ptempLayer); |
|
|
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = GxCzcLayer; |
|
//gPParamClass.GPType = EnumGPType.Default; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref ptempLayer); |
|
|
|
#region 小于30平图斑是否灭失 |
|
if (pParm.PrjInfo.LessThan30Missing == true) |
|
{ |
|
IFeatureCursor cursor = null; |
|
IFeature feature = null; |
|
IFeature czcgxgcfeature = null; |
|
var gx_CZCMJ = _gxCzcLayer.FeatureClass.FindField("CZCMJ"); |
|
var jc_CZCMJ = _jcCzcLayer.FeatureClass.FindField("CZCMJ"); |
|
var jc_CZCSXM = _jcCzcLayer.FeatureClass.FindField("CZCLX"); |
|
var jc_CZCDM = _jcCzcLayer.FeatureClass.FindField("CZCDM"); |
|
var jc_CZCMC = _jcCzcLayer.FeatureClass.FindField("CZCMC"); |
|
var gx_GXSJ = _gxCzcLayer.FeatureClass.FindField("GXSJ"); |
|
var gx_CZCDM = _gxCzcLayer.FeatureClass.FindField("CZCDM"); |
|
var gx_CZCMC = _gxCzcLayer.FeatureClass.FindField("CZCMC"); |
|
int gc_GXSJ = _gxgcCzcLayer.FeatureClass.FindField("GXSJ"); |
|
var gx_YSDM = _gxCzcLayer.FeatureClass.FindField("YSDM"); |
|
int idxCZCBGMJ = _gxgcCzcLayer.FeatureClass.FindField("BGMJ"); |
|
var gxgc_bgxw = _gxgcCzcLayer.FeatureClass.FindField("BGXW"); |
|
var gx_BSM = _gxCzcLayer.FeatureClass.FindField("BSM"); |
|
var gx_CZCLX = _gxCzcLayer.FeatureClass.FindField("CZCLX"); |
|
var gxgc_BGHBSM = _gxgcCzcLayer.FeatureClass.FindField("BGHBSM"); |
|
var gxgc_BGHCZCDM = _gxgcCzcLayer.FeatureClass.FindField("BGHCZCDM"); |
|
var gxgc_BGHCZCMC = _gxgcCzcLayer.FeatureClass.FindField("BGHCZCMC"); |
|
var gxgc_BGHCZCLX = _gxgcCzcLayer.FeatureClass.FindField("BGHCZCLX"); |
|
try |
|
{ |
|
Console.WriteLine("Log:正在进行城镇村小于30平图斑灭失..."); |
|
string WhereClause = $" SHAPE_Area<30 and BGXW='2' and BGQCZCLX='203' and BGHCZCLX='203' "; |
|
cursor = _gxgcCzcLayer.Search(new QueryFilter() { WhereClause = WhereClause }, true); |
|
while ((czcgxgcfeature = cursor.NextFeature()) != null) |
|
{ |
|
double bgmj = czcgxgcfeature.Value[idxCZCBGMJ].ToDecimal(2).ToDouble(); |
|
//与相邻更新层合并,继承最大图形的属性 |
|
List<IFeature> listFcCZC = FeatureAPI.Identify2(czcgxgcfeature.ShapeCopy, _gxCzcLayer); |
|
if (listFcCZC.Count > 0) |
|
{ |
|
if (bgmj < 0.1) continue; |
|
//提取地类图斑数据,作为无变化数据 |
|
List<IFeature> listFc = FeatureAPI.Identify2(czcgxgcfeature.ShapeCopy, _gxgcTBLayer); |
|
if (listFc == null || listFc.Count == 0) |
|
{ |
|
czcgxgcfeature.Store();//城镇村小于30平灭失,需提取无变化地类图斑增量才可以灭失,否则做例外处理; |
|
listFc = FeatureAPI.Identify2(czcgxgcfeature.ShapeCopy, _jcTbLayer); |
|
if (listFc == null || listFc.Count == 0) continue; |
|
//IFeature jctb_F = listFc[0]; |
|
bool IsMS = false; |
|
foreach (IFeature jctb_F in listFc) |
|
{ |
|
var listVs = FeatureAPI.Identify2(jctb_F.ShapeCopy, _jcCzcLayer); |
|
if (listVs != null && listVs.Count > 0) continue; |
|
else IsMS = true;//无变化地类图斑数据提取压盖到基础CZC不灭失 |
|
int idxTBMJ = jctb_F.Fields.FindField("TBMJ"); |
|
#region 地类图斑更新过程层 |
|
IFeatureCursor insertCur = _gxgcTBLayer.FeatureClass.Insert(true); |
|
IFeatureBuffer gcBuf = _gxgcTBLayer.FeatureClass.CreateFeatureBuffer(); |
|
gcBuf.Shape = jctb_F.ShapeCopy; |
|
for (int i = 0; i < _gxgcTBLayer.FeatureClass.Fields.FieldCount; i++) |
|
{ |
|
IField field = _gxgcTBLayer.FeatureClass.Fields.Field[i]; |
|
if (!field.Editable || field.Name.Contains("SHAPE")) continue; |
|
string sFieldName = field.Name.Replace("BGQ", "").Replace("BGH", ""); |
|
int idx = jctb_F.Fields.FindField(sFieldName); |
|
if (idx == -1) |
|
{ |
|
sFieldName = field.Name.Replace("BGQTB", "").Replace("BGHTB", ""); |
|
idx = jctb_F.Fields.FindField(sFieldName); |
|
} |
|
if (idx != -1) |
|
gcBuf.Value[i] = jctb_F.Value[idx]; |
|
} |
|
int idxBGXW = _gxgcTBLayer.FeatureClass.FindField("BGXW"); |
|
int idxBGMJ = _gxgcTBLayer.FeatureClass.FindField("TBBGMJ"); |
|
int iXZQTZLX = _gxgcTBLayer.FeatureClass.FindField("XZQTZLX"); |
|
int idxGXSJ = _gxgcTBLayer.FeatureClass.FindField("GXSJ"); |
|
gcBuf.Value[idxBGMJ] = jctb_F.Value[idxTBMJ]; |
|
gcBuf.Value[idxBGXW] = "4"; |
|
gcBuf.Value[iXZQTZLX] = "0"; |
|
gcBuf.Value[idxGXSJ] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31); |
|
insertCur.InsertFeature(gcBuf); |
|
insertCur.Flush(); |
|
#endregion |
|
|
|
#region 地类图斑更新层 |
|
insertCur = _gxTbLayer.FeatureClass.Insert(true); |
|
gcBuf = _gxTbLayer.FeatureClass.CreateFeatureBuffer(); |
|
gcBuf.Shape = jctb_F.ShapeCopy; |
|
for (int i = 0; i < _gxTbLayer.FeatureClass.Fields.FieldCount; i++) |
|
{ |
|
IField field = _gxTbLayer.FeatureClass.Fields.Field[i]; |
|
if (!field.Editable || field.Name.Contains("SHAPE")) continue; |
|
string sFieldName = field.Name.Replace("BGQ", "").Replace("BGH", ""); |
|
int idx = jctb_F.Fields.FindField(sFieldName); |
|
if (idx == -1) |
|
{ |
|
sFieldName = field.Name.Replace("BGQTB", "").Replace("BGHTB", ""); |
|
idx = jctb_F.Fields.FindField(sFieldName); |
|
} |
|
if (idx != -1) |
|
gcBuf.Value[i] = jctb_F.Value[idx]; |
|
} |
|
idxGXSJ = _gxTbLayer.FeatureClass.FindField("GXSJ"); |
|
gcBuf.Value[idxGXSJ] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31); |
|
insertCur.InsertFeature(gcBuf); |
|
insertCur.Flush(); |
|
#endregion |
|
} |
|
//进行城镇村灭失 |
|
if (IsMS == false) continue; |
|
for (int i = 0; i < listFcCZC.Count; i++) |
|
{ |
|
feature = listFcCZC[i]; |
|
if (feature.Value[gx_CZCMJ].ToDouble(2) > 30) continue; |
|
feature.Delete(); |
|
} |
|
czcgxgcfeature.Value[gxgc_BGHBSM] = ""; |
|
czcgxgcfeature.Value[gxgc_BGHCZCDM] = ""; |
|
czcgxgcfeature.Value[gxgc_BGHCZCMC] = ""; |
|
czcgxgcfeature.Value[gxgc_BGHCZCLX] = ""; |
|
czcgxgcfeature.Value[gxgc_bgxw] = "0"; |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
Console.WriteLine("Log:小于30平图斑是否灭失执行失败:" + ex.Message); |
|
Console.WriteLine("Log:小于30平图斑是否灭失执行失败:" + ex.StackTrace); |
|
throw ex; |
|
} |
|
try |
|
{ |
|
Console.WriteLine("Log:正在进行城镇村小于30平的新增图斑合并..."); |
|
string WhereClause = $" SHAPE_Area<30 and BGXW='3' and BGHCZCLX='203' "; |
|
cursor = _gxgcCzcLayer.FeatureClass.Update(new QueryFilter() { WhereClause = WhereClause }, true); |
|
var strBSM = GetMaxBSM(new List<IFeatureClass>() { _gxCzcLayer.FeatureClass }); |
|
while ((czcgxgcfeature = cursor.NextFeature()) != null) |
|
{ |
|
double bgmj = czcgxgcfeature.Value[idxCZCBGMJ].ToDecimal(2).ToDouble(); |
|
//与相邻更新层合并,继承最大图形的属性 删除CZC更新层碎图斑 |
|
List<IFeature> listFc = FeatureAPI.Identify2(czcgxgcfeature.ShapeCopy, _gxCzcLayer); |
|
if (listFc.Count > 0) |
|
{ |
|
for (int i = 0; i < listFc.Count; i++) |
|
{ //更新层CZC数据 |
|
if (listFc[i].Value[gx_CZCMJ].ToDouble(2) > 30) continue; |
|
feature = listFc[i]; |
|
} |
|
if (feature == null) continue; |
|
listFc = FeatureAPI.Identify(czcgxgcfeature.ShapeCopy, _gxCzcLayer); |
|
IFeature UnionFeature = null; |
|
if (listFc.Count > 1) |
|
{ |
|
var Unionlength = 0.0; |
|
foreach (var ifeature in listFc) |
|
{ |
|
if (!ifeature.Value[gx_CZCLX].Equals(czcgxgcfeature.Value[gxgc_BGHCZCLX])) |
|
continue; |
|
if (ifeature.Value[gx_BSM].Equals(czcgxgcfeature.Value[gxgc_BGHBSM])) |
|
continue; |
|
var length = FeatureAPI.LengthOfSide(czcgxgcfeature.ShapeCopy, ifeature.ShapeCopy); |
|
if (length > Unionlength) |
|
{ |
|
Unionlength = length; |
|
UnionFeature = ifeature; |
|
} |
|
} |
|
if (UnionFeature != null) |
|
{ |
|
czcgxgcfeature.Value[gxgc_BGHBSM] = UnionFeature.Value[gx_BSM]; |
|
cursor.UpdateFeature(czcgxgcfeature); |
|
cursor.Flush(); |
|
UnionFeature.Shape = FeatureAPI.Union(UnionFeature.ShapeCopy, czcgxgcfeature.ShapeCopy); |
|
UnionFeature.Value[gx_CZCMJ] = bgmj + UnionFeature.Value[gx_CZCMJ].ToDecimal(2).ToDouble(); |
|
UnionFeature.Store(); |
|
feature.Delete(); |
|
} |
|
} |
|
if (listFc.Count <= 1 || UnionFeature == null) |
|
{ |
|
IFeatureCursor insertCur = _gxCzcLayer.FeatureClass.Insert(true); |
|
IFeatureBuffer gxBuf = _gxCzcLayer.FeatureClass.CreateFeatureBuffer(); |
|
//提取基础城镇村范围合并30以内增量图斑 |
|
listFc = FeatureAPI.Identify(czcgxgcfeature.ShapeCopy, _jcCzcLayer); |
|
if (listFc.Count > 0) |
|
{ |
|
if (listFc.Count == 1) |
|
{ |
|
if (!listFc[0].Value[jc_CZCSXM].ToString().Trim().Equals("203")) |
|
continue; |
|
UnionFeature = listFc[0]; |
|
} |
|
else |
|
{ |
|
var Unionlength = 0.00; |
|
foreach (var ifeature in listFc) |
|
{ |
|
if (!ifeature.Value[jc_CZCSXM].ToString().Trim().Equals("203")) |
|
continue; |
|
var length = FeatureAPI.LengthOfSide(czcgxgcfeature.ShapeCopy, ifeature.Shape); |
|
if (length > Unionlength && !czcgxgcfeature.OID.Equals(ifeature.OID)) |
|
{ |
|
Unionlength = length; |
|
UnionFeature = ifeature; |
|
} |
|
} |
|
} |
|
if (UnionFeature == null) continue; |
|
//提取到GXCZC图层数据 |
|
gxBuf.Shape = FeatureAPI.Union(UnionFeature.ShapeCopy, czcgxgcfeature.ShapeCopy); |
|
gxBuf.Value[gx_CZCMJ] = Math.Round(bgmj + UnionFeature.Value[jc_CZCMJ].ToDecimal(2).ToDouble(), 2); |
|
var strbsm = strBSM.Substring(0, 10); |
|
var Maxbsm = strBSM.Substring(10).ToInt() + 1; |
|
strBSM = strbsm + Maxbsm.ToString().PadLeft(8, '0');//最新标识码 |
|
gxBuf.Value[gx_BSM] = strBSM; |
|
gxBuf.Value[gx_CZCDM] = UnionFeature.Value[jc_CZCDM]; |
|
gxBuf.Value[gx_CZCMC] = UnionFeature.Value[jc_CZCMC]; |
|
gxBuf.Value[gx_CZCLX] = "203"; |
|
gxBuf.Value[gx_YSDM] = "2099030100"; |
|
gxBuf.Value[gx_GXSJ] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31); |
|
czcgxgcfeature.Value[gxgc_BGHBSM] = strBSM; |
|
cursor.UpdateFeature(czcgxgcfeature); |
|
cursor.Flush(); |
|
insertCur.InsertFeature(gxBuf); |
|
insertCur.Flush(); |
|
//提取到GCCZC图层数据 |
|
insertCur = _gxgcCzcLayer.FeatureClass.Insert(true); |
|
IFeatureBuffer gcBuf = _gxgcCzcLayer.FeatureClass.CreateFeatureBuffer(); |
|
gcBuf.Shape = UnionFeature.ShapeCopy;//基础城镇村图斑 |
|
for (int i = 0; i < _gxgcCzcLayer.FeatureClass.Fields.FieldCount; i++) |
|
{ |
|
IField field = _gxgcCzcLayer.FeatureClass.Fields.Field[i]; |
|
if (!field.Editable || field.Name.Contains("SHAPE")) continue; |
|
string sFieldName = field.Name.Replace("BGQ", "").Replace("BGH", ""); |
|
int idx = UnionFeature.Fields.FindField(sFieldName); |
|
if (idx == -1) |
|
{ |
|
sFieldName = field.Name.Replace("BGQTB", "").Replace("BGHTB", ""); |
|
idx = UnionFeature.Fields.FindField(sFieldName); |
|
} |
|
if (idx != -1) |
|
gcBuf.Value[i] = UnionFeature.Value[idx]; |
|
} |
|
gcBuf.Value[idxCZCBGMJ] = Math.Round(UnionFeature.Value[jc_CZCMJ].ToDecimal(2).ToDouble(), 2); |
|
gcBuf.Value[gxgc_BGHBSM] = strBSM; |
|
gcBuf.Value[gxgc_bgxw] = "2"; |
|
gcBuf.Value[gc_GXSJ] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31); |
|
insertCur.InsertFeature(gcBuf); |
|
insertCur.Flush(); |
|
feature.Delete(); |
|
} |
|
} |
|
feature = null; |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
Console.WriteLine("Log:新增小于30平的图斑合并执行失败:" + ex.Message); |
|
Console.WriteLine("Log:新增小于30平的图斑合并执行失败:" + ex.StackTrace); |
|
throw ex; |
|
} |
|
} |
|
#endregion |
|
Console.WriteLine($"Log:城镇村更新数据提取完成{pParm.PrjInfo.LessThan30Missing}。耗时:{GetTime(StartTime)}"); |
|
} |
|
catch (Exception ex) |
|
{ |
|
Console.WriteLine("Err:城镇村更新数据提取失败。"); |
|
Console.WriteLine("Err:城镇村更新数据提取失败。" + ex.Message); |
|
Console.WriteLine("Err:城镇村更新数据提取失败。" + ex.StackTrace); |
|
throw ex; |
|
} |
|
finally |
|
{ |
|
if (rdbHelper != null) |
|
rdbHelper.DisConnect(); |
|
} |
|
} |
|
|
|
private void ZLBGTBExt() |
|
{ |
|
IFeatureCursor cursur = null; |
|
try |
|
{ |
|
if (GxgcTBLayer == null) return; |
|
|
|
Dictionary<string, string> dicZLBG = new Dictionary<string, string>(); |
|
Dictionary<string, int> dicXZQDM = new Dictionary<string, int>(); |
|
List<string> BGQTBBSM = new List<string>(); |
|
cursur = GxgcTBLayer.FeatureClass.Search(new QueryFilterClass() { WhereClause = "ONLYZLBG='1' and (XZQTZLX='' or XZQTZLX='0' or XZQTZLX='5' or XZQTZLX is NULL)", SubFields = "BGQTBBSM,BGQZLDWDM,BGHZLDWDM,BGQZLDWMC,BGHZLDWMC" }, true); |
|
IFeature f = null; |
|
int idx_BGQBSM = GxgcTBLayer.FeatureClass.FindField("BGQTBBSM"); |
|
int idx_BGQZLDWDM = GxgcTBLayer.FeatureClass.FindField("BGQZLDWDM"); |
|
int idx_BGHZLDWDM = GxgcTBLayer.FeatureClass.FindField("BGHZLDWDM"); |
|
int idx_BGQZLDWMC = GxgcTBLayer.FeatureClass.FindField("BGQZLDWMC"); |
|
int idx_BGHZLDWMC = GxgcTBLayer.FeatureClass.FindField("BGHZLDWMC"); |
|
while ((f = cursur.NextFeature()) != null) |
|
{ |
|
string bgqzldwdm = f.Value[idx_BGQZLDWDM].ToTrim(); |
|
string bghzldwdm = f.Value[idx_BGHZLDWDM].ToTrim(); |
|
string bgqzldwmc = f.Value[idx_BGQZLDWMC].ToTrim(); |
|
string bghzldwmc = f.Value[idx_BGHZLDWMC].ToTrim(); |
|
string bgqtbbsm = f.Value[idx_BGQBSM].ToTrim(); |
|
string bgq = bgqzldwdm + "_" + bgqzldwmc; |
|
string bgh = bghzldwdm + "_" + bghzldwmc; |
|
if (bgq != bgh && !dicZLBG.ContainsKey(bgq)) |
|
{ |
|
dicZLBG.Add(bgq, bgh); |
|
if (!dicXZQDM.ContainsKey(bgqzldwdm.Substring(0, 9))) |
|
dicXZQDM.Add(bgqzldwdm.Substring(0, 9), 0); |
|
} |
|
if (bgq != bgh) |
|
{ |
|
if (!BGQTBBSM.Contains(bgqtbbsm)) |
|
{ |
|
BGQTBBSM.Add(bgqtbbsm); |
|
} |
|
} |
|
} |
|
if (dicXZQDM.Count == 0 && BGQTBBSM.Count == 0) return; |
|
IGeometry BGQDLTBUnion = null; |
|
int jcbsmIndex = JcTbLayer.FeatureClass.FindField("BSM"); |
|
#region 融合 |
|
string gdbFolder = Directory.GetCurrentDirectory() + "\\Temp\\CZC\\ZLBG"; |
|
if (!Directory.Exists(gdbFolder)) |
|
{ |
|
Directory.CreateDirectory(gdbFolder); |
|
} |
|
try |
|
{ |
|
DelectDir(gdbFolder);//能删除就删除 删除报错不处理 |
|
} |
|
catch |
|
{ } |
|
IWorkspaceFactory pFtWsFct = new FileGDBWorkspaceFactory(); |
|
string gdbFileName = Guid.NewGuid().ToString(); |
|
string path = System.IO.Path.Combine(gdbFolder, gdbFileName); |
|
pFtWsFct.Create(path, "TempGDB", null, 0); |
|
string TempfilePath = System.IO.Path.Combine(path, "TempGDB.gdb");//临时数据存放路径 |
|
IWorkspaceAPI wsAPI = new WorkspaceAPI(TempfilePath, WorkspaceTypeEnum.GDBFile); |
|
IFeatureClassAPI CZCDYDBGTempFeatureclassAPI = wsAPI.CreateFeatureClass("CZCDYDBGTemp", (JcTbLayer.FeatureClass as IGeoDataset).SpatialReference, JcTbLayer.FeatureClass.Fields); |
|
IFeatureCursor t_cursor = CZCDYDBGTempFeatureclassAPI.FeatureClass.Insert(true); |
|
IFeatureCursor bgqcursor = JcTbLayer.FeatureClass.Search(new QueryFilterClass() { SubFields = "BSM,Shape" }, true); |
|
while ((f = bgqcursor.NextFeature()) != null) |
|
{ |
|
string bsm = f.Value[jcbsmIndex].ToTrim(); |
|
if (!BGQTBBSM.Contains(bsm)) continue; |
|
IFeatureBuffer buf = CZCDYDBGTempFeatureclassAPI.FeatureClass.CreateFeatureBuffer(); |
|
buf.Shape = f.ShapeCopy; |
|
t_cursor.InsertFeature(buf); |
|
} |
|
t_cursor.Flush(); |
|
|
|
GPParamClass gPParamClass = new GPParamClass() |
|
{ |
|
FirstFeatureLayer = new FeatureLayerClass() { FeatureClass = CZCDYDBGTempFeatureclassAPI.FeatureClass }, |
|
OutFeatureClassPath = TempfilePath, |
|
FcName = "ZLBGTB", |
|
IsGetOutPutFeature = true, |
|
GPType = EnumGPType.FcToFc |
|
|
|
}; |
|
IFeatureLayer zlbgTBLayer = null; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref zlbgTBLayer); |
|
gPParamClass = new GPParamClass() |
|
{ |
|
FirstFeatureLayer = zlbgTBLayer, |
|
OutFeatureClassPath = TempfilePath + "\\" + "NewCZCDYD", |
|
IsGetOutPutFeature = true, |
|
GPType = EnumGPType.Dissolve, |
|
|
|
|
|
}; |
|
IFeatureLayer featureLayer = null; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref featureLayer); |
|
|
|
IFeatureClassAPI TempDLTBGXGC = wsAPI.CreateFeatureClass("DLTBGXGC", (GxgcTBLayer.FeatureClass as IGeoDataset).SpatialReference, GxgcTBLayer.FeatureClass.Fields); |
|
IFeatureClassAPI gxgcTbFcAPI = new FeatureClassAPI(GxgcTBLayer.FeatureClass); |
|
IQueryFilter mFilter = new QueryFilterClass(); |
|
mFilter.WhereClause = "ONLYZLBG='1'"; |
|
gxgcTbFcAPI.FcToFc(TempDLTBGXGC.FeatureClass, null, false); |
|
|
|
gPParamClass = new GPParamClass() |
|
{ |
|
FirstFeatureLayer = JcCzcLayer, |
|
SecondFeatureLayer = new FeatureLayerClass() { FeatureClass = TempDLTBGXGC.FeatureClass }, |
|
OutFeatureClassPath = $"{TempfilePath}\\CZC_TBGXGCUnion", |
|
IsGetOutPutFeature = true, |
|
PreserveAttributes = "ALL", |
|
GPType = EnumGPType.Union |
|
}; |
|
IFeatureLayer TempGxgcTBLayer = null; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref TempGxgcTBLayer); |
|
|
|
IFeatureCursor cursor = TempGxgcTBLayer.FeatureClass.Search(null, true); |
|
int idxCZCBSM = TempGxgcTBLayer.FeatureClass.FindField("BSM"); |
|
int idxTBOID = TempGxgcTBLayer.FeatureClass.FindField("FID_DLTBGXGC"); |
|
//int idxBGQZLDWDM = TempGxgcTBLayer.FeatureClass.FindField("BGQZLDWDM"); |
|
int idxBGHZLDWDM = TempGxgcTBLayer.FeatureClass.FindField("BGHZLDWDM"); |
|
//int idxBGQZLDWMC = TempGxgcTBLayer.FeatureClass.FindField("BGQZLDWMC"); |
|
int idxBGHZLDWMC = TempGxgcTBLayer.FeatureClass.FindField("BGHZLDWMC"); |
|
//int idxBGQZLDWMC = TempGxgcTBLayer.FeatureClass.FindField("BGQZLDWMC"); |
|
//int idxBGHZLDWMC = TempGxgcTBLayer.FeatureClass.FindField("BGHZLDWMC"); |
|
IFeature tempF = null; |
|
Dictionary<string, string> bgDic = new Dictionary<string, string>(); |
|
while ((tempF = cursor.NextFeature()) != null) |
|
{ |
|
string strbsm = tempF.Value[idxCZCBSM].ToTrim(); |
|
if (string.IsNullOrWhiteSpace(strbsm)) continue; |
|
int tbOID = tempF.Value[idxTBOID].ToInt(); |
|
if (tbOID == -1) continue; |
|
string bghZLDWDM = tempF.Value[idxBGHZLDWDM].ToTrim(); |
|
string bghZLDWMC = tempF.Value[idxBGHZLDWMC].ToTrim(); |
|
if (!bgDic.ContainsKey(strbsm)) |
|
bgDic.Add(strbsm, bghZLDWDM + "_" + bghZLDWMC); |
|
} |
|
//IFeatureLayer TempGxgcTBLayer = null; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref TempGxgcTBLayer); |
|
//GeoprocessorHelper.DissolveAnalysis(gPParamClass, ref featureLayer, true); |
|
bgqcursor = featureLayer.FeatureClass.Search(null, true); |
|
IFeature bgqF = bgqcursor.NextFeature(); |
|
if (bgqF == null) |
|
{ |
|
//MessageHelper.Show("完成"); |
|
return; |
|
} |
|
BGQDLTBUnion = bgqF.ShapeCopy; |
|
#endregion |
|
|
|
IFeatureClass czcgxgc = GxgcCzcLayer.FeatureClass; |
|
ITable czcgxgcTable = czcgxgc as ITable; |
|
ICursor cur = czcgxgcTable.Search(new QueryFilterClass() { SubFields = "OBJECTID,BGQBSM" }, true); |
|
int bgqbsmIdx = czcgxgcTable.FindField("BGQBSM"); |
|
IRow row = null; |
|
Dictionary<string, List<int>> dicBSM = new Dictionary<string, List<int>>(); |
|
while ((row = cur.NextRow()) != null) |
|
{ |
|
string bgqbsm = row.Value[bgqbsmIdx].ToTrim(); |
|
if (!dicBSM.ContainsKey(bgqbsm)) |
|
{ |
|
dicBSM.Add(bgqbsm, new List<int>() { row.OID }); |
|
} |
|
else |
|
{ |
|
dicBSM[bgqbsm].Add(row.OID); |
|
} |
|
} |
|
IFeatureClass jcCZC = JcCzcLayer.FeatureClass; |
|
IFeatureClass czcgx = GxCzcLayer.FeatureClass; |
|
IFeatureCursor gxgcInsCur = czcgxgc.Insert(true); |
|
IFeatureCursor gxInsCur = czcgx.Insert(true); |
|
IFeatureBuffer gxgcBuf = null; |
|
IFeatureBuffer gxBuf = null; |
|
|
|
Dictionary<int, int> gcFieldMapp = new Dictionary<int, int>(); |
|
for (int i = 0; i < czcgxgc.Fields.FieldCount; i++) |
|
{ |
|
IField field = czcgxgc.Fields.Field[i]; |
|
if (field.Name.ToUpper().Contains("SHAPE") || !field.Editable) continue; |
|
int idx = jcCZC.FindField(field.Name.ToUpper().Replace("BGQ", "").Replace("BGH", "")); |
|
if (idx == -1) continue; |
|
gcFieldMapp.Add(i, idx); |
|
} |
|
Dictionary<int, int> gxFieldMapp = new Dictionary<int, int>(); |
|
for (int i = 0; i < czcgx.Fields.FieldCount; i++) |
|
{ |
|
IField field = czcgx.Fields.Field[i]; |
|
if (field.Name.ToUpper().Contains("SHAPE") || !field.Editable) continue; |
|
int idx = jcCZC.FindField(field.Name); |
|
if (idx == -1) continue; |
|
gxFieldMapp.Add(i, idx); |
|
} |
|
|
|
cursor = jcCZC.Search(new SpatialFilterClass() |
|
{ |
|
WhereClause = "CZCLX<>'201'", |
|
Geometry = BGQDLTBUnion, |
|
SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects |
|
}, true); |
|
f = null; |
|
int bsmIdx = jcCZC.FindField("BSM"); |
|
int bgxwIdx = czcgxgc.FindField("BGXW"); |
|
int bghbsmIdx = czcgxgc.FindField("BGHBSM"); |
|
int bghczclxIdx = czcgxgc.FindField("BGHCZCLX"); |
|
int bghczcdmIdx = czcgxgc.FindField("BGHCZCDM"); |
|
int bghczcmcIdx = czcgxgc.FindField("BGHCZCMC"); |
|
//变更前 |
|
int bgqczclxIdx = czcgxgc.FindField("BGQCZCLX"); |
|
int bgqczcdmIdx = czcgxgc.FindField("BGQCZCDM"); |
|
int bgqczcmcIdx = czcgxgc.FindField("BGQCZCMC"); |
|
int bgmjIdx = czcgxgc.FindField("BGMJ"); |
|
int GXSJIdx = czcgxgc.FindField("GXSJ"); |
|
int czcmjIdx = jcCZC.FindField("CZCMJ"); |
|
|
|
int gxBSMIdx = jcCZC.FindField("BSM"); |
|
int czcdmIdx = jcCZC.FindField("CZCDM"); |
|
int czcmcIdx = jcCZC.FindField("CZCMC"); |
|
int CZCGXSJIdx = czcgx.FindField("GXSJ"); |
|
//List<DataDicTionary> qsDic = pParm.PrjInfo Platform.Instance.DicHelper.GetNoGroupDic(DicTypeEnum.QSDM); |
|
|
|
List<DataDicTionary> qsDic = null; |
|
IRDBHelper rdbHelper = null; |
|
try |
|
{ |
|
rdbHelper = RDBFactory.CreateDbHelper(System.IO.Path.Combine(pParm.PrjInfo.ProjDir, "BGTJ.sqlite"), DatabaseType.SQLite); |
|
DataTable dicDt = rdbHelper.ExecuteDatatable("Dic", string.Format("SELECT * from Sys_Dicdetail where OWNERDIC=1"), 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(); |
|
} |
|
|
|
int JC_DLTBBSM = JcTbLayer.FeatureClass.FindField("BSM"); |
|
string PrjCode = pParm.PrjInfo.CODE; |
|
while ((f = cursor.NextFeature()) != null) |
|
{ |
|
string bsm = f.Value[bsmIdx].ToTrim(); |
|
if (!bgDic.ContainsKey(bsm)) continue; |
|
if (dicBSM.ContainsKey(bsm)) |
|
{ |
|
List<int> gcOIDList = dicBSM[bsm]; |
|
foreach (int gcOID in gcOIDList) |
|
{ |
|
IFeature gcRow = czcgxgc.GetFeature(gcOID); |
|
if (!FeatureAPI.IsInterSect(gcRow.ShapeCopy, BGQDLTBUnion)) continue; |
|
string bghLX = gcRow.Value[bghczclxIdx].ToTrim(); |
|
string bghDM_MC = bgDic[bsm]; |
|
string[] bghAttr = bghDM_MC.Split('_'); |
|
if (bghLX.StartsWith("202")) |
|
{ |
|
if (bghAttr[0].Length < 9) continue; |
|
string dicValue = bgDic[bsm]; |
|
string strCZCDM2 = bghAttr[0].Substring(0, 9).PadRight(19, '0'); |
|
gcRow.Value[bghczcdmIdx] = strCZCDM2; |
|
if (qsDic != null) |
|
{ |
|
DataDicTionary dic = qsDic.FirstOrDefault(qs => qs.CODE == strCZCDM2 || qs.CODE.StartsWith(strCZCDM2.Substring(0, 9))); |
|
if (dic != null) |
|
{ |
|
//strCZCDM2 = dic.NAME; |
|
gcRow.Value[bghczcmcIdx] = dic.NAME; |
|
} |
|
} |
|
} |
|
else if (bghLX.StartsWith("203")) |
|
{ |
|
gcRow.Value[bghczcdmIdx] = bghAttr[0]; |
|
gcRow.Value[bghczcmcIdx] = bghAttr[1]; |
|
} |
|
gcRow.Store(); |
|
} |
|
continue; |
|
} |
|
if (pParm.PrjInfo.XZQDMChange == false) |
|
{ |
|
if (!FeatureAPI.IsInterSect(f.ShapeCopy, BGQDLTBUnion)) continue; |
|
} |
|
|
|
List<IGeometry> BG_ListGeo = new List<IGeometry>(); |
|
List<IGeometry> WBG_ListGeo = new List<IGeometry>(); |
|
|
|
IGeometry geo_BG = FeatureAPI.InterSect(f.ShapeCopy, BGQDLTBUnion); |
|
if (pParm.PrjInfo.XZQDMChange == false && geo_BG.IsEmpty) continue; |
|
BG_ListGeo = FeatureAPI.DissolveGeometryByRing(geo_BG); |
|
|
|
IGeometry geo_WBG = FeatureAPI.Difference(f.ShapeCopy, BGQDLTBUnion); |
|
string tempBGXW = "1"; |
|
double JcCZCMJ = f.Value[czcmjIdx].ToDecimal(2).ToDouble(); |
|
if (!geo_WBG.IsEmpty) |
|
{ |
|
tempBGXW = "2"; |
|
WBG_ListGeo = FeatureAPI.DissolveGeometryByRing(geo_WBG); |
|
} |
|
Dictionary<string, IGeometry> DicAllGeo = new Dictionary<string, IGeometry>(); |
|
Dictionary<int, double> DicMJPC = new Dictionary<int, double>(); |
|
int idxNum = 0; |
|
double zmj = 0; |
|
foreach (var item in BG_ListGeo) |
|
{ |
|
idxNum++; |
|
double mj = JcCZCMJ; |
|
if (tempBGXW == "2") |
|
mj = item.GetEllipseArea().ToDouble(2); |
|
DicMJPC.Add(idxNum, mj); |
|
zmj += mj; |
|
string key = idxNum + "_BG"; |
|
if (!DicAllGeo.ContainsKey(key)) |
|
DicAllGeo.Add(key, item); |
|
} |
|
|
|
foreach (var item in WBG_ListGeo) |
|
{ |
|
idxNum++; |
|
double mj = JcCZCMJ; |
|
if (tempBGXW == "2") |
|
mj = item.GetEllipseArea().ToDouble(2); |
|
DicMJPC.Add(idxNum, mj); |
|
zmj += mj; |
|
string key = idxNum + "_WBG"; |
|
if (!DicAllGeo.ContainsKey(key)) |
|
DicAllGeo.Add(key, item); |
|
} |
|
double mjc = (JcCZCMJ - zmj).ToDouble(2); |
|
if (mjc != 0) |
|
{ |
|
IOrderedEnumerable<KeyValuePair<int, double>> od = DicMJPC.OrderByDescending(o => o.Value); |
|
foreach (var item in od) |
|
{ |
|
DicMJPC[item.Key] = (DicMJPC[item.Key] + mjc).ToDouble(2); |
|
break; |
|
} |
|
} |
|
int changNum = 0; |
|
foreach (var key in DicAllGeo.Keys) |
|
{ |
|
string[] subKey = key.Split('_'); |
|
int idxKey = subKey[0].ToInt(); |
|
double bgmj = DicMJPC[idxKey]; |
|
|
|
if (gxgcBuf == null) |
|
gxgcBuf = czcgxgc.CreateFeatureBuffer(); |
|
//gxgcBuf.Shape = DicAllGeo[key];// f.ShapeCopy; |
|
foreach (KeyValuePair<int, int> idx in gcFieldMapp) |
|
{ |
|
gxgcBuf.Value[idx.Key] = f.Value[idx.Value]; |
|
} |
|
string bghczclx = gxgcBuf.Value[bghczclxIdx].ToTrim(); |
|
string bghczcdm = gxgcBuf.Value[bghczcdmIdx].ToTrim(); |
|
string bghczcmc = gxgcBuf.Value[bghczcmcIdx].ToTrim(); |
|
//变更前 |
|
string bgqczclx = gxgcBuf.Value[bgqczclxIdx].ToTrim(); |
|
string bgqczcdm = gxgcBuf.Value[bgqczcdmIdx].ToTrim(); |
|
string bgqczcmc = gxgcBuf.Value[bgqczcmcIdx].ToTrim(); |
|
|
|
string bgh = bghczcdm + "_" + bghczcmc; |
|
string strCZCDM = bghczcdm; |
|
string strCZCMC = bghczcmc; |
|
if (subKey[1] == "BG") |
|
{ |
|
if (bghczclx == "203" || bghczclx == "203A" || bghczclx == "204" || bghczclx == "205") |
|
{ |
|
string[] zlArr = bgDic[bsm].Split('_'); |
|
strCZCDM = zlArr[0]; |
|
strCZCMC = zlArr[1]; |
|
gxgcBuf.Value[bghczcdmIdx] = zlArr[0]; |
|
gxgcBuf.Value[bghczcmcIdx] = zlArr[1]; |
|
} |
|
else if (bghczclx == "202" || bghczclx == "202A") |
|
{ |
|
string dicValue = bgDic[bsm]; |
|
strCZCDM = dicValue.Substring(0, 9).PadRight(19, '0'); |
|
gxgcBuf.Value[bghczcdmIdx] = strCZCDM; |
|
if (qsDic != null) |
|
{ |
|
DataDicTionary dic = qsDic.FirstOrDefault(qs => qs.CODE == strCZCDM || qs.CODE.StartsWith(strCZCDM.Substring(0, 9))); |
|
if (dic != null) |
|
{ |
|
strCZCMC = dic.NAME; |
|
gxgcBuf.Value[bghczcmcIdx] = strCZCMC; |
|
} |
|
} |
|
if (bgqczcdm == strCZCDM && bgqczcmc == strCZCMC) continue; |
|
} |
|
bghczcdm = gxgcBuf.Value[bghczcdmIdx].ToTrim(); |
|
bghczcmc = gxgcBuf.Value[bghczcmcIdx].ToTrim(); |
|
} |
|
if (bghczcdm.Trim() == bgqczcdm.Trim() && bghczcmc.Trim() == bgqczcmc.Trim())//bghczclx.Trim() == bgqczclx.Trim() && |
|
continue; |
|
changNum++; |
|
} |
|
|
|
if (changNum == 0) continue; |
|
|
|
foreach (var key in DicAllGeo.Keys) |
|
{ |
|
string[] subKey = key.Split('_'); |
|
int idxKey = subKey[0].ToInt(); |
|
double bgmj = DicMJPC[idxKey]; |
|
|
|
if (gxgcBuf == null) |
|
gxgcBuf = czcgxgc.CreateFeatureBuffer(); |
|
gxgcBuf.Shape = DicAllGeo[key];// f.ShapeCopy; |
|
foreach (KeyValuePair<int, int> idx in gcFieldMapp) |
|
{ |
|
gxgcBuf.Value[idx.Key] = f.Value[idx.Value]; |
|
} |
|
string bghczclx = gxgcBuf.Value[bghczclxIdx].ToTrim(); |
|
string bghczcdm = gxgcBuf.Value[bghczcdmIdx].ToTrim(); |
|
string bghczcmc = gxgcBuf.Value[bghczcmcIdx].ToTrim(); |
|
//变更前 |
|
string bgqczclx = gxgcBuf.Value[bgqczclxIdx].ToTrim(); |
|
string bgqczcdm = gxgcBuf.Value[bgqczcdmIdx].ToTrim(); |
|
string bgqczcmc = gxgcBuf.Value[bgqczcmcIdx].ToTrim(); |
|
|
|
string bgh = bghczcdm + "_" + bghczcmc; |
|
string strCZCDM = bghczcdm; |
|
string strCZCMC = bghczcmc; |
|
if (subKey[1] == "BG") |
|
{ |
|
if (bghczclx == "203" || bghczclx == "203A" || bghczclx == "204" || bghczclx == "205") |
|
{ |
|
string[] zlArr = bgDic[bsm].Split('_'); |
|
strCZCDM = zlArr[0]; |
|
strCZCMC = zlArr[1]; |
|
gxgcBuf.Value[bghczcdmIdx] = zlArr[0]; |
|
gxgcBuf.Value[bghczcmcIdx] = zlArr[1]; |
|
} |
|
else if (bghczclx == "202" || bghczclx == "202A") |
|
{ |
|
string dicValue = bgDic[bsm]; |
|
strCZCDM = dicValue.Substring(0, 9).PadRight(19, '0'); |
|
gxgcBuf.Value[bghczcdmIdx] = strCZCDM; |
|
if (qsDic != null) |
|
{ |
|
DataDicTionary dic = qsDic.FirstOrDefault(qs => qs.CODE == strCZCDM || qs.CODE.StartsWith(strCZCDM.Substring(0, 9))); |
|
if (dic != null) |
|
{ |
|
strCZCMC = dic.NAME; |
|
gxgcBuf.Value[bghczcmcIdx] = strCZCMC; |
|
} |
|
} |
|
if (tempBGXW == "1" && bgqczcdm == strCZCDM && bgqczcmc == strCZCMC) continue; |
|
} |
|
bghczcdm = gxgcBuf.Value[bghczcdmIdx].ToTrim(); |
|
bghczcmc = gxgcBuf.Value[bghczcmcIdx].ToTrim(); |
|
} |
|
if (tempBGXW == "1" && bghczclx.Trim() == bgqczclx.Trim() && bghczcdm.Trim() == bgqczcdm.Trim() && bghczcmc.Trim() == bgqczcmc.Trim()) |
|
continue;//前后这三个字段没有前后变化则不插入 |
|
//gxgcBuf.Value[] = ""; |
|
string bghbsm = gxgcBuf.Value[bghbsmIdx].ToTrim(); |
|
if (!bghbsm.StartsWith(PrjCode)) |
|
{ |
|
string strR = bghbsm.Substring(0, 6); |
|
gxgcBuf.Value[bghbsmIdx] = bghbsm.Replace(strR, PrjCode); |
|
} |
|
gxgcBuf.Value[bgxwIdx] = tempBGXW; |
|
gxgcBuf.Value[bgmjIdx] = bgmj;// f.Value[czcmjIdx]; |
|
gxgcBuf.Value[GXSJIdx] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31); |
|
gxgcInsCur.InsertFeature(gxgcBuf); |
|
|
|
//if (gxBuf == null) |
|
// gxBuf = czcgx.CreateFeatureBuffer(); |
|
//gxBuf.Shape = f.ShapeCopy; |
|
//foreach (KeyValuePair<int, int> idx in gxFieldMapp) |
|
//{ |
|
// gxBuf.Value[idx.Key] = f.Value[idx.Value]; |
|
//} |
|
|
|
//string gxbsm = gxBuf.Value[gxBSMIdx].ToTrim(); |
|
//if (!gxbsm.StartsWith(PrjCode)) |
|
//{ |
|
// string strR = gxbsm.Substring(0, 6); |
|
// gxBuf.Value[gxBSMIdx] = gxbsm.Replace(strR, PrjCode); |
|
//} |
|
//gxBuf.Value[czcdmIdx] = strCZCDM; |
|
//gxBuf.Value[czcmcIdx] = strCZCMC; |
|
//gxBuf.Value[CZCGXSJIdx] = time; |
|
//gxInsCur.InsertFeature(gxBuf); |
|
} |
|
} |
|
gxgcInsCur.Flush(); |
|
//gxInsCur.Flush(); |
|
if (pParm.PrjInfo.XZQDMChange == true) |
|
{ |
|
cur = czcgxgcTable.Search(new QueryFilterClass() { SubFields = "BGQBSM" }, true); |
|
bgqbsmIdx = czcgxgcTable.FindField("BGQBSM"); |
|
row = null; |
|
Dictionary<string, int> dicBSM2 = new Dictionary<string, int>(); |
|
while ((row = cur.NextRow()) != null) |
|
{ |
|
string bgqbsm = row.Value[bgqbsmIdx].ToTrim(); |
|
if (!dicBSM2.ContainsKey(bgqbsm)) |
|
{ |
|
dicBSM2.Add(bgqbsm, 0); |
|
} |
|
} |
|
|
|
cursor = jcCZC.Search(null, true); |
|
f = null; |
|
while ((f = cursor.NextFeature()) != null) |
|
{ |
|
string bsm = f.Value[bsmIdx].ToTrim(); |
|
if (dicBSM2.ContainsKey(bsm)) continue; |
|
if (gxgcBuf == null) |
|
gxgcBuf = czcgxgc.CreateFeatureBuffer(); |
|
gxgcBuf.Shape = f.ShapeCopy; |
|
foreach (KeyValuePair<int, int> idx in gcFieldMapp) |
|
{ |
|
gxgcBuf.Value[idx.Key] = f.Value[idx.Value]; |
|
} |
|
string bghbsm = gxgcBuf.Value[bghbsmIdx].ToTrim(); |
|
string bghczclx = gxgcBuf.Value[bghczclxIdx].ToTrim(); |
|
string bghczcdm = gxgcBuf.Value[bghczcdmIdx].ToTrim(); |
|
string bghczcmc = gxgcBuf.Value[bghczcmcIdx].ToTrim(); |
|
//变更前 |
|
string bgqbsm = gxgcBuf.Value[bgqbsmIdx].ToTrim(); |
|
string bgqczclx = gxgcBuf.Value[bgqczclxIdx].ToTrim(); |
|
string bgqczcdm = gxgcBuf.Value[bgqczcdmIdx].ToTrim(); |
|
string bgqczcmc = gxgcBuf.Value[bgqczcmcIdx].ToTrim(); |
|
|
|
bghbsm = gxgcBuf.Value[bghbsmIdx].ToTrim(); |
|
if (!bghbsm.StartsWith(PrjCode)) |
|
{ |
|
string strR = bghbsm.Substring(0, 6); |
|
gxgcBuf.Value[bghbsmIdx] = bghbsm.Replace(strR, PrjCode); |
|
} |
|
if (!bghczcdm.StartsWith(PrjCode)) |
|
{ |
|
string strR = bghczcdm.Substring(0, 6); |
|
gxgcBuf.Value[bghczcdmIdx] = bghczcdm.Replace(strR, PrjCode); |
|
} |
|
gxgcBuf.Value[bgxwIdx] = "1"; |
|
gxgcBuf.Value[bgmjIdx] = f.Value[czcmjIdx]; |
|
gxgcBuf.Value[GXSJIdx] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31); |
|
gxgcInsCur.InsertFeature(gxgcBuf); |
|
|
|
//if (gxBuf == null) |
|
// gxBuf = czcgx.CreateFeatureBuffer(); |
|
//gxBuf.Shape = f.ShapeCopy; |
|
//foreach (KeyValuePair<int, int> idx in gxFieldMapp) |
|
//{ |
|
// gxBuf.Value[idx.Key] = f.Value[idx.Value]; |
|
//} |
|
|
|
//string gxbsm = gxBuf.Value[gxBSMIdx].ToTrim(); |
|
//if (!gxbsm.StartsWith(PrjCode)) |
|
//{ |
|
// string strR = gxbsm.Substring(0, 6); |
|
// gxBuf.Value[gxBSMIdx] = gxbsm.Replace(strR, PrjCode); |
|
//} |
|
//string gxCZCDM = gxBuf.Value[czcdmIdx].ToTrim(); |
|
//if (!gxCZCDM.StartsWith(PrjCode)) |
|
//{ |
|
// string strR = gxCZCDM.Substring(0, 6); |
|
// gxBuf.Value[czcdmIdx] = gxCZCDM.Replace(strR, PrjCode); |
|
//} |
|
////gxBuf.Value[czcdmIdx] = strCZCDM; |
|
////gxBuf.Value[czcmcIdx] = strCZCMC; |
|
//gxBuf.Value[CZCGXSJIdx] = time; |
|
//gxInsCur.InsertFeature(gxBuf); |
|
} |
|
gxgcInsCur.Flush(); |
|
//gxInsCur.Flush(); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
|
|
throw ex; |
|
} |
|
} |
|
private void ResultPress(IFeatureLayer pGxgcLayer, IFeatureLayer pGxLayer) |
|
{ |
|
IFeatureCursor _cursor = null; |
|
try |
|
{ |
|
_cursor = pGxgcLayer.FeatureClass.Search(null, true); |
|
Dictionary<string, int> BgqBSMList = new Dictionary<string, int>(); |
|
Dictionary<string, int> BghBSMList = new Dictionary<string, int>(); |
|
IFeature f = null; |
|
int idxBgqBSM = pGxgcLayer.FeatureClass.FindField("BGQBSM"); |
|
int idxBghBSM = pGxgcLayer.FeatureClass.FindField("BGHBSM"); |
|
while ((f = _cursor.NextFeature()) != null) |
|
{ |
|
string strBgqBSM = f.Value[idxBgqBSM].ToTrim(); |
|
string strBghBSM = f.Value[idxBghBSM].ToTrim(); |
|
if (BgqBSMList.ContainsKey(strBgqBSM)) |
|
BgqBSMList[strBgqBSM] = BgqBSMList[strBgqBSM] + 1; |
|
else |
|
BgqBSMList.Add(strBgqBSM, 1); |
|
|
|
if (BghBSMList.ContainsKey(strBghBSM)) |
|
BghBSMList[strBghBSM] = BghBSMList[strBghBSM] + 1; |
|
else |
|
BghBSMList.Add(strBghBSM, 1); |
|
} |
|
IQueryFilter filter = new QueryFilter(); |
|
filter.WhereClause = "BGQCZCLX = BGHCZCLX and BGQCZCDM = BGHCZCDM and BGQCZCMC = BGHCZCMC"; |
|
_cursor = pGxgcLayer.FeatureClass.Update(filter, true); |
|
int idxBGXW = pGxgcLayer.FeatureClass.FindField("BGXW"); |
|
List<string> DelBSM = new List<string>(); |
|
while ((f = _cursor.NextFeature()) != null) |
|
{ |
|
string strBgqBSM = f.Value[idxBgqBSM].ToTrim(); |
|
string strBghBSM = f.Value[idxBghBSM].ToTrim(); |
|
if (BgqBSMList[strBgqBSM] == 1 && BghBSMList[strBghBSM] == 1) |
|
{ |
|
f.Value[idxBGXW] = "9"; |
|
DelBSM.Add(strBghBSM); |
|
_cursor.UpdateFeature(f); |
|
} |
|
} |
|
_cursor.Flush(); |
|
filter.WhereClause = "BGXW='9'"; |
|
(pGxgcLayer.FeatureClass as ITable).DeleteSearchedRows(filter); |
|
_cursor = pGxLayer.FeatureClass.Update(null, true); |
|
int idxBSM = pGxLayer.FeatureClass.FindField("BSM"); |
|
while ((f = _cursor.NextFeature()) != null) |
|
{ |
|
string strBSM = f.Value[idxBSM].ToTrim(); |
|
if (DelBSM.Contains(strBSM)) |
|
{ |
|
f.Value[idxBSM] = "-1"; |
|
_cursor.UpdateFeature(f); |
|
continue; |
|
} |
|
} |
|
_cursor.Flush(); |
|
filter.WhereClause = "BSM='-1'"; |
|
(pGxLayer.FeatureClass as ITable).DeleteSearchedRows(filter); |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
} |
|
private void GenerateGXGC(IFeatureLayer pGXGCLayer, IFeatureLayer pUnion20XLayer, List<DataDicTionary> pQSDic) |
|
{ |
|
IFeatureCursor S_Cursor = null; |
|
IFeatureCursor T_Cursor = null; |
|
try |
|
{ |
|
IQueryFilter filter = new QueryFilterClass(); |
|
//新增的20范围 |
|
string strWhere = @"FID_CZCDYD = -1 AND CZCSXM IS NOT NULL AND CZCSXM <> ''"; |
|
//filter.WhereClause = strWhere; |
|
// //灭失的20范围 |
|
// strWhere = @"FID_CZCDYD <> -1 AND (CZCSXM IS NULL OR CZCSXM ='')"; |
|
|
|
strWhere = @"(FID_CZCDYD = -1 AND CZCSXM IS NOT NULL AND CZCSXM <> '') OR (FID_CZCDYD <> -1 AND (CZCSXM IS NULL OR CZCSXM =''))"; |
|
|
|
filter.WhereClause = strWhere; |
|
|
|
if (pUnion20XLayer == null) return; |
|
int idx_JCOID, idx_GXOID, idx_JCCZCLX, idx_JCCZCDM, idx_GXCZCLX, idx_GXCZCDM; |
|
idx_JCOID = pUnion20XLayer.FeatureClass.FindField("FID_JC_CZC20X"); |
|
if (idx_JCOID == -1) |
|
idx_JCOID = pUnion20XLayer.FeatureClass.FindField("FID_JC_CZC203"); |
|
if (idx_JCOID == -1) |
|
idx_JCOID = pUnion20XLayer.FeatureClass.FindField("FID_CZCDYD"); |
|
idx_GXOID = pUnion20XLayer.FeatureClass.FindField("FID_CZC20X"); |
|
if (idx_GXOID == -1) |
|
idx_GXOID = pUnion20XLayer.FeatureClass.FindField("FID_CZC203"); |
|
if (idx_GXOID == -1) |
|
idx_GXOID = pUnion20XLayer.FeatureClass.FindField("FID_TempDLTBGX"); |
|
|
|
idx_JCCZCLX = pUnion20XLayer.FeatureClass.FindField("CZCLX"); |
|
idx_JCCZCDM = pUnion20XLayer.FeatureClass.FindField("CZCDM"); |
|
idx_GXCZCDM = pUnion20XLayer.FeatureClass.FindField("ZLDWDM"); |
|
idx_GXCZCLX = pUnion20XLayer.FeatureClass.FindField("CZCSXM"); |
|
|
|
int idx_JCBSM, idx_JCCZCMC, idx_JCCZCMJ; |
|
idx_JCBSM = pUnion20XLayer.FeatureClass.FindField("BSM"); |
|
idx_JCCZCMC = pUnion20XLayer.FeatureClass.FindField("CZCMC"); |
|
idx_JCCZCMJ = pUnion20XLayer.FeatureClass.FindField("CZCMJ"); |
|
|
|
IFeature f = null; |
|
Dictionary<int, int> JcOIDs = new Dictionary<int, int>(); |
|
Dictionary<int, int> GxOIDs = new Dictionary<int, int>(); |
|
List<int> TempOIDList = new List<int>(); |
|
int idxArea = pUnion20XLayer.FeatureClass.FindField("Shape_Area"); |
|
|
|
S_Cursor = pUnion20XLayer.FeatureClass.Search(null, true); |
|
while ((f = S_Cursor.NextFeature()) != null) |
|
{ |
|
if (idx_JCOID == -1 && idx_GXOID == -1) break; |
|
//double area = f.Value[idxArea].ToDecimal(2).ToDouble(); |
|
TempOIDList.Add(f.OID); |
|
int JCOID = idx_JCOID == -1 ? -1 : f.Value[idx_JCOID].ToInt(); |
|
int GXOID = idx_GXOID == -1 ? -1 : f.Value[idx_GXOID].ToInt(); |
|
string BGXW = ""; |
|
if (JCOID != -1) |
|
if (!JcOIDs.ContainsKey(JCOID)) |
|
JcOIDs.Add(JCOID, 1); |
|
else |
|
JcOIDs[JCOID] = JcOIDs[JCOID] + 1; |
|
if (GXOID != -1) |
|
if (!GxOIDs.ContainsKey(GXOID)) |
|
GxOIDs.Add(GXOID, 1); |
|
else |
|
GxOIDs[GXOID] = GxOIDs[GXOID] + 1; |
|
} |
|
S_Cursor = pUnion20XLayer.FeatureClass.Search(filter, true); |
|
|
|
T_Cursor = pGXGCLayer.FeatureClass.Insert(true); |
|
IFeatureBuffer buff = pGXGCLayer.FeatureClass.CreateFeatureBuffer(); |
|
int idx_BGXW, idx_BGQCZCLX, idx_BGQCZCDM, idx_BGHCZCLX, idx_BGQBSM, idx_BGQCZCMC, idx_BGMJ, idx_BGHCZCDM, idx_BGHBSM, idx_BGHCZCMC; |
|
idx_BGXW = buff.Fields.FindField("BGXW"); |
|
idx_BGQCZCLX = buff.Fields.FindField("BGQCZCLX"); |
|
idx_BGQCZCDM = buff.Fields.FindField("BGQCZCDM"); |
|
idx_BGHCZCDM = buff.Fields.FindField("BGHCZCDM"); |
|
idx_BGHCZCLX = buff.Fields.FindField("BGHCZCLX"); |
|
idx_BGQBSM = buff.Fields.FindField("BGQBSM"); |
|
idx_BGHBSM = buff.Fields.FindField("BGHBSM"); |
|
idx_BGQCZCMC = buff.Fields.FindField("BGQCZCMC"); |
|
idx_BGHCZCMC = buff.Fields.FindField("BGHCZCMC"); |
|
idx_BGMJ = buff.Fields.FindField("BGMJ"); |
|
int idxBSM = buff.Fields.FindField("BSM"); |
|
int bsm = 0; |
|
while ((f = S_Cursor.NextFeature()) != null) |
|
{ |
|
int JCOID = idx_JCOID != -1 ? f.Value[idx_JCOID].ToInt() : -1; |
|
int GXOID = idx_GXOID != -1 ? f.Value[idx_GXOID].ToInt() : -1; |
|
string CZCLX = idx_JCCZCLX != -1 ? f.Value[idx_JCCZCLX].ToTrim() : ""; |
|
string CZCSXM = f.Value[idx_GXCZCLX].ToTrim(); |
|
string CZCDM = f.Value[idx_GXCZCDM].ToTrim(); |
|
string JCBSM = idx_JCBSM != -1 ? f.Value[idx_JCBSM].ToTrim() : ""; |
|
string JCCZCDM = idx_JCCZCDM != -1 ? f.Value[idx_JCCZCDM].ToTrim() : ""; |
|
string JCCZCMC = idx_JCCZCMC != -1 ? f.Value[idx_JCCZCMC].ToTrim() : ""; |
|
double BGMJ = 0; |
|
//if (AreaList.ContainsKey(f.OID)) |
|
// BGMJ = AreaList[f.OID]; |
|
//else |
|
string BGXW = JCOID == -1 ? "3" : "0"; |
|
if (BGXW == "0") |
|
{ |
|
CZCSXM = ""; |
|
CZCDM = ""; |
|
if (JcOIDs[JCOID] == 1) |
|
{ |
|
BGMJ = f.Value[idx_JCCZCMJ].ToDouble(); |
|
} |
|
else |
|
{ |
|
BGMJ = f.ShapeCopy.GetEllipseArea(); |
|
} |
|
} |
|
else |
|
{ |
|
BGMJ = f.ShapeCopy.GetEllipseArea(); |
|
} |
|
string BSM = ""; |
|
bsm++; |
|
buff.Shape = f.ShapeCopy; |
|
if (idxBSM != -1) |
|
buff.Value[idxBSM] = pParm.PrjInfo.CODE + "2932" + bsm.ToString().PadLeft(8, '0'); |
|
if (idx_BGXW != -1) |
|
buff.Value[idx_BGXW] = BGXW; |
|
if (idx_BGQCZCLX != -1) |
|
buff.Value[idx_BGQCZCLX] = CZCLX; |
|
if (idx_BGHCZCLX != -1) |
|
buff.Value[idx_BGHCZCLX] = CZCSXM; |
|
if (idx_BGQBSM != -1) |
|
buff.Value[idx_BGQBSM] = JCBSM; |
|
if (idx_BGQCZCDM != -1) |
|
buff.Value[idx_BGQCZCDM] = JCCZCDM; |
|
if (idx_BGQCZCMC != -1) |
|
buff.Value[idx_BGQCZCMC] = JCCZCMC; |
|
if (idx_BGMJ != -1) |
|
buff.Value[idx_BGMJ] = BGMJ; |
|
if (idx_BGHCZCDM != -1) |
|
buff.Value[idx_BGHCZCDM] = CZCDM; |
|
if (idx_BGHBSM != -1) |
|
buff.Value[idx_BGHBSM] = BSM; |
|
if (idx_BGHCZCMC != -1 && !string.IsNullOrWhiteSpace(CZCDM)) |
|
{ |
|
DataDicTionary qs2 = null; |
|
if (pQSDic != null) |
|
{ |
|
qs2 = pQSDic.FirstOrDefault(d => d.CODE == CZCDM.Replace("0000000000000", "") || d.CODE == CZCDM.Replace("0000000000", "")); |
|
} |
|
if (qs2 != null) |
|
{ |
|
buff.Value[idx_BGHCZCMC] = qs2.NAME; |
|
} |
|
} |
|
else |
|
{ |
|
buff.Value[idx_BGHCZCMC] = ""; |
|
} |
|
T_Cursor.InsertFeature(buff); |
|
} |
|
T_Cursor.Flush(); |
|
filter.WhereClause = "FID_CZCDYD <> -1 AND CZCSXM IS NOT NULL AND CZCSXM <>''"; |
|
S_Cursor = pUnion20XLayer.FeatureClass.Search(filter, true); |
|
while ((f = S_Cursor.NextFeature()) != null) |
|
{ |
|
int JCOID = idx_JCOID != -1 ? f.Value[idx_JCOID].ToInt() : -1; |
|
int GXOID = idx_GXOID != -1 ? f.Value[idx_GXOID].ToInt() : -1; |
|
string CZCLX = idx_JCCZCLX != -1 ? f.Value[idx_JCCZCLX].ToTrim() : ""; |
|
string CZCSXM = f.Value[idx_GXCZCLX].ToTrim(); |
|
var bgqCZCDM = f.Value[idx_JCCZCDM].ToTrim(); |
|
var bghCZCDM = f.Value[idx_GXCZCDM].ToTrim(); |
|
string JCBSM = idx_JCBSM != -1 ? f.Value[idx_JCBSM].ToTrim() : ""; |
|
string JCCZCMC = idx_JCCZCMC != -1 ? f.Value[idx_JCCZCMC].ToTrim() : ""; |
|
double JCCZCMJ = idx_JCCZCMJ != -1 ? f.Value[idx_JCCZCMJ].ToDouble() : 0; |
|
double BGMJ = 0;// f.ShapeCopy.GetEllipseArea(); |
|
//if (AreaList.ContainsKey(f.OID)) |
|
// BGMJ = AreaList[f.OID]; |
|
//else |
|
string BGXW = ""; |
|
string BSM = ""; |
|
if (JcOIDs[JCOID] == 1) |
|
{ |
|
BGXW = "1"; |
|
BGMJ = f.Value[idx_JCCZCMJ].ToDouble(); |
|
BSM = JCBSM; |
|
} |
|
else |
|
{ |
|
BGXW = "2"; |
|
BGMJ = f.ShapeCopy.GetEllipseArea(); |
|
} |
|
bsm++; |
|
buff.Shape = f.ShapeCopy; |
|
if (idxBSM != -1) |
|
buff.Value[idxBSM] = pParm.PrjInfo.CODE + "2932" + bsm.ToString().PadLeft(8, '0'); |
|
if (idx_BGXW != -1) |
|
buff.Value[idx_BGXW] = BGXW; |
|
if (idx_BGQCZCLX != -1) |
|
buff.Value[idx_BGQCZCLX] = CZCLX; |
|
if (idx_BGQCZCDM != -1) |
|
buff.Value[idx_BGQCZCDM] = bgqCZCDM; |
|
if (idx_BGHCZCLX != -1) |
|
buff.Value[idx_BGHCZCLX] = CZCSXM; |
|
if (idx_BGQBSM != -1) |
|
buff.Value[idx_BGQBSM] = JCBSM; |
|
if (idx_BGQCZCMC != -1) |
|
buff.Value[idx_BGQCZCMC] = JCCZCMC; |
|
if (idx_BGMJ != -1) |
|
{ |
|
if (BGXW == "1" && JCCZCMJ != 0) |
|
{ |
|
buff.Value[idx_BGMJ] = JCCZCMJ; |
|
} |
|
else |
|
{ |
|
buff.Value[idx_BGMJ] = BGMJ; |
|
} |
|
} |
|
if (idx_BGHCZCDM != -1) |
|
buff.Value[idx_BGHCZCDM] = bghCZCDM; |
|
if (idx_BGHBSM != -1) |
|
buff.Value[idx_BGHBSM] = BSM; |
|
if (idx_BGHCZCMC != -1 && !string.IsNullOrWhiteSpace(bghCZCDM)) |
|
{ |
|
DataDicTionary qs2 = null; |
|
if (pQSDic != null) |
|
{ |
|
qs2 = pQSDic.FirstOrDefault(d => d.CODE == bghCZCDM.Replace("0000000000000", "") || d.CODE == bghCZCDM.Replace("0000000000", "")); |
|
} |
|
if (qs2 != null) |
|
{ |
|
buff.Value[idx_BGHCZCMC] = qs2.NAME; |
|
} |
|
} |
|
T_Cursor.InsertFeature(buff); |
|
} |
|
T_Cursor.Flush(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
|
|
throw ex; |
|
} |
|
finally |
|
{ |
|
if (S_Cursor != null) |
|
Marshal.ReleaseComObject(S_Cursor); |
|
if (T_Cursor != null) |
|
Marshal.ReleaseComObject(T_Cursor); |
|
} |
|
} |
|
|
|
private void GenerateXz203GXGC(IFeatureLayer pGXGCLayer, IFeatureLayer pUnion20XLayer, List<DataDicTionary> pQSDic) |
|
{ |
|
IFeatureCursor S_Cursor = null; |
|
IFeatureCursor T_Cursor = null; |
|
try |
|
{ |
|
IQueryFilter filter = new QueryFilterClass(); |
|
filter.WhereClause = ""; |
|
|
|
if (pUnion20XLayer == null) return; |
|
S_Cursor = pUnion20XLayer.FeatureClass.Search(filter, true); |
|
int idx_GXCZCLX, idx_GXCZCDM; |
|
|
|
idx_GXCZCDM = pUnion20XLayer.FeatureClass.FindField("ZLDWDM"); |
|
idx_GXCZCLX = pUnion20XLayer.FeatureClass.FindField("CZCSXM"); |
|
|
|
IFeature f = null; |
|
Dictionary<int, int> JcOIDs = new Dictionary<int, int>(); |
|
Dictionary<int, int> GxOIDs = new Dictionary<int, int>(); |
|
List<int> TempOIDList = new List<int>(); |
|
int idxArea = pUnion20XLayer.FeatureClass.FindField("Shape_Area"); |
|
|
|
T_Cursor = pGXGCLayer.FeatureClass.Insert(true); |
|
IFeatureBuffer buff = pGXGCLayer.FeatureClass.CreateFeatureBuffer(); |
|
int idx_BGXW, idx_BGQCZCLX, idx_BGHCZCLX, idx_BGQBSM, idx_BGQCZCMC, idx_BGMJ, idx_BGHCZCDM, idx_BGHBSM, idx_BGHCZCMC; |
|
idx_BGXW = buff.Fields.FindField("BGXW"); |
|
idx_BGQCZCLX = buff.Fields.FindField("BGQCZCLX"); |
|
idx_BGHCZCDM = buff.Fields.FindField("BGHCZCDM"); |
|
idx_BGHCZCLX = buff.Fields.FindField("BGHCZCLX"); |
|
idx_BGQBSM = buff.Fields.FindField("BGQBSM"); |
|
idx_BGHBSM = buff.Fields.FindField("BGHBSM"); |
|
idx_BGQCZCMC = buff.Fields.FindField("BGQCZCMC"); |
|
idx_BGHCZCMC = buff.Fields.FindField("BGHCZCMC"); |
|
idx_BGMJ = buff.Fields.FindField("BGMJ"); |
|
int idxBSM = buff.Fields.FindField("BSM"); |
|
int bsm = 0; |
|
while ((f = S_Cursor.NextFeature()) != null) |
|
{ |
|
string CZCSXM = f.Value[idx_GXCZCLX].ToTrim(); |
|
string CZCDM = f.Value[idx_GXCZCDM].ToTrim(); |
|
double BGMJ = 0;// f.ShapeCopy.GetEllipseArea(); |
|
//if (AreaList.ContainsKey(f.OID)) |
|
// BGMJ = AreaList[f.OID]; |
|
//else |
|
BGMJ = f.ShapeCopy.GetEllipseArea(); |
|
if (BGMJ == 0) |
|
continue; |
|
string BGXW = "3"; |
|
string BSM = ""; |
|
buff.Shape = f.ShapeCopy; |
|
bsm++; |
|
if (idxBSM != -1) |
|
buff.Value[idxBSM] = pParm.PrjInfo.CODE + "2932" + bsm.ToString().PadLeft(8, '0'); |
|
if (idx_BGXW != -1) |
|
buff.Value[idx_BGXW] = BGXW; |
|
if (idx_BGHCZCLX != -1) |
|
buff.Value[idx_BGHCZCLX] = CZCSXM; |
|
if (idx_BGMJ != -1) |
|
buff.Value[idx_BGMJ] = BGMJ; |
|
if (idx_BGHCZCDM != -1) |
|
buff.Value[idx_BGHCZCDM] = CZCDM; |
|
if (idx_BGHBSM != -1) |
|
buff.Value[idx_BGHBSM] = BSM; |
|
if (idx_BGHCZCMC != -1 && !string.IsNullOrWhiteSpace(CZCDM)) |
|
{ |
|
DataDicTionary qs2 = null; |
|
if (pQSDic != null) |
|
{ |
|
qs2 = pQSDic.FirstOrDefault(d => d.CODE == CZCDM.Replace("0000000000000", "") || d.CODE == CZCDM.Replace("0000000000", "")); |
|
} |
|
if (qs2 != null) |
|
{ |
|
buff.Value[idx_BGHCZCMC] = qs2.NAME; |
|
} |
|
} |
|
T_Cursor.InsertFeature(buff); |
|
} |
|
T_Cursor.Flush(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
|
|
throw ex; |
|
} |
|
finally |
|
{ |
|
if (S_Cursor != null) |
|
Marshal.ReleaseComObject(S_Cursor); |
|
if (T_Cursor != null) |
|
Marshal.ReleaseComObject(T_Cursor); |
|
} |
|
} |
|
|
|
private void GenerateGX(IFeatureLayer pGxgcLayer, IFeatureLayer pGXLayer) |
|
{ |
|
IFeatureCursor S_Cursor = null; |
|
IFeatureCursor T_Cursor = null; |
|
try |
|
{ |
|
IFeatureLayer DissoveLayer = null; |
|
GPParamClass gPParamClass = new GPParamClass(); |
|
|
|
{ |
|
gPParamClass.FirstFeatureLayer = pGxgcLayer; |
|
gPParamClass.GPType = EnumGPType.CZCBG; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
//gPParamClass.Where_clause = "BGXW <> '3' or (BGHCZCLX <> '203' and BGHCZCLX <> '203A')"; |
|
|
|
gPParamClass.FcName = "TempCZCGX"; |
|
gPParamClass.TempGDBPath = TempGDBPath; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref DissoveLayer); |
|
} |
|
{ |
|
|
|
////非新增203范围 |
|
//IFeatureLayer Fxz203Layer = null; |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = pGxgcLayer; |
|
//gPParamClass.GPType = EnumGPType.SelectLayerByAttribute; |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//gPParamClass.Where_clause = "BGXW <> '3' or (BGHCZCLX <> '203' and BGHCZCLX <> '203A')"; |
|
//gPParamClass.FcName = "FXZ203"; |
|
//gPParamClass.TempGDBPath = TempGDBPath; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref Fxz203Layer); |
|
|
|
////新增203范围 |
|
//IFeatureLayer xz203Layer = null; |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = pGxgcLayer; |
|
//gPParamClass.GPType = EnumGPType.SelectLayerByAttribute; |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//gPParamClass.Where_clause = "BGXW = '3' and (BGHCZCLX = '203' or BGHCZCLX = '203A')"; |
|
//gPParamClass.FcName = "XZ203FW"; |
|
//gPParamClass.TempGDBPath = TempGDBPath; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref xz203Layer); |
|
|
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = Fxz203Layer; |
|
//gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\Fxz203GX_Dissolve"; |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//gPParamClass.ListDissolveFiledName = new List<string>() { "BGHCZCLX", "BGHCZCDM", "BGHCZCMC" }; |
|
//gPParamClass.GPType = EnumGPType.Dissolve; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref DissoveLayer); |
|
|
|
//IFeatureLayer GxXz203Layer = null; |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = xz203Layer; |
|
//gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\Xz203GX_Dissolve"; |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//gPParamClass.ListDissolveFiledName = new List<string>() { "BGHCZCLX", "BGHCZCDM", "BGHCZCMC" }; |
|
//gPParamClass.GPType = EnumGPType.Dissolve; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref GxXz203Layer); |
|
//IFeatureClassAPI fcAPI = new FeatureClassAPI(GxXz203Layer.FeatureClass); |
|
//fcAPI.FcToFc(DissoveLayer.FeatureClass, null, false); |
|
} |
|
|
|
IQueryFilter filter = new QueryFilter(); |
|
filter.WhereClause = "BGHCZCLX IS NOT NULL and BGHCZCLX <> ''"; |
|
S_Cursor = DissoveLayer.FeatureClass.Search(filter, true); |
|
int idx_BGHCZCLX, idx_BGHCZCDM, idx_BGHCZCMC; |
|
|
|
idx_BGHCZCLX = DissoveLayer.FeatureClass.FindField("BGHCZCLX"); |
|
idx_BGHCZCDM = DissoveLayer.FeatureClass.FindField("BGHCZCDM"); |
|
idx_BGHCZCMC = DissoveLayer.FeatureClass.FindField("BGHCZCMC"); |
|
//idx_BGHBSM = DissoveLayer.FeatureClass.FindField("BGHBSM"); |
|
IFeature f = null; |
|
|
|
//(pGXLayer.FeatureClass as ITable).DeleteSearchedRows(null); |
|
int idx_CZCLX, idx_CZCDM, idx_CZCMC, idx_BSM; |
|
T_Cursor = pGXLayer.FeatureClass.Insert(true); |
|
IFeatureBuffer buff = pGXLayer.FeatureClass.CreateFeatureBuffer(); |
|
idx_CZCLX = buff.Fields.FindField("CZCLX"); |
|
idx_CZCDM = buff.Fields.FindField("CZCDM"); |
|
idx_CZCMC = buff.Fields.FindField("CZCMC"); |
|
idx_BSM = buff.Fields.FindField("BSM"); |
|
int idxYSDM = buff.Fields.FindField("YSDM"); |
|
while ((f = S_Cursor.NextFeature()) != null) |
|
{ |
|
string CZCLX = f.Value[idx_BGHCZCLX].ToTrim(); |
|
string CZCDM = f.Value[idx_BGHCZCDM].ToTrim(); |
|
string CZCMC = f.Value[idx_BGHCZCMC].ToTrim(); |
|
buff.Shape = f.ShapeCopy; |
|
if (idxYSDM != -1) |
|
buff.Value[idxYSDM] = "2099030100"; |
|
if (idx_CZCLX != -1) |
|
buff.Value[idx_CZCLX] = CZCLX; |
|
if (idx_CZCDM != -1) |
|
buff.Value[idx_CZCDM] = CZCDM; |
|
if (idx_CZCMC != -1) |
|
buff.Value[idx_CZCMC] = CZCMC; |
|
T_Cursor.InsertFeature(buff); |
|
} |
|
T_Cursor.Flush(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
finally |
|
{ |
|
if (S_Cursor != null) |
|
Marshal.ReleaseComObject(S_Cursor); |
|
if (T_Cursor != null) |
|
Marshal.ReleaseComObject(T_Cursor); |
|
} |
|
} |
|
|
|
private void SetAttribute(IFeatureLayer pGxgcLaeyr, IFeatureLayer pGxLayer, IFeatureLayer pJcCzcLayer) |
|
{ |
|
try |
|
{ |
|
IRDBHelper rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + TempDBPath, DatabaseType.SQLite); |
|
IFeatureLayer Temp_UnionLayer = null; |
|
GPParamClass paramClass = new GPParamClass() |
|
{ |
|
FirstFeatureLayer = pGxLayer, |
|
SecondFeatureLayer = pGxgcLaeyr, |
|
OutFeatureClassPath = $"{TempGDBPath}\\GX_GXGCUnion", |
|
IsGetOutPutFeature = true, |
|
PreserveAttributes = "ALL", |
|
GPType = EnumGPType.Union |
|
}; |
|
GPHelper.Instance.ExeGPForProces(paramClass, ref Temp_UnionLayer); |
|
|
|
IFeatureCursor jcCursor = pJcCzcLayer.FeatureClass.Search(null, true); |
|
IFeature f = null; |
|
int idxCZCMJ = pJcCzcLayer.FeatureClass.FindField("CZCMJ"); |
|
int idxBSM = pJcCzcLayer.FeatureClass.FindField("BSM"); |
|
Dictionary<string, double> dicJcMJs = new Dictionary<string, double>(); |
|
|
|
IWorkspace ws = (Temp_UnionLayer.FeatureClass as FeatureClass).Workspace; |
|
rdbHelper.ExecuteSQL(" drop table GX_GXGCUnion "); |
|
|
|
IWorkspace pOutWork = CreateDBWorkspace(TempDBPath); |
|
TableToTable(ws as IFeatureWorkspace, pOutWork, "GX_GXGCUnion"); |
|
|
|
DataTable dtBgqBSM = rdbHelper.ExecuteDatatable("bgq", "select bgqbsm from gx_gxgcUnion where bgqbsm <> '' group by bgqbsm HAVING count(bgqbsm)>1", true); |
|
dtBgqBSM.PrimaryKey = new DataColumn[] { dtBgqBSM.Columns[0] }; |
|
|
|
IFeatureCursor gcCursor = Temp_UnionLayer.FeatureClass.Update(null, true); |
|
int idxBGMJ = Temp_UnionLayer.FeatureClass.FindField("BGMJ"); |
|
int idxBGQBSM = Temp_UnionLayer.FeatureClass.FindField("BGQBSM"); |
|
while ((f = gcCursor.NextFeature()) != null) |
|
{ |
|
string strBGQBSM = f.Value[idxBGQBSM].ToTrim(); |
|
if (!dtBgqBSM.Rows.Contains(strBGQBSM)) continue; |
|
if (!dicJcMJs.ContainsKey(strBGQBSM)) |
|
dicJcMJs.Add(strBGQBSM, 0); |
|
f.Value[idxBGMJ] = f.ShapeCopy.GetEllipseArea(); |
|
gcCursor.UpdateFeature(f); |
|
} |
|
gcCursor.Flush(); |
|
rdbHelper.ExecuteSQL(" drop table GX_GXGCUnion "); |
|
TableToTable(ws as IFeatureWorkspace, pOutWork, "GX_GXGCUnion"); |
|
while ((f = jcCursor.NextFeature()) != null) |
|
{ |
|
string s = (pJcCzcLayer.FeatureClass as FeatureClass).Workspace.PathName; |
|
string bsm = f.Value[idxBSM].ToTrim(); |
|
double area = f.Value[idxCZCMJ].ToDecimal(2).ToDouble();//.ToDouble(2); |
|
if (!dicJcMJs.ContainsKey(bsm)) |
|
{ |
|
continue; |
|
} |
|
dicJcMJs[bsm] = area;// (area - dicJcMJs[bsm]).ToDouble(2); |
|
} |
|
DataTable GX_GXGCUnion = rdbHelper.ExecuteDatatable("tab", "select FID_CZCDYDGX,FID_CZCDYDGXGC,BGQBSM,BGMJ,BGXW,BGHBSM from GX_GXGCUnion order by bgmj desc", true); |
|
foreach (string itemBSM in dicJcMJs.Keys) |
|
{ |
|
List<Adjustment> shpList = new List<Adjustment>(); |
|
var rows = GX_GXGCUnion.Select($"BGQBSM ='{itemBSM}'"); |
|
var bgxw_0 = false; |
|
var bgmj_0 = false; |
|
foreach (var item in rows) |
|
{ |
|
Adjustment adj = new Adjustment(); |
|
adj.ID = item["FID_CZCDYDGXGC"].ToInt(); |
|
bgxw_0 = item["BGXW"].ToTrim() == "0" ? true : false; |
|
bgmj_0 = item["BGMJ"].ToTrim() == "0" ? true : false; |
|
if (AreaList.ContainsKey(adj.ID)) |
|
adj.bgmj = AreaList[adj.ID]; |
|
else |
|
adj.bgmj = item["BGMJ"].ToDouble(); |
|
shpList.Add(adj); |
|
} |
|
if (shpList.Count > 0) |
|
{ |
|
AreaAdjustment(shpList, dicJcMJs[itemBSM]);//面积平差 |
|
foreach (var item in shpList) |
|
{ |
|
DataRow upRow = rows.FirstOrDefault(r => r["FID_CZCDYDGXGC"].ToInt() == item.ID); |
|
if (upRow != null) |
|
{ |
|
upRow.BeginEdit(); |
|
upRow["BGMJ"] = item.bgmj; |
|
upRow.EndEdit(); |
|
} |
|
} |
|
#region 灭失的 面积为0的数据 将面积为0的面积修改为0.01 相同变更前标识码的面积最大的减去0.01 |
|
if (bgxw_0 && bgmj_0) |
|
{ |
|
bool iscontinue = false; |
|
foreach (var item in shpList) |
|
{ |
|
DataRow upRow = rows.FirstOrDefault(r => r["FID_CZCDYDGXGC"].ToInt() == item.ID); |
|
if (upRow != null) |
|
{ |
|
upRow.BeginEdit(); |
|
if (item.bgmj == 0) |
|
{ |
|
upRow["BGMJ"] = 0.01; |
|
upRow.EndEdit(); |
|
continue; |
|
} |
|
else |
|
{ |
|
if (iscontinue) continue; |
|
upRow["BGMJ"] = item.bgmj - 0.01; |
|
upRow.EndEdit(); |
|
iscontinue = true; |
|
} |
|
} |
|
} |
|
} |
|
#endregion |
|
} |
|
} |
|
|
|
Dictionary<int, int> gxIDCount = new Dictionary<int, int>(); |
|
foreach (DataRow dr in GX_GXGCUnion.Rows) |
|
{ |
|
int gxID = dr["FID_CZCDYDGX"].ToInt(); |
|
if (gxIDCount.ContainsKey(gxID)) |
|
gxIDCount[gxID] = gxIDCount[gxID] + 1; |
|
else |
|
gxIDCount.Add(gxID, 1); |
|
} |
|
Dictionary<int, string> bsmDic = new Dictionary<int, string>(); |
|
Dictionary<int, int> OIDdic = new Dictionary<int, int>(); |
|
var strBSM = GetMaxBSM(new List<IFeatureClass>() { _jcCzcLayer.FeatureClass }); |
|
if (string.IsNullOrEmpty(strBSM)) |
|
strBSM = pParm.PrjInfo.CODE + "2931"; |
|
List<string> newBsmList = new List<string>(); |
|
Dictionary<int, double> DicBGMJ = new Dictionary<int, double>(); |
|
List<int> TXBG = new List<int>(); |
|
foreach (DataRow item in GX_GXGCUnion.Rows) |
|
{ |
|
int gxID = item["FID_CZCDYDGX"].ToInt(); |
|
int gxgcID = item["FID_CZCDYDGXGC"].ToInt(); |
|
string bgxw = item["BGXW"].ToString(); |
|
string bgqBSM = item["BGQBSM"].ToTrim(); |
|
if (!DicBGMJ.ContainsKey(gxgcID)) |
|
DicBGMJ.Add(gxgcID, item["BGMJ"].ToDouble()); |
|
if (!bsmDic.ContainsKey(gxID)) |
|
{ |
|
if (bgxw == "2" || bgxw == "3" || gxIDCount[gxID] > 1) |
|
{ |
|
var strbsm = strBSM.Substring(0, 10); |
|
var Maxbsm = strBSM.Substring(10).ToInt() + 1; |
|
strBSM = strbsm + Maxbsm.ToString().PadLeft(8, '0');//最新标识码 |
|
bsmDic.Add(gxID, strBSM); |
|
if (!newBsmList.Contains(strBSM)) |
|
newBsmList.Add(strBSM); |
|
if (bgxw == "1" && !TXBG.Contains(gxgcID)) |
|
{ |
|
TXBG.Add(gxgcID); |
|
} |
|
} |
|
else |
|
{ |
|
string strGXBSM = item["BGHBSM"].ToTrim(); |
|
if (!strGXBSM.StartsWith(pParm.PrjInfo.CODE) || !bgqBSM.StartsWith(pParm.PrjInfo.CODE)) |
|
{ |
|
var strbsm = strBSM.Substring(0, 10); |
|
var Maxbsm = strBSM.Substring(10).ToInt() + 1; |
|
strBSM = strbsm + Maxbsm.ToString().PadLeft(8, '0');//最新标识码 |
|
bsmDic.Add(gxID, strBSM); |
|
} |
|
else |
|
{ |
|
bsmDic.Add(gxID, item["BGHBSM"].ToString()); |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
if (bgxw == "1" && !TXBG.Contains(gxgcID)) |
|
{ |
|
TXBG.Add(gxgcID); |
|
} |
|
} |
|
if (!OIDdic.ContainsKey(gxgcID)) |
|
{ |
|
OIDdic.Add(gxgcID, gxID); |
|
} |
|
|
|
} |
|
IFeatureCursor pCursor = pGxLayer.FeatureClass.Update(null, true); |
|
var _index_BSM = pGxLayer.FeatureClass.FindField("BSM"); |
|
var _index_YSDM = pGxLayer.FeatureClass.FindField("YSDM");//2001010100 |
|
var _index_TBMJ = pGxLayer.FeatureClass.FindField("CZCMJ"); |
|
var igx_gxsj = pGxLayer.FeatureClass.FindField("GXSJ"); |
|
IFeature feature = null; |
|
while ((feature = pCursor.NextFeature()) != null) |
|
{ |
|
int oid = feature.OID; |
|
if (bsmDic.ContainsKey(oid)) |
|
{ |
|
string arr = bsmDic[oid]; |
|
feature.Value[_index_BSM] = arr; |
|
|
|
} |
|
feature.Value[_index_YSDM] = "2099030100";//要素代码 |
|
DataRow[] row = GX_GXGCUnion.Select($"FID_CZCDYDGX={feature.OID}"); |
|
double mj = 0.00; |
|
if (row.Length > 0) |
|
{ |
|
//string gxgcid = string.Join(" or ", row.Select(r => $"OBJECTID = {r["FID_CZCDYDGXGC"].ToString()}")).ToString(); |
|
mj = row.Select(r => r["BGMJ"].ToDouble()).Sum().ToDouble(); |
|
} |
|
feature.Value[_index_TBMJ] = mj; |
|
feature.Value[igx_gxsj] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31); |
|
pCursor.UpdateFeature(feature); |
|
} |
|
pCursor.Flush(); |
|
pCursor = pGxgcLaeyr.FeatureClass.Update(null, true); |
|
int iBGHTBBSM = pGxgcLaeyr.FeatureClass.FindField("BGHBSM"); |
|
int idxBGXW = pGxgcLaeyr.FeatureClass.FindField("BGXW"); |
|
int idxGXSJ = pGxgcLaeyr.FeatureClass.FindField("GXSJ"); |
|
idxBGMJ = pGxgcLaeyr.FeatureClass.FindField("BGMJ"); |
|
int idxGcBSM = pGxgcLaeyr.FeatureClass.FindField("BSM"); |
|
int tempBsm = 0; |
|
while ((feature = pCursor.NextFeature()) != null) |
|
{ |
|
var bgxw = idxBGXW != -1 ? feature.Value[idxBGXW].ToTrim() : ""; |
|
int oid = feature.OID; |
|
if (oid == 121 || bgxw == "0") |
|
{ |
|
} |
|
if (idxGcBSM != -1) |
|
{ |
|
tempBsm++; |
|
feature.Value[idxGcBSM] = pParm.PrjInfo.CODE + "2932" + tempBsm.ToString().PadLeft(8, '0'); ; |
|
} |
|
if (DicBGMJ.ContainsKey(oid)) |
|
{ |
|
feature.Value[idxBGMJ] = DicBGMJ[oid].ToDouble(); |
|
} |
|
if (OIDdic.ContainsKey(oid)) |
|
{ |
|
int gxOID = OIDdic[oid]; |
|
if (gxOID == -1) |
|
{ |
|
feature.Value[iBGHTBBSM] = ""; |
|
if ((idxBGXW != -1 && bgxw != "2" && bgxw != "3" && bgxw != "0") || TXBG.Contains(oid)) |
|
{ |
|
feature.Value[idxBGXW] = "2"; |
|
} |
|
} |
|
else |
|
if (bsmDic.ContainsKey(gxOID)) |
|
{ |
|
string arr = bsmDic[gxOID]; |
|
feature.Value[iBGHTBBSM] = arr; |
|
if ((newBsmList.Contains(arr) && idxBGXW != -1 && bgxw != "2" && bgxw != "3" && bgxw != "0") || TXBG.Contains(oid)) |
|
{ |
|
feature.Value[idxBGXW] = "2"; |
|
} |
|
} |
|
} |
|
if (bgxw == "0") |
|
{ |
|
feature.Value[iBGHTBBSM] = ""; |
|
} |
|
feature.Value[idxGXSJ] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31); |
|
pCursor.UpdateFeature(feature); |
|
} |
|
pCursor.Flush(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
Console.WriteLine("Err:城镇村属性赋值错误:" + ex.Message + ex.StackTrace); |
|
throw ex; |
|
} |
|
} |
|
public void AreaAdjustment(List<Adjustment> 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); |
|
if (Math.Abs(mjc) > 100) |
|
throw new Exception($"控制面积与图形面积差值较大,请先核对数据是否正确({mjc})"); |
|
//平差 |
|
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 (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(Math.Round(shpList.Sum(s => s.bgmj), 2) - pKZMJ, 2); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//LogAPI.Debug("面积平差错误:" + ex.Message); |
|
throw ex; |
|
} |
|
} |
|
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) |
|
{ |
|
|
|
throw; |
|
} |
|
} |
|
|
|
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) |
|
{ |
|
//LogAPI.Debug(ex); |
|
throw ex; |
|
} |
|
} |
|
public void RepairGeo(IFeatureClass pFc) |
|
{ |
|
Geoprocessor gp = new Geoprocessor(); |
|
try |
|
{ |
|
RepairGeometry repairgeo = new RepairGeometry(); |
|
repairgeo.in_features = pFc; |
|
//repairgeo.out_feature_class = outFC; |
|
repairgeo.delete_null = "TRUE"; |
|
IGeoProcessorResult tGeoResult = (IGeoProcessorResult)gp.Execute(repairgeo, null); |
|
if (tGeoResult == null || tGeoResult.Status != esriJobStatus.esriJobSucceeded) |
|
{ |
|
//LogAPI.Debug("检查图形失败:"); |
|
throw new Exception(ReturnMessages(gp)); |
|
} |
|
string msg = ReturnMessages(gp); |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw new Exception(ReturnMessages(gp)); |
|
} |
|
} |
|
private string ReturnMessages(Geoprocessor gp) |
|
{ |
|
string ms = ""; |
|
if (gp.MessageCount > 0) |
|
{ |
|
for (int Count = 0; Count <= gp.MessageCount - 1; Count++) |
|
{ |
|
ms += "$" + gp.GetMessage(Count) + "\n\n"; |
|
} |
|
} |
|
return ms; |
|
} |
|
private void Get20XDLTB(IFeatureLayer pJCTBLayer, IFeatureLayer pGXTBLayer, IFeatureLayer pJCCZCLayer, ref IFeatureLayer Union20XLayer, ref IFeatureLayer Union203Layer) |
|
{ |
|
try |
|
{ |
|
//IFeatureLayer Xz203Layer = null; |
|
GPParamClass gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = pJCCZCLayer; |
|
gPParamClass.SecondFeatureLayer = pGXTBLayer; |
|
gPParamClass.XZQDM = pParm.PrjInfo.CODE; |
|
gPParamClass.GPType = EnumGPType.CZCYCL; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.FcName = "Xz203"; |
|
gPParamClass.TempGDBPath = TempGDBPath; |
|
|
|
//Console.WriteLine("Log:7-1..."); |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref Union203Layer); |
|
|
|
//Console.WriteLine("Log:7-2..."); |
|
IWorkspaceAPI wsAPI = new WorkspaceAPI(TempGDBPath, WorkspaceTypeEnum.GDBFile); |
|
IFeatureClassAPI fcAPI = wsAPI.OpenFeatureClass("JC20X_20X"); |
|
Union20XLayer = new FeatureLayerClass() { FeatureClass = fcAPI.FeatureClass }; |
|
|
|
IFeatureLayer tempLayer = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = Union20XLayer; |
|
gPParamClass.GPType = EnumGPType.Default; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref tempLayer); |
|
|
|
//IWorkspaceAPI wsAPI = new WorkspaceAPI(TempGDBPath, WorkspaceTypeEnum.GDBFile); |
|
//IFeatureClassAPI fcAPI = wsAPI.OpenFeatureClass("JC20X_20X_U"); |
|
//IFeatureLayer tempLayer2 = null; |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = new FeatureLayerClass() { FeatureClass = fcAPI.FeatureClass }; |
|
//gPParamClass.GPType = EnumGPType.Default; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref tempLayer2); |
|
|
|
////Console.WriteLine("Log:7-2..."); |
|
|
|
//IFeatureLayer tempLayer = null; |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = new FeatureLayerClass() { FeatureClass = fcAPI.FeatureClass }; |
|
//gPParamClass.GPType = EnumGPType.Dissolve; |
|
//gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\JC20X_U_Dissolve"; |
|
//gPParamClass.ListDissolveFiledName = new List<string>() { "FID_CZCDYD", "CZCLX", "BSM", "CZCDM", "CZCMC", "CZCMJ", "ZLDWDM", "CZCSXM" }; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref tempLayer); |
|
//Union20XLayer = tempLayer;// new FeatureLayerClass() { FeatureClass = fcAPI.FeatureClass }; |
|
|
|
return; |
|
//新增203范围 |
|
//IFeatureLayer Xz203Layer = null; |
|
#region 获取新增203范围(注:新增203与原有203不合并) |
|
|
|
IFeatureLayer dltbgx203 = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = pGXTBLayer; |
|
gPParamClass.GPType = EnumGPType.SelectLayerByAttribute; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.Where_clause = "CZCSXM = '203' or CZCSXM = '203A'"; |
|
gPParamClass.FcName = "DLTBGX203"; |
|
gPParamClass.TempGDBPath = TempGDBPath; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref dltbgx203); |
|
|
|
IFeatureLayer Xz203Layer_s = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = dltbgx203; |
|
gPParamClass.SecondFeatureLayer = pJCCZCLayer; |
|
gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\Xz203_s"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.GPType = EnumGPType.Erase; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref Xz203Layer_s); |
|
|
|
|
|
IFeatureLayer Xz203Layer_m = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = Xz203Layer_s; |
|
gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\Xz203_m"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.ListDissolveFiledName = new List<string>() { "ZLDWDM", "CZCSXM" }; |
|
gPParamClass.GPType = EnumGPType.Dissolve; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref Xz203Layer_m); |
|
|
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = Xz203Layer_m; |
|
gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\Xz203"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.GPType = EnumGPType.MultipartToSinglePath; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref Union203Layer); |
|
|
|
#endregion |
|
|
|
//地类图斑更新层(不含新增203范围) |
|
IFeatureLayer TempGxTBLayer = null; |
|
#region 获取地类图斑更新层(不含新增203范围) |
|
IFeatureLayer AllGxTBLayer = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = pGXTBLayer; |
|
gPParamClass.OutFeatureClassPath = TempGDBPath; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.ListDissolveFiledName = new List<string>(); |
|
gPParamClass.FcName = "AllDLTBGX"; |
|
gPParamClass.GPType = EnumGPType.FcToFc; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref AllGxTBLayer); |
|
|
|
IFeatureLayer TempGxTB_ELayer = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = AllGxTBLayer; |
|
gPParamClass.SecondFeatureLayer = Union203Layer; |
|
gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\TempDLTBGX_E"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.GPType = EnumGPType.Erase; |
|
//gPParamClass.FcName="" |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref TempGxTB_ELayer); |
|
|
|
|
|
//IFeatureLayer Xz203Layer_m = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = TempGxTB_ELayer; |
|
gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\TempDLTBGX"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.ListDissolveFiledName = new List<string>() { "ZLDWDM", "CZCSXM" }; |
|
gPParamClass.GPType = EnumGPType.Dissolve; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref TempGxTBLayer); |
|
#endregion |
|
|
|
IFeatureLayer TempJcCzcLayer = null; |
|
gPParamClass = new GPParamClass(); |
|
//gPParamClass.Tolerance = "-0.001"; |
|
gPParamClass.FirstFeatureLayer = pJCCZCLayer; |
|
gPParamClass.SecondFeatureLayer = pGXTBLayer; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.GPType = EnumGPType.SelectLayerByLocation; |
|
gPParamClass.Overlap_type = "INTERSECT"; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref TempJcCzcLayer); |
|
|
|
IFeatureLayer TempGcLayer = null; |
|
gPParamClass = new GPParamClass() |
|
{ |
|
FirstFeatureLayer = TempJcCzcLayer, |
|
SecondFeatureLayer = TempGxTBLayer, |
|
OutFeatureClassPath = $"{TempGDBPath}\\JC20X_20X_U", |
|
IsGetOutPutFeature = true, |
|
PreserveAttributes = "ALL", |
|
GPType = EnumGPType.Union |
|
}; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref TempGcLayer); |
|
|
|
{ |
|
IFeatureCursor cursor = TempGcLayer.FeatureClass.Update(null, true); |
|
IFeature f = null; |
|
int idx = TempGcLayer.FeatureClass.FindField("FID_TempDLTBGX"); |
|
int idxCZCSXM = TempGcLayer.FeatureClass.FindField("CZCSXM"); |
|
int idxCZCLX = TempGcLayer.FeatureClass.FindField("CZCLX"); |
|
int idxCZCDM = TempGcLayer.FeatureClass.FindField("CZCDM"); |
|
int idxZLDWDM = TempGcLayer.FeatureClass.FindField("ZLDWDM"); |
|
while ((f = cursor.NextFeature()) != null) |
|
{ |
|
int gxID = f.Value[idx].ToInt(); |
|
if (gxID == 3373) |
|
{ |
|
} |
|
if (gxID == -1) |
|
{ |
|
f.Value[idxCZCSXM] = f.Value[idxCZCLX]; |
|
f.Value[idxZLDWDM] = f.Value[idxCZCDM]; |
|
f.Value[idx] = -2; |
|
} |
|
var czclx = f.Value[idxCZCSXM].ToTrim(); |
|
var zldwdm = f.Value[idxZLDWDM].ToTrim(); |
|
if (czclx.StartsWith("201")) |
|
{ |
|
f.Value[idxZLDWDM] = pParm.PrjInfo.CODE + "0000000000000"; |
|
} |
|
else if (czclx.StartsWith("202")) |
|
{ |
|
f.Value[idxZLDWDM] = zldwdm.Substring(0, 9) + "0000000000"; |
|
} |
|
cursor.UpdateFeature(f); |
|
} |
|
cursor.Flush(); |
|
} |
|
|
|
IFeatureLayer TempGcLayer_M = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = TempGcLayer; |
|
gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\JC20X_20X_M"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.ListDissolveFiledName = new List<string>() { "FID_CZCDYD", "CZCLX", "BSM", "CZCDM", "CZCMC", "CZCMJ", "ZLDWDM", "CZCSXM" }; |
|
gPParamClass.GPType = EnumGPType.Dissolve; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref TempGcLayer_M); |
|
|
|
|
|
//IFeatureLayer TempTempGcLayer_M = null; |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = AllGxTBLayer; |
|
//gPParamClass.SecondFeatureLayer = Union203Layer; |
|
//gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\TempJC20X_20X_M"; |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//gPParamClass.GPType = EnumGPType.Erase; |
|
////gPParamClass.FcName="" |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref TempTempGcLayer_M); |
|
|
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = TempGcLayer_M; |
|
gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\JC20X_20X"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.GPType = EnumGPType.MultipartToSinglePath; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref Union20XLayer); |
|
|
|
string strWhere = @"FID_CZCDYD = -1 AND( CZCSXM IS NULL OR CZCSXM = '')"; |
|
IQueryFilter filter2 = new QueryFilterClass(); |
|
filter2.WhereClause = strWhere; |
|
(Union20XLayer.FeatureClass as ITable).DeleteSearchedRows(filter2); |
|
|
|
return; |
|
|
|
|
|
{ |
|
#region 地类图斑更新层非20X属性图斑 |
|
IFeatureLayer DltbGxNo201Layer = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = pGXTBLayer; |
|
gPParamClass.GPType = EnumGPType.SelectLayerByAttribute; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.Where_clause = "(CZCSXM = '201' or CZCSXM = '201A' or CZCSXM = '202' or CZCSXM = '202A' or CZCSXM = '204' or CZCSXM = '205' or CZCSXM = '203' or CZCSXM = '203A') ";//"CZCSXM IS NULL or CZCSXM = '203' OR CZCSXM = '203A'"; |
|
gPParamClass.FcName = "DLTBNo20X"; |
|
gPParamClass.TempGDBPath = TempGDBPath; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref DltbGxNo201Layer); |
|
|
|
#endregion |
|
|
|
#region 基础城镇村 |
|
|
|
|
|
IFeatureLayer JC_Czc203Layer = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = TempJcCzcLayer; |
|
gPParamClass.GPType = EnumGPType.SelectLayerByAttribute; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.Where_clause = "CZCLX = '203' or CZCLX = '203A'"; |
|
gPParamClass.FcName = "JC_CZC203"; |
|
gPParamClass.TempGDBPath = TempGDBPath; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref JC_Czc203Layer); |
|
|
|
|
|
IFeatureLayer JC_Czc20XLayer = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = TempJcCzcLayer; |
|
gPParamClass.GPType = EnumGPType.SelectLayerByAttribute; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.Where_clause = "CZCLX = '201' or CZCLX = '201A' or CZCLX = '203' or CZCLX = '203A' or CZCLX = '202' or CZCLX = '202A' or CZCLX = '204' or CZCLX = '205'"; |
|
gPParamClass.FcName = "JC_CZC20X"; |
|
gPParamClass.TempGDBPath = TempGDBPath; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref JC_Czc20XLayer); |
|
|
|
IFeatureLayer GxCzcLayer = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = TempJcCzcLayer; |
|
gPParamClass.SecondFeatureLayer = DltbGxNo201Layer; |
|
gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\GxCZC_Erase"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.GPType = EnumGPType.Erase; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref GxCzcLayer); |
|
|
|
#endregion |
|
|
|
#region 20X |
|
IFeatureLayer Dltb201Layer = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = pGXTBLayer; |
|
gPParamClass.GPType = EnumGPType.SelectLayerByAttribute; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.Where_clause = "CZCSXM = '201' or CZCSXM = '201A' or CZCSXM = '202' or CZCSXM = '202A' or CZCSXM = '203' or CZCSXM = '203A' or CZCSXM = '204' or CZCSXM = '205'"; |
|
gPParamClass.FcName = "DLTB20X"; |
|
gPParamClass.TempGDBPath = TempGDBPath; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref Dltb201Layer); |
|
//IWorkspace tempWs = (Dltb201Layer.FeatureClass as FeatureClass).Workspace; |
|
//tempWs.ExecuteSQL(string.Format("Update DLTB20X set ZLDWDM='{0}' where CZCSXM = '201'", pParm.PrjInfo.CODE + "0000000000000")); |
|
|
|
IFeatureCursor cursor = Dltb201Layer.FeatureClass.Update(null, true); |
|
IFeature f = null; |
|
int idx = Dltb201Layer.FeatureClass.FindField("ZLDWDM"); |
|
int idxCZCSXM = Dltb201Layer.FeatureClass.FindField("CZCSXM"); |
|
while ((f = cursor.NextFeature()) != null) |
|
{ |
|
string zldwdm = f.Value[idx].ToTrim(); |
|
string czclx = f.Value[idxCZCSXM].ToTrim(); |
|
if (czclx.StartsWith("201")) |
|
f.Value[idx] = pParm.PrjInfo.CODE + "0000000000000"; |
|
else if (czclx.StartsWith("202")) |
|
f.Value[idx] = zldwdm.Substring(0, 9) + "0000000000"; |
|
else |
|
continue; |
|
cursor.UpdateFeature(f); |
|
} |
|
cursor.Flush(); |
|
|
|
#region 基础库相邻20X |
|
IQueryFilter filter = new QueryFilter(); |
|
filter.WhereClause = "CZCLX = '201' or CZCLX = '201A' or CZCLX = '202' or CZCLX = '202A' or CZCLX = '204' or CZCLX = '205'";// |
|
if (Dltb201Layer.FeatureClass.FeatureCount(null) > 0) |
|
CzcToDltb(GxCzcLayer, Dltb201Layer, filter); |
|
#endregion |
|
|
|
IFeatureLayer Czc201Layer = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = Dltb201Layer; |
|
gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\TempCZC20X"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.ListDissolveFiledName = new List<string>() { "ZLDWDM", "CZCSXM" }; |
|
gPParamClass.GPType = EnumGPType.Dissolve; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref Czc201Layer); |
|
|
|
IFeatureLayer Czc20XLayer = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureClassPath = $"{TempGDBPath}\\TempCZC20X"; |
|
gPParamClass.OutFeatureClassPath = TempGDBPath; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.ListDissolveFiledName = new List<string>(); |
|
gPParamClass.FcName = "CZC20X"; |
|
gPParamClass.GPType = EnumGPType.FcToFc; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref Czc20XLayer); |
|
|
|
|
|
#endregion |
|
|
|
#region 202 |
|
|
|
//IFeatureLayer Dltb202Layer = null; |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = pGXTBLayer; |
|
//gPParamClass.GPType = EnumGPType.SelectLayerByAttribute; |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//gPParamClass.Where_clause = "CZCSXM = '202' or CZCSXM = '202A' or CZCSXM = '204' or CZCSXM = '205'"; |
|
//gPParamClass.FcName = "DLTB202"; |
|
//gPParamClass.TempGDBPath = TempGDBPath; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref Dltb202Layer); |
|
//IFeatureCursor cursor = Dltb202Layer.FeatureClass.Update(null, true); |
|
//IFeature f = null; |
|
//int idx = Dltb202Layer.FeatureClass.FindField("ZLDWDM"); |
|
//while ((f = cursor.NextFeature()) != null) |
|
//{ |
|
// string zldwdm = f.Value[idx].ToTrim(); |
|
// f.Value[idx] = zldwdm.Substring(0, 9) + "0000000000"; |
|
// cursor.UpdateFeature(f); |
|
//} |
|
//cursor.Flush(); |
|
|
|
//filter.WhereClause = "CZCLX = '202' or CZCLX = '202A'";// or CZCLX = '202' or CZCLX = '202A' or CZCLX = '204' or CZCLX = '205' |
|
//CzcToDltb(GxCzcLayer, Dltb202Layer, filter); |
|
//IFeatureLayer Czc202Layer = null; |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = Dltb202Layer; |
|
//gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\CZC202"; |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//gPParamClass.ListDissolveFiledName = new List<string>() { "ZLDWDM", "CZCSXM" }; |
|
//gPParamClass.GPType = EnumGPType.Dissolve; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref Czc202Layer); |
|
//IFeatureClassAPI FcAPI = new FeatureClassAPI(Czc202Layer.FeatureClass); |
|
//FcAPI.FcToFc(Czc20XLayer.FeatureClass, null, false); |
|
#endregion |
|
|
|
#region 203 |
|
IFeatureLayer TempDltb203Layer = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = pGXTBLayer; |
|
gPParamClass.GPType = EnumGPType.SelectLayerByAttribute; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.Where_clause = "CZCSXM = '203' or CZCSXM = '203A'"; |
|
gPParamClass.FcName = "DLTB203_Temp"; |
|
gPParamClass.TempGDBPath = TempGDBPath; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref TempDltb203Layer); |
|
|
|
|
|
|
|
IFeatureLayer Dltb203Layer = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = TempDltb203Layer; |
|
gPParamClass.SecondFeatureLayer = TempJcCzcLayer; |
|
gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\DLTB203"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.GPType = EnumGPType.Erase; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref Dltb203Layer); |
|
//#region 基础库相邻203 |
|
//filter = new QueryFilter(); |
|
//filter.WhereClause = "CZCLX = '203' or CZCLX = '203A'"; |
|
//CzcToDltb(GxCzcLayer, Dltb203Layer, filter); |
|
//#endregion |
|
|
|
IFeatureLayer Czc203Layer = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = Dltb203Layer; |
|
gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\CZC203_temp"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.ListDissolveFiledName = new List<string>() { "ZLDWDM", "CZCSXM" }; |
|
gPParamClass.GPType = EnumGPType.Dissolve; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref Czc203Layer); |
|
|
|
//IFeatureLayer Czc20XLayer = null; |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureClassPath = $"{TempGDBPath}\\CZC203_temp"; |
|
gPParamClass.OutFeatureClassPath = TempGDBPath; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.ListDissolveFiledName = new List<string>(); |
|
gPParamClass.FcName = "CZC203"; |
|
gPParamClass.GPType = EnumGPType.FcToFc; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref Czc203Layer); |
|
#endregion |
|
|
|
#region 204 |
|
//IFeatureLayer Dltb204Layer = null; |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = pGXTBLayer; |
|
//gPParamClass.GPType = EnumGPType.SelectLayerByAttribute; |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//gPParamClass.Where_clause = "CZCSXM = '204'"; |
|
//gPParamClass.FcName = "DLTB204"; |
|
//gPParamClass.TempGDBPath = TempGDBPath; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref Dltb204Layer); |
|
|
|
//filter.WhereClause = "CZCLX = '204' or CZCLX = '204A'";// or CZCLX = '202' or CZCLX = '202A' or CZCLX = '204' or CZCLX = '205' |
|
//CzcToDltb(GxCzcLayer, Dltb204Layer, filter); |
|
//IFeatureLayer Czc204Layer = null; |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = Dltb204Layer; |
|
//gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\CZC204"; |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//gPParamClass.ListDissolveFiledName = new List<string>() { "ZLDWDM", "CZCSXM" }; |
|
//gPParamClass.GPType = EnumGPType.Dissolve; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref Czc204Layer); |
|
//FcAPI = new FeatureClassAPI(Czc204Layer.FeatureClass); |
|
//FcAPI.FcToFc(Czc20XLayer.FeatureClass, null, false); |
|
#endregion |
|
|
|
#region 205 |
|
//IFeatureLayer Dltb205Layer = null; |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = pGXTBLayer; |
|
//gPParamClass.GPType = EnumGPType.SelectLayerByAttribute; |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//gPParamClass.Where_clause = "CZCSXM = '205'"; |
|
//gPParamClass.FcName = "DLTB205"; |
|
//gPParamClass.TempGDBPath = TempGDBPath; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref Dltb205Layer); |
|
|
|
//filter.WhereClause = "CZCLX = '205' or CZCLX = '205A'";// or CZCLX = '202' or CZCLX = '202A' or CZCLX = '204' or CZCLX = '205' |
|
//CzcToDltb(GxCzcLayer, Dltb205Layer, filter); |
|
//IFeatureLayer Czc205Layer = null; |
|
//gPParamClass = new GPParamClass(); |
|
//gPParamClass.FirstFeatureLayer = Dltb205Layer; |
|
//gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\CZC205"; |
|
//gPParamClass.IsGetOutPutFeature = true; |
|
//gPParamClass.ListDissolveFiledName = new List<string>() { "ZLDWDM", "CZCSXM" }; |
|
//gPParamClass.GPType = EnumGPType.Dissolve; |
|
//GPHelper.Instance.ExeGPForProces(gPParamClass, ref Czc205Layer); |
|
//FcAPI = new FeatureClassAPI(Czc205Layer.FeatureClass); |
|
//FcAPI.FcToFc(Czc20XLayer.FeatureClass, null, false); |
|
#endregion |
|
|
|
|
|
#region 联合 |
|
//IFeatureLayer Union20XLayer = null; |
|
gPParamClass = new GPParamClass() |
|
{ |
|
FirstFeatureLayer = JC_Czc20XLayer, |
|
SecondFeatureLayer = Czc20XLayer, |
|
OutFeatureClassPath = $"{TempGDBPath}\\JC20X_20X_M", |
|
IsGetOutPutFeature = true, |
|
PreserveAttributes = "ALL", |
|
GPType = EnumGPType.Union |
|
}; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref Union20XLayer); |
|
|
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = Union20XLayer; |
|
gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\JC20X_20X"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.GPType = EnumGPType.MultipartToSinglePath; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref Union20XLayer); |
|
|
|
|
|
//IFeatureLayer Union203Layer = null; |
|
gPParamClass = new GPParamClass() |
|
{ |
|
FirstFeatureLayer = JC_Czc203Layer, |
|
SecondFeatureLayer = Czc203Layer, |
|
OutFeatureClassPath = $"{TempGDBPath}\\JC203_203_M", |
|
IsGetOutPutFeature = true, |
|
PreserveAttributes = "ALL", |
|
GPType = EnumGPType.Union |
|
}; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref Union203Layer); |
|
|
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureLayer = Union203Layer; |
|
gPParamClass.OutFeatureClassPath = $"{TempGDBPath}\\JC203_203"; |
|
gPParamClass.IsGetOutPutFeature = true; |
|
gPParamClass.GPType = EnumGPType.MultipartToSinglePath; |
|
GPHelper.Instance.ExeGPForProces(gPParamClass, ref Union203Layer); |
|
#endregion |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug($"获取城镇村范围数据失败:{ex.Message}"); |
|
LogAPI.Debug(ex); |
|
} |
|
} |
|
private void CzcToDltb(IFeatureLayer pCzcLayer, IFeatureLayer pDltbLayer, IQueryFilter pFilter) |
|
{ |
|
|
|
IFeatureCursor S_Cursor = null; |
|
IFeatureCursor T_Cursor = null; |
|
try |
|
{ |
|
S_Cursor = pCzcLayer.FeatureClass.Search(pFilter, true); |
|
int idx_JCCZCLX, idx_CZCDM; |
|
string t = (pCzcLayer.FeatureClass as FeatureClass).BrowseName; |
|
|
|
idx_JCCZCLX = pCzcLayer.FeatureClass.FindField("CZCLX"); |
|
idx_CZCDM = pCzcLayer.FeatureClass.FindField("CZCDM"); |
|
IFeature f = null; |
|
S_Cursor = pCzcLayer.FeatureClass.Search(pFilter, true); |
|
|
|
IFeatureClassLoad pFclsLoad = pDltbLayer.FeatureClass as IFeatureClassLoad; |
|
if (pFclsLoad != null) |
|
pFclsLoad.LoadOnlyMode = true; |
|
|
|
int idx_CZCSXM, idx_ZLDWDM; |
|
T_Cursor = pDltbLayer.FeatureClass.Insert(true); |
|
IFeatureBuffer buff = pDltbLayer.FeatureClass.CreateFeatureBuffer(); |
|
idx_CZCSXM = buff.Fields.FindField("CZCSXM"); |
|
idx_ZLDWDM = buff.Fields.FindField("ZLDWDM"); |
|
while ((f = S_Cursor.NextFeature()) != null) |
|
{ |
|
string CZCLX = f.Value[idx_JCCZCLX].ToTrim(); |
|
string CZCMC = f.Value[idx_CZCDM].ToTrim(); |
|
buff.Shape = f.ShapeCopy; |
|
if (idx_CZCSXM != -1) |
|
buff.Value[idx_CZCSXM] = CZCLX; |
|
if (idx_ZLDWDM != -1) |
|
buff.Value[idx_ZLDWDM] = CZCMC; |
|
T_Cursor.InsertFeature(buff); |
|
} |
|
T_Cursor.Flush(); |
|
if (pFclsLoad != null) |
|
pFclsLoad.LoadOnlyMode = false; |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
finally |
|
{ |
|
if (S_Cursor != null) |
|
Marshal.ReleaseComObject(S_Cursor); |
|
if (T_Cursor != null) |
|
Marshal.ReleaseComObject(T_Cursor); |
|
} |
|
} |
|
public void CalculateArea(object pParm) |
|
{ |
|
//IFeatureCursor pCursor = null; |
|
try |
|
{ |
|
CalcAreaParm CalParm = pParm as CalcAreaParm; |
|
IFeatureLayer _Layer = GeoDBAPI.DeSerialzedPersist(CalParm.StrLayer) as IFeatureLayer; |
|
IFeatureCursor pCursor = _Layer.FeatureClass.Search(new QueryFilterClass() { SubFields = "OBJECTID,SHAPE" }, true); |
|
IFeature feature = null; |
|
while ((feature = pCursor.NextFeature()) != null) |
|
{ |
|
if (!CalParm.OidList.Contains(feature.OID)) |
|
continue; |
|
double area = GetEllipseArea(feature.ShapeCopy); |
|
lock (AreaList) |
|
{ |
|
AreaList.Add(feature.OID, area.ToDouble()); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//Console.WriteLine(ex.Message); |
|
} |
|
finally |
|
{ |
|
//if (pCursor != null) |
|
// Marshal.ReleaseComObject(pCursor); |
|
} |
|
} |
|
private 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; |
|
} |
|
} |
|
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.QueryFilter = new QueryFilterClass() { WhereClause = $"BSM like '{pParm.PrjInfo.CODE}%'" }; |
|
if (System.IO.Path.GetExtension((fc as FeatureClass).Workspace.PathName).ToLower().Contains(".mdb")) |
|
tableSort.QueryFilter = new QueryFilterClass() { WhereClause = $"BSM like '{pParm.PrjInfo.CODE}*'" }; |
|
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; |
|
|
|
} |
|
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 + ":删除错误不处理"); |
|
} |
|
} |
|
|
|
private void CopyDirectInfo(string sourceDir, string toDir) |
|
{ |
|
if (!Directory.Exists(sourceDir)) |
|
{ |
|
throw new ApplicationException("未找到文件:" + sourceDir); |
|
} |
|
if (!Directory.Exists(toDir)) |
|
{ |
|
Directory.CreateDirectory(toDir); |
|
} |
|
DirectoryInfo directInfo = new DirectoryInfo(sourceDir); |
|
FileInfo[] filesInfos = directInfo.GetFiles(); |
|
foreach (FileInfo fileinfo in filesInfos) |
|
{ |
|
string fileName = fileinfo.Name; |
|
File.Copy(fileinfo.FullName, toDir + @"/" + fileName, true); |
|
} |
|
} |
|
|
|
public class PCModel |
|
{ |
|
public string BGQBSM { get; set; } |
|
public string BGHBSM { get; set; } |
|
public double BGHMJ { get; set; } |
|
public double KZMJ { get; set; } |
|
//public Dictionary<int, double> GCData { get; set; } |
|
public List<GCMJModel> GCData { get; set; } |
|
public PCModel() |
|
{ |
|
GCData = new List<GCMJModel>(); |
|
} |
|
public void PC() |
|
{ |
|
//IOrderedEnumerable<KeyValuePair<int, double>> GCData2 = GCData.OrderByDescending(e => e.Value); |
|
//GCData = new Dictionary<int, double>(); |
|
//foreach (var item in GCData2) |
|
//{ |
|
// GCData.Add(item.Key, item.Value); |
|
//} |
|
GCData = GCData.OrderByDescending(o => o.MJ).ToList(); |
|
double zmj = GCData.Sum(s => s.MJ); |
|
double mjc = Math.Round(zmj - KZMJ, 2); |
|
if (Math.Round(mjc, 2) == 0) |
|
{ |
|
return; |
|
} |
|
int num = 0; |
|
//平差 |
|
while (Math.Round(mjc, 2) != 0 && num < 10) |
|
{ |
|
num++; |
|
int tpsm = (int)(Math.Abs(Math.Round(mjc, 2)) / 0.01); |
|
int e = tpsm / GCData.Count; |
|
int f = tpsm % GCData.Count; |
|
if (f != 0) |
|
{ |
|
double tpmj = (e + 1) * 0.01; |
|
for (int j = 0; j < f; j++) |
|
{ |
|
if (mjc < 0) |
|
GCData[j].MJ = GCData[j].MJ + tpmj; |
|
else if (GCData[j].MJ > 0.01) |
|
GCData[j].MJ = GCData[j].MJ - tpmj; |
|
} |
|
} |
|
if (e != 0) |
|
{ |
|
double tpmj = e * 0.01; |
|
for (int j = f; j < GCData.Count; j++) |
|
{ |
|
if (mjc < 0) |
|
GCData[j].MJ = GCData[j].MJ + tpmj; |
|
else if (GCData[j].MJ > 0.01) |
|
GCData[j].MJ = GCData[j].MJ - tpmj; |
|
} |
|
} |
|
zmj = GCData.Sum(s => s.MJ); |
|
mjc = Math.Round(zmj - KZMJ, 2); |
|
//mjc = Math.Round(shpList.Sum(s => s.MJ), 2) - pKZMJ; |
|
} |
|
} |
|
public void PC2() |
|
{ |
|
//IOrderedEnumerable<KeyValuePair<int, double>> GCData2 = GCData.OrderByDescending(e => e.Value); |
|
//GCData = new Dictionary<int, double>(); |
|
//foreach (var item in GCData2) |
|
//{ |
|
// GCData.Add(item.Key, item.Value); |
|
//} |
|
GCData = GCData.OrderByDescending(o => o.MJ).ToList(); |
|
double zmj = GCData.Sum(s => s.MJ); |
|
double mjc = Math.Round(zmj - KZMJ, 2); |
|
if (Math.Round(mjc, 2) == 0 || (zmj == 0 && mjc < 0)) |
|
{ |
|
return; |
|
} |
|
int num = 0; |
|
while (Math.Round(mjc, 2) != 0 && num < 10) |
|
{ |
|
foreach (var item in GCData) |
|
{ |
|
if (Math.Round(mjc, 2) == 0) break; |
|
if (mjc < 0) |
|
{ |
|
if (item.MJ <= 0.01) continue; |
|
item.MJ = Math.Round(item.MJ + 0.01, 2); |
|
zmj = GCData.Sum(s => s.MJ); |
|
mjc = Math.Round(zmj - KZMJ, 2); |
|
} |
|
else |
|
{ |
|
if (item.MJ <= 0.01) continue; |
|
item.MJ = Math.Round(item.MJ - 0.01, 2); |
|
zmj = GCData.Sum(s => s.MJ); |
|
mjc = Math.Round(zmj - KZMJ, 2); |
|
} |
|
} |
|
} |
|
////平差 |
|
//while (Math.Round(mjc, 2) != 0 && num < 10) |
|
//{ |
|
// num++; |
|
// int tpsm = (int)(Math.Abs(Math.Round(mjc, 2)) / (double)0.01); |
|
// int e = tpsm / GCData.Count; |
|
// int f = tpsm % GCData.Count; |
|
// if (f != 0) |
|
// { |
|
// double tpmj = (e + 1) * 0.01; |
|
// for (int j = 0; j < f; j++) |
|
// { |
|
// if (mjc < 0) |
|
// GCData[j].MJ = GCData[j].MJ + tpmj; |
|
// else if (GCData[j].MJ > 0.01) |
|
// GCData[j].MJ = GCData[j].MJ - tpmj; |
|
// } |
|
// } |
|
// if (e != 0) |
|
// { |
|
// double tpmj = e * 0.01; |
|
// for (int j = f; j < GCData.Count; j++) |
|
// { |
|
// if (mjc < 0) |
|
// GCData[j].MJ = GCData[j].MJ + tpmj; |
|
// else if (GCData[j].MJ > 0.01) |
|
// GCData[j].MJ = GCData[j].MJ - tpmj; |
|
// } |
|
// } |
|
// zmj = GCData.Sum(s => s.MJ); |
|
// mjc = Math.Round(zmj - KZMJ, 2); |
|
// //mjc = Math.Round(shpList.Sum(s => s.MJ), 2) - pKZMJ; |
|
//} |
|
} |
|
} |
|
|
|
public class GCMJModel |
|
{ |
|
public int OID { get; set; } |
|
public double MJ { get; set; } |
|
} |
|
public class CZC_Param |
|
{ |
|
public IFeatureLayer GXCZCLayer { get; set; } |
|
public IFeatureLayer GXGCCZCLayer { get; set; } |
|
public IFeatureLayer GXTBLayer { get; set; } |
|
public IFeatureLayer JCCZCLayer { get; set; } |
|
public IFeatureLayer JCTBLayer { get; set; } |
|
public IFeatureLayer BGTBLayer { get; set; } |
|
|
|
} |
|
|
|
public class CalcAreaParm |
|
{ |
|
public string StrLayer { get; set; } |
|
public int StartIndex { get; set; } |
|
public List<int> OidList { get; set; } |
|
} |
|
} |
|
}
|
|
|