|
|
|
|
using ESRI.ArcGIS.ADF;
|
|
|
|
|
using ESRI.ArcGIS.Carto;
|
|
|
|
|
using ESRI.ArcGIS.DataSourcesGDB;
|
|
|
|
|
using ESRI.ArcGIS.Geodatabase;
|
|
|
|
|
using ESRI.ArcGIS.Geometry;
|
|
|
|
|
using KGIS.Framework.AE;
|
|
|
|
|
using KGIS.Framework.AE.Enum;
|
|
|
|
|
using KGIS.Framework.AE.GPHelper;
|
|
|
|
|
using KGIS.Framework.AE.ExtensionMethod;
|
|
|
|
|
using KGIS.Framework.DBOperator;
|
|
|
|
|
using KGIS.Framework.Maps;
|
|
|
|
|
using KGIS.Framework.Utils;
|
|
|
|
|
using KGIS.Framework.Utils.ExtensionMethod;
|
|
|
|
|
using Kingo.PluginServiceInterface;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
using System.Threading;
|
|
|
|
|
|
|
|
|
|
namespace Kingo.Plugin.DLTB_IDG
|
|
|
|
|
{
|
|
|
|
|
public class ThreadParam
|
|
|
|
|
{
|
|
|
|
|
public ManualResetEvent mrEvent;
|
|
|
|
|
public int[] Data;
|
|
|
|
|
public string DataPath;
|
|
|
|
|
public string XZQDM;
|
|
|
|
|
}
|
|
|
|
|
public class DLTBBGHelper
|
|
|
|
|
{
|
|
|
|
|
private string MaxBSM { get; set; }
|
|
|
|
|
|
|
|
|
|
private Dictionary<string, int> jc_FieldsIndex;
|
|
|
|
|
private Dictionary<string, int> gx_FieldsIndex;
|
|
|
|
|
private Dictionary<string, int> gxgc_FieldsIndex;
|
|
|
|
|
private static readonly object objLock = new object();
|
|
|
|
|
|
|
|
|
|
public Action<string, object> ExeState;
|
|
|
|
|
public Dictionary<string, int> TempBSMDic = new Dictionary<string, int>();
|
|
|
|
|
public Dictionary<string, int> TempTBBHDic = new Dictionary<string, int>();
|
|
|
|
|
|
|
|
|
|
private IFeatureLayer _CZC203Layer = null;
|
|
|
|
|
private IFeatureLayer _CZC20XLayer = null;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 基础地类图斑层
|
|
|
|
|
/// </summary>
|
|
|
|
|
private IFeatureLayer jcdltb_Layer = null;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 部分图斑变更
|
|
|
|
|
/// </summary>
|
|
|
|
|
public DLTBBGHelper()
|
|
|
|
|
{
|
|
|
|
|
jcdltb_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTB");
|
|
|
|
|
IFeatureLayer czcjLayer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("城镇村等用地");
|
|
|
|
|
//_CZC20XLayer = GeoDBAPI.CreateFeatureLayerInmemeory("CZC20X", "城镇村20X范围", (czcjLayer.FeatureClass as IGeoDataset).SpatialReference, czcjLayer.FeatureClass.ShapeType, czcjLayer.FeatureClass.Fields);
|
|
|
|
|
//_CZC203Layer = GeoDBAPI.CreateFeatureLayerInmemeory("CZC203", "城镇村203范围", (czcjLayer.FeatureClass as IGeoDataset).SpatialReference, czcjLayer.FeatureClass.ShapeType, czcjLayer.FeatureClass.Fields);
|
|
|
|
|
//InsertDataToMemeoryLayer(czcjLayer.FeatureClass);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void InsertDataToMemeoryLayer(IFeatureClass pSource)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (pSource == null || (_CZC203Layer == null && _CZC20XLayer == null)) return;
|
|
|
|
|
IFeatureClassAPI fcAPI = new FeatureClassAPI(pSource);
|
|
|
|
|
IQueryFilter filter = new QueryFilterClass
|
|
|
|
|
{
|
|
|
|
|
WhereClause = " CZCLX = '203'"
|
|
|
|
|
};
|
|
|
|
|
if (_CZC203Layer != null && _CZC203Layer.FeatureClass != null)
|
|
|
|
|
fcAPI.FcToFc(_CZC203Layer.FeatureClass, null, false);
|
|
|
|
|
filter.WhereClause = " CZCLX <> '203'";
|
|
|
|
|
if (_CZC20XLayer != null && _CZC20XLayer.FeatureClass != null)
|
|
|
|
|
fcAPI.FcToFc(_CZC20XLayer.FeatureClass, null, false);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug("获取城镇村范围数据失败:");
|
|
|
|
|
LogAPI.Debug(ex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public 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 e)
|
|
|
|
|
{
|
|
|
|
|
throw;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<IFeatureClass> GetBSMFcList = null;
|
|
|
|
|
public void SingleThreadExe(object obj)
|
|
|
|
|
{
|
|
|
|
|
IFeatureClass bg_Fc = null;
|
|
|
|
|
IFeatureLayer bg_FL = null;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 临时基础地类图斑层
|
|
|
|
|
/// </summary>
|
|
|
|
|
IFeatureLayer XZQTZQJCTB_FL = null;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 地类图斑更新层
|
|
|
|
|
/// </summary>
|
|
|
|
|
IFeatureLayer gx_Layer = null;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 地类图斑更新过程层
|
|
|
|
|
/// </summary>
|
|
|
|
|
IFeatureLayer gxgc_Layer = null;
|
|
|
|
|
ThreadParam param = (ThreadParam)obj;
|
|
|
|
|
ITable table = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (Directory.Exists(param.DataPath))
|
|
|
|
|
{
|
|
|
|
|
using (ComReleaser comRelease = new ComReleaser())
|
|
|
|
|
{
|
|
|
|
|
bg_Fc = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBBG");
|
|
|
|
|
bg_FL = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBBG");
|
|
|
|
|
XZQTZQJCTB_FL = MapsManager.Instance.MapService.GetFeatureLayerByName("XZQTZQJCTB");
|
|
|
|
|
gx_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBGX");
|
|
|
|
|
gxgc_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBGXGC");
|
|
|
|
|
if (GetBSMFcList == null)
|
|
|
|
|
{
|
|
|
|
|
GetBSMFcList = new List<IFeatureClass>
|
|
|
|
|
{
|
|
|
|
|
jcdltb_Layer.FeatureClass,
|
|
|
|
|
gx_Layer.FeatureClass
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
if (string.IsNullOrWhiteSpace(MaxBSM))
|
|
|
|
|
{
|
|
|
|
|
MaxBSM = GetMaxBSM(GetBSMFcList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 创建临时GDB,存储基础地类图斑数据
|
|
|
|
|
string gdbFolder = Directory.GetCurrentDirectory() + "\\Temp\\GXGC";
|
|
|
|
|
if (!Directory.Exists(gdbFolder))
|
|
|
|
|
{
|
|
|
|
|
Directory.CreateDirectory(gdbFolder);
|
|
|
|
|
}
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
DelectDir(gdbFolder);//能删除就删除 删除报错不处理
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{ }
|
|
|
|
|
IWorkspaceFactory pFtWsFct = null;
|
|
|
|
|
IWorkspaceName workspaceName = null;
|
|
|
|
|
pFtWsFct = new FileGDBWorkspaceFactory();
|
|
|
|
|
|
|
|
|
|
string gdbFileName = Guid.NewGuid().ToString() + ".gdb";
|
|
|
|
|
string path = System.IO.Path.Combine(gdbFolder, gdbFileName);
|
|
|
|
|
//~\\Apps\\Temp\\GXGC 临时模板
|
|
|
|
|
workspaceName = pFtWsFct.Create(gdbFolder, gdbFileName, null, 0);
|
|
|
|
|
|
|
|
|
|
IFeatureLayer pjbntFeatureLayer = null;
|
|
|
|
|
//基础地类图斑临时对象
|
|
|
|
|
//IFeatureLayer TempJC_DLTB_FL = null;
|
|
|
|
|
|
|
|
|
|
//设置基础地类图斑选中(加上容差,执行失败)
|
|
|
|
|
GPParamClass gPParamClass = new GPParamClass
|
|
|
|
|
{
|
|
|
|
|
FirstFeatureLayer = jcdltb_Layer,
|
|
|
|
|
SecondFeatureLayer = bg_FL,
|
|
|
|
|
GPType = EnumGPType.Intersect
|
|
|
|
|
};
|
|
|
|
|
GeoprocessorHelper.SelectLayerByLocationAnalysis(gPParamClass, ref pjbntFeatureLayer);
|
|
|
|
|
|
|
|
|
|
//gPParamClass = new GPParamClass
|
|
|
|
|
//{
|
|
|
|
|
// FirstFeatureLayer = jcdltb_Layer,
|
|
|
|
|
// OutFeatureClassPath = path,
|
|
|
|
|
// IsGetOutPutFeature = true
|
|
|
|
|
//};
|
|
|
|
|
//GeoprocessorHelper.FeatureClassToFeatureClass(gPParamClass, "JC_DLTB_Temp", ref TempJC_DLTB_FL);
|
|
|
|
|
|
|
|
|
|
IFeatureSelection selection = jcdltb_Layer as IFeatureSelection;
|
|
|
|
|
selection.Clear();
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
IQueryFilter filter = new QueryFilter
|
|
|
|
|
{
|
|
|
|
|
WhereClause = $" ZLDWDM not like '{param.XZQDM}%' "
|
|
|
|
|
};
|
|
|
|
|
table = gx_Layer.FeatureClass as ITable;
|
|
|
|
|
table.DeleteSearchedRows(filter);
|
|
|
|
|
filter.WhereClause = $" BGHZLDWDM not like '{param.XZQDM}%' ";
|
|
|
|
|
table = gxgc_Layer.FeatureClass as ITable;
|
|
|
|
|
table.DeleteSearchedRows(filter);
|
|
|
|
|
|
|
|
|
|
if (jc_FieldsIndex == null || jc_FieldsIndex.Count == 0)
|
|
|
|
|
jc_FieldsIndex = GetFieldsIndex(jcdltb_Layer.FeatureClass.Fields);
|
|
|
|
|
|
|
|
|
|
if (gx_FieldsIndex == null || gx_FieldsIndex.Count == 0)
|
|
|
|
|
gx_FieldsIndex = GetFieldsIndex(gx_Layer.FeatureClass.Fields);
|
|
|
|
|
|
|
|
|
|
if (gxgc_FieldsIndex == null || gxgc_FieldsIndex.Count == 0)
|
|
|
|
|
gxgc_FieldsIndex = GetFieldsIndex(gxgc_Layer.FeatureClass.Fields);
|
|
|
|
|
int bgztIndex = bg_Fc.FindField("BGZT");
|
|
|
|
|
// 遍历变更表
|
|
|
|
|
foreach (int oid in param.Data)
|
|
|
|
|
{
|
|
|
|
|
IFeature f = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
f = bg_Fc.GetFeature(oid);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (f == null) continue;
|
|
|
|
|
if (bgztIndex != -1)
|
|
|
|
|
{
|
|
|
|
|
if (f.Value[bgztIndex].ToTrim() == "已变更2成功")
|
|
|
|
|
{
|
|
|
|
|
Marshal.ReleaseComObject(f);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
var JCJG_index = f.Fields.FindField("JCZT");
|
|
|
|
|
bool isContinue = false;
|
|
|
|
|
List<IFeature> jcFeatures = FeatureAPI.Identify2(f.ShapeCopy, jcdltb_Layer);
|
|
|
|
|
//List<IFeature> jcFeatures2 = FeatureAPI.Identify2(f.ShapeCopy, TempJC_DLTB_FL);//GP 基础地类图斑
|
|
|
|
|
if (jcFeatures.Count == 1)
|
|
|
|
|
{
|
|
|
|
|
if (FeatureAPI.IsContains(jcFeatures[0].ShapeCopy, f.ShapeCopy) || FeatureAPI.GetEqual(jcFeatures[0].ShapeCopy, f.ShapeCopy))
|
|
|
|
|
{
|
|
|
|
|
DLTBGXAttribute gx1 = new DLTBGXAttribute(gx_FieldsIndex);
|
|
|
|
|
gx1.SetAttribure(jcFeatures[0], jc_FieldsIndex);
|
|
|
|
|
DLTBGXAttribute gx2 = new DLTBGXAttribute(gx_FieldsIndex);
|
|
|
|
|
gx2.SetAttribure(f);
|
|
|
|
|
if (gx1.IsEqual(gx2))
|
|
|
|
|
{
|
|
|
|
|
f.Value[bgztIndex] = "变更失败";
|
|
|
|
|
if (JCJG_index != -1)
|
|
|
|
|
f.Value[JCJG_index] = "变更图斑与基础图斑属性相同,且变更范围未超出基础图斑范围";
|
|
|
|
|
f.Store();
|
|
|
|
|
Marshal.ReleaseComObject(f);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
IGeometry Difference = FeatureAPI.Difference(jcFeatures[0].ShapeCopy, f.ShapeCopy);
|
|
|
|
|
if (!Difference.IsEmpty)
|
|
|
|
|
{
|
|
|
|
|
IArea area = Difference as IArea;
|
|
|
|
|
if (area.Area < 0.01)
|
|
|
|
|
{
|
|
|
|
|
f.Value[bgztIndex] = "变更失败";
|
|
|
|
|
if (JCJG_index != -1)
|
|
|
|
|
f.Value[JCJG_index] = "变更图斑与基础图斑压盖面积存在小于0.1平方米的图形";
|
|
|
|
|
f.Store();
|
|
|
|
|
isContinue = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
bool bg = false;
|
|
|
|
|
foreach (var item in jcFeatures)
|
|
|
|
|
{
|
|
|
|
|
if (param.XZQDM.Length == 9)
|
|
|
|
|
{
|
|
|
|
|
var bgindex = f.Fields.FindField("ZLDWDM");
|
|
|
|
|
var jcindex = item.Fields.FindField("ZLDWDM");
|
|
|
|
|
if (f.Value[bgindex].ToTrim() != item.Value[jcindex].ToTrim())
|
|
|
|
|
{
|
|
|
|
|
bg = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//变更数据相交压盖到基础数据
|
|
|
|
|
IGeometry Difference = null;
|
|
|
|
|
IGeometry geo = FeatureAPI.InterSect(item.ShapeCopy, f.ShapeCopy);
|
|
|
|
|
if (geo.IsEmpty)
|
|
|
|
|
Difference = FeatureAPI.Difference(item.ShapeCopy, f.ShapeCopy);
|
|
|
|
|
if (!geo.IsEmpty || !Difference.IsEmpty)
|
|
|
|
|
{
|
|
|
|
|
IArea area = geo.IsEmpty == false ? (geo as IArea) : (Difference as IArea);
|
|
|
|
|
if (area.Area < 0.01)
|
|
|
|
|
{
|
|
|
|
|
if (JCJG_index != -1)
|
|
|
|
|
f.Value[JCJG_index] = "变更图斑与基础图斑压盖面积存在小于0.1平方米的图形";
|
|
|
|
|
f.Store();
|
|
|
|
|
isContinue = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (Difference != null)
|
|
|
|
|
Marshal.ReleaseComObject(Difference);
|
|
|
|
|
Marshal.ReleaseComObject(geo);
|
|
|
|
|
}
|
|
|
|
|
if (bg)
|
|
|
|
|
{
|
|
|
|
|
f.Value[bgztIndex] = "变更失败";
|
|
|
|
|
if (JCJG_index != -1)
|
|
|
|
|
f.Value[JCJG_index] = "变更图斑范围跨越多个村级调查区,可能导致变更结果有误,该数据需单独变更";
|
|
|
|
|
f.Store();
|
|
|
|
|
//ExeState?.Invoke("变更失败", $"重新变更{oid}");
|
|
|
|
|
Marshal.ReleaseComObject(f);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (isContinue)
|
|
|
|
|
{
|
|
|
|
|
f.Value[bgztIndex] = "已变更(失败)";
|
|
|
|
|
f.Store();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (ExeBgDataGeneration(f, jcdltb_Layer, XZQTZQJCTB_FL, gx_Layer, gxgc_Layer, param.XZQDM))
|
|
|
|
|
{
|
|
|
|
|
bgztIndex = f.Fields.FindField("BGZT");
|
|
|
|
|
if (bgztIndex != -1)
|
|
|
|
|
{
|
|
|
|
|
f.Value[bgztIndex] = "已变更(成功)";
|
|
|
|
|
f.Store();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
f.Value[bgztIndex] = "已变更(失败)";
|
|
|
|
|
f.Store();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//Marshal.ReleaseComObject(pjbntFeatureLayer);--测试~,暂时注释
|
|
|
|
|
//Marshal.ReleaseComObject(pJC_DLTB_FL);
|
|
|
|
|
//Marshal.ReleaseComObject(selection);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug(ex.Message);
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
if (gx_Layer != null)
|
|
|
|
|
Marshal.ReleaseComObject(gx_Layer);
|
|
|
|
|
if (gxgc_Layer != null)
|
|
|
|
|
Marshal.ReleaseComObject(gxgc_Layer);
|
|
|
|
|
if (bg_Fc != null)
|
|
|
|
|
Marshal.ReleaseComObject(bg_Fc);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<DLTBGXAttribute> gxDataList = null;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 地类图斑变更-增量数据生成
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="pBGFeature">变更图斑</param>
|
|
|
|
|
/// <param name="pJC_Layer">基础地类图斑</param>
|
|
|
|
|
/// <param name="pJC_Layer2">行政区调整前基础图斑</param>
|
|
|
|
|
/// <param name="pGX_Layer"></param>
|
|
|
|
|
/// <param name="pGXGC_Layer"></param>
|
|
|
|
|
/// <param name="pTempBSMPrefix">临时BSM前缀</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public bool ExeBgDataGeneration(IFeature pBGFeature, IFeatureLayer pJC_Layer, IFeatureLayer pJC_Layer2, IFeatureLayer pGX_Layer, IFeatureLayer pGXGC_Layer, string pTempBSMPrefix)
|
|
|
|
|
{
|
|
|
|
|
bool result = false;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
#region 获取字段下标
|
|
|
|
|
if (jc_FieldsIndex == null || jc_FieldsIndex.Count == 0)
|
|
|
|
|
jc_FieldsIndex = GetFieldsIndex(pJC_Layer.FeatureClass.Fields);
|
|
|
|
|
|
|
|
|
|
if (gx_FieldsIndex == null || gx_FieldsIndex.Count == 0)
|
|
|
|
|
gx_FieldsIndex = GetFieldsIndex(pGX_Layer.FeatureClass.Fields);
|
|
|
|
|
|
|
|
|
|
if (gxgc_FieldsIndex == null || gxgc_FieldsIndex.Count == 0)
|
|
|
|
|
gxgc_FieldsIndex = GetFieldsIndex(pGXGC_Layer.FeatureClass.Fields);
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
gxDataList = new List<DLTBGXAttribute>();
|
|
|
|
|
int idx = pBGFeature.Fields.FindField("XZQTZLX");
|
|
|
|
|
if (idx != -1)
|
|
|
|
|
{
|
|
|
|
|
if (pBGFeature.Value[idx].ToTrim() == "1")//行政区调入图斑数据
|
|
|
|
|
{
|
|
|
|
|
gxDataList = GetGXGCData2(pBGFeature, pJC_Layer2, pGXGC_Layer, pGX_Layer);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gxDataList = GetGXGCData2(pBGFeature, pJC_Layer, pGXGC_Layer, pGX_Layer);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gxDataList = GetGXGCData2(pBGFeature, pJC_Layer, pGXGC_Layer, pGX_Layer);
|
|
|
|
|
}
|
|
|
|
|
foreach (var item in gxDataList)
|
|
|
|
|
{
|
|
|
|
|
if (item.GCDataList.Count == 1 && string.IsNullOrWhiteSpace(item.GCDataList[0].XZQTZLX))
|
|
|
|
|
item.GCDataList[0].SetXZQTZLX();
|
|
|
|
|
if (item.GCDataList.Count == 1 && item.GCDataList[0].BGXW == "1" && item.GCDataList[0].XZQTZLX == "0")
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (item.GCDataList.Count == 1 && item.GCDataList[0].BGXW == "2")
|
|
|
|
|
item.BSM = "";
|
|
|
|
|
if (!item.IsUpdate)
|
|
|
|
|
item.BSM = "";
|
|
|
|
|
}
|
|
|
|
|
#region 标记是否更新图斑编号
|
|
|
|
|
int ds_index = pBGFeature.Fields.FindField("DataSource");
|
|
|
|
|
bool isUpdateTBBH = false;
|
|
|
|
|
if (ds_index != -1)
|
|
|
|
|
{
|
|
|
|
|
object obj = pBGFeature.Value[ds_index];
|
|
|
|
|
if (!(obj is DBNull))
|
|
|
|
|
{
|
|
|
|
|
isUpdateTBBH = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
foreach (var item in gxDataList)
|
|
|
|
|
{
|
|
|
|
|
item.TempBSMPrefix = pTempBSMPrefix;
|
|
|
|
|
if (item.BGTBOID == null)
|
|
|
|
|
item.BGTBOID = pBGFeature.OID.ToString();
|
|
|
|
|
if (!item.BGTBOID.Contains(pBGFeature.OID.ToString()))
|
|
|
|
|
{
|
|
|
|
|
item.BGTBOID += "," + pBGFeature.OID.ToString();
|
|
|
|
|
item.BGTBOID = item.BGTBOID.Trim(',');
|
|
|
|
|
}
|
|
|
|
|
foreach (var gc in item.GCDataList)
|
|
|
|
|
{
|
|
|
|
|
item.BGTBOID += "," + gc.BGTBOID;
|
|
|
|
|
}
|
|
|
|
|
item.BGTBOID = String.Join(",", item.BGTBOID.Split(',').Distinct());
|
|
|
|
|
//(非更新 变更行为为2)| 更新图斑编号 | 更新数据的图斑编号为空 | 过程层数据变更前坐落代码与更新层坐落代码不一致
|
|
|
|
|
if ((!item.IsUpdate && item.GCDataList.FirstOrDefault(f => f.BGXW == "2") != null) || isUpdateTBBH || string.IsNullOrWhiteSpace(item.TBBH) || (item.GCDataList.FirstOrDefault(f => f.FieldsValue["BGQZLDWDM"].ToTrim() != item.FieldsValue["ZLDWDM"].ToTrim()) != null))
|
|
|
|
|
{
|
|
|
|
|
if (TempTBBHDic.Keys.Contains(item.FieldsValue["ZLDWDM"].ToTrim()))
|
|
|
|
|
{
|
|
|
|
|
TempTBBHDic[item.FieldsValue["ZLDWDM"].ToTrim()]++;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int maxTBBH = GetNewTBBH(new List<IFeatureClass>() { pJC_Layer.FeatureClass, pGX_Layer.FeatureClass }, item.FieldsValue["ZLDWDM"].ToTrim());
|
|
|
|
|
TempTBBHDic.Add(item.FieldsValue["ZLDWDM"].ToTrim(), maxTBBH);
|
|
|
|
|
}
|
|
|
|
|
item.TBBH = TempTBBHDic[item.FieldsValue["ZLDWDM"].ToTrim()].ToString();
|
|
|
|
|
if (isUpdateTBBH)
|
|
|
|
|
{
|
|
|
|
|
item.GCDataList.ForEach(f => { f.BGHTBBH = item.TBBH; });
|
|
|
|
|
}
|
|
|
|
|
if ((item.GCDataList.FirstOrDefault(f => f.FieldsValue["BGQZLDWDM"].ToTrim() != item.FieldsValue["ZLDWDM"].ToTrim()) != null))
|
|
|
|
|
{
|
|
|
|
|
item.GCDataList.ForEach(f => { f.BGHTBBH = item.TBBH; });
|
|
|
|
|
isUpdateTBBH = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
InsertGXFeature(item, pGX_Layer, isUpdateTBBH);
|
|
|
|
|
}
|
|
|
|
|
foreach (var gx in gxDataList)
|
|
|
|
|
{
|
|
|
|
|
foreach (var gxgc in gx.GCDataList)
|
|
|
|
|
{
|
|
|
|
|
gxgc.SetXZQTZLX();
|
|
|
|
|
gxgc.BGTBOID = gx.BGTBOID;
|
|
|
|
|
string UnEqualAttr = string.Empty;
|
|
|
|
|
int oid = InsertGXGCFeature(gxgc, gx, pGXGC_Layer);
|
|
|
|
|
IFeature s = pGXGC_Layer.FeatureClass.GetFeature(oid);
|
|
|
|
|
|
|
|
|
|
if (BGQ_BGH_AttrEqual(s, ref UnEqualAttr) && !string.IsNullOrWhiteSpace(UnEqualAttr) && gxgc.BGXW == "1")
|
|
|
|
|
{
|
|
|
|
|
//仅记录变更一览表,不记录更新层和过程层
|
|
|
|
|
s.Delete();
|
|
|
|
|
IFeature f = pGX_Layer.FeatureClass.GetFeature(gx.OID);
|
|
|
|
|
f.Delete();
|
|
|
|
|
}
|
|
|
|
|
BHXXB(gxgc, gx, pGXGC_Layer);
|
|
|
|
|
//gxgc.IsUpdate = true;
|
|
|
|
|
//gxgc.UpdateOID = oid;
|
|
|
|
|
Marshal.ReleaseComObject(gxgc.Shape);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug(ex.Message);
|
|
|
|
|
}
|
|
|
|
|
result = true;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug("图斑变更发生异常!异常信息如下:");
|
|
|
|
|
LogAPI.Debug(ex);
|
|
|
|
|
LogAPI.Debug("异常信息结束");
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
private bool BGQ_BGH_AttrEqual(IFeature pf, ref string UnEqualAttr)
|
|
|
|
|
{
|
|
|
|
|
bool result = true;
|
|
|
|
|
for (int i = 0; i < pf.Fields.FieldCount; i++)
|
|
|
|
|
{
|
|
|
|
|
IField field = pf.Fields.Field[i];
|
|
|
|
|
if ("BSM".Contains(field.Name.ToUpper()) || field.Name.ToUpper().Contains("MJ")) continue;
|
|
|
|
|
int bghIdx = pf.Fields.FindField(field.Name.Replace("BGQ", "BGH"));
|
|
|
|
|
if (bghIdx == -1) continue;
|
|
|
|
|
if ("BGQTBBSM,BGQTBBH,BGQZLDWDM,BGQZLDWMC,BGQQSDWDM,BGQQSDWMC".Contains(field.Name.ToUpper()))
|
|
|
|
|
{
|
|
|
|
|
if (pf.Value[i].ToTrim() != pf.Value[bghIdx].ToTrim())
|
|
|
|
|
{
|
|
|
|
|
UnEqualAttr += field.Name.ToUpper() + ",";
|
|
|
|
|
}
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (!Equals(pf.Value[i].ToTrim(), pf.Value[bghIdx].ToTrim()))
|
|
|
|
|
{
|
|
|
|
|
result = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取更新过程数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="pBGFeature">勾选得变更数据</param>
|
|
|
|
|
/// <param name="pJC_Layer">基础_地类图斑/行政区调整前基础图斑</param>
|
|
|
|
|
/// <param name="pGXGC_Layer">地类图斑更新过程层</param>
|
|
|
|
|
/// <param name="pGX_Layer">地类图斑更新层</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
private List<DLTBGXAttribute> GetGXGCData2(IFeature pBGFeature, IFeatureLayer pJC_Layer, IFeatureLayer pGXGC_Layer, IFeatureLayer pGX_Layer)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//当前变更图斑pBGFeature
|
|
|
|
|
DLTBGXAttribute tempGXData = new DLTBGXAttribute(gx_FieldsIndex);
|
|
|
|
|
tempGXData.SetAttribure(pBGFeature);
|
|
|
|
|
tempGXData.Shape2 = pBGFeature.ShapeCopy;
|
|
|
|
|
|
|
|
|
|
#region 从更新层里获取(判断该图斑是否已进行过一次变更)
|
|
|
|
|
List<IFeature> gx_Features = FeatureAPI.Identify(pBGFeature.ShapeCopy, pGX_Layer);
|
|
|
|
|
if (gx_Features.Count != 0)
|
|
|
|
|
{
|
|
|
|
|
foreach (var gxItem in gx_Features)
|
|
|
|
|
{
|
|
|
|
|
DLTBGXAttribute temp = new DLTBGXAttribute(gx_FieldsIndex)
|
|
|
|
|
{
|
|
|
|
|
UpdateOID = gxItem.OID,
|
|
|
|
|
IsUpdate = true
|
|
|
|
|
};
|
|
|
|
|
temp.SetAttribure(gxItem);
|
|
|
|
|
temp.Shape2 = gxItem.ShapeCopy;
|
|
|
|
|
if (FeatureAPI.IsAdjacent(gxItem.ShapeCopy, pBGFeature.ShapeCopy))
|
|
|
|
|
{
|
|
|
|
|
if (temp.IsEqual(tempGXData))
|
|
|
|
|
{
|
|
|
|
|
if (tempGXData.IsUpdate && tempGXData.UpdateOID > 0)//相邻的更新层图斑与变更层属性相同-数据合并
|
|
|
|
|
{
|
|
|
|
|
gxItem.Delete();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
tempGXData.UpdateOID = gxItem.OID;
|
|
|
|
|
tempGXData.IsUpdate = true;
|
|
|
|
|
tempGXData.SetAttribure(gxItem, gx_FieldsIndex);
|
|
|
|
|
}
|
|
|
|
|
tempGXData.Shape2 = FeatureAPI.Union(temp.Shape2, tempGXData.Shape2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (FeatureAPI.IsContains(gxItem.ShapeCopy, pBGFeature.ShapeCopy))
|
|
|
|
|
{
|
|
|
|
|
if (!temp.IsEqual(tempGXData))//更新图斑包含变更图斑且属性相同
|
|
|
|
|
{
|
|
|
|
|
IGeometry geo = FeatureAPI.Difference(temp.Shape2, tempGXData.Shape2);
|
|
|
|
|
if (geo.IsEmpty)
|
|
|
|
|
{
|
|
|
|
|
if (tempGXData.IsUpdate && tempGXData.UpdateOID > 0)
|
|
|
|
|
{
|
|
|
|
|
gxItem.Delete();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
tempGXData.IsUpdate = temp.IsUpdate;
|
|
|
|
|
tempGXData.UpdateOID = temp.UpdateOID;
|
|
|
|
|
tempGXData.TBBH = temp.TBBH;
|
|
|
|
|
}
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
List<IGeometry> geoList = FeatureAPI.DissolveGeometryByRing(geo);
|
|
|
|
|
foreach (var item in geoList)
|
|
|
|
|
{
|
|
|
|
|
temp = new DLTBGXAttribute(gx_FieldsIndex)
|
|
|
|
|
{
|
|
|
|
|
UpdateOID = gxItem.OID
|
|
|
|
|
};
|
|
|
|
|
if (geoList.IndexOf(item) == 0)
|
|
|
|
|
temp.IsUpdate = true;
|
|
|
|
|
temp.SetAttribure(gxItem);
|
|
|
|
|
temp.Shape2 = item;
|
|
|
|
|
gxDataList.Add(temp);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
IRelationalOperator relational = tempGXData.Shape2 as IRelationalOperator;
|
|
|
|
|
if (relational.Equals(temp.Shape2))
|
|
|
|
|
{
|
|
|
|
|
gxItem.Delete();
|
|
|
|
|
}
|
|
|
|
|
tempGXData.Shape2 = temp.Shape2;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (FeatureAPI.IsContains(pBGFeature.ShapeCopy, gxItem.ShapeCopy))
|
|
|
|
|
{
|
|
|
|
|
if (tempGXData.IsUpdate && tempGXData.UpdateOID > 0)
|
|
|
|
|
{
|
|
|
|
|
gxItem.Delete();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
tempGXData.IsUpdate = temp.IsUpdate;
|
|
|
|
|
tempGXData.UpdateOID = temp.UpdateOID;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (FeatureAPI.IsInterSect(gxItem.ShapeCopy, pBGFeature.ShapeCopy))
|
|
|
|
|
{
|
|
|
|
|
if (temp.IsEqual(tempGXData))//相交且属性相同
|
|
|
|
|
{
|
|
|
|
|
if (tempGXData.IsUpdate && tempGXData.UpdateOID != 0)
|
|
|
|
|
{
|
|
|
|
|
tempGXData.Shape2 = FeatureAPI.Union(temp.Shape2, tempGXData.Shape2);
|
|
|
|
|
gxItem.Delete();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
tempGXData.Shape2 = FeatureAPI.Union(temp.Shape2, tempGXData.Shape2);
|
|
|
|
|
tempGXData.IsUpdate = true;
|
|
|
|
|
tempGXData.UpdateOID = temp.UpdateOID;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
temp.Shape2 = FeatureAPI.Difference(temp.Shape2, tempGXData.Shape2);
|
|
|
|
|
if (!temp.Shape2.IsEmpty)
|
|
|
|
|
{
|
|
|
|
|
List<IGeometry> subGX_Items = FeatureAPI.DissolveGeometryByRing(temp.Shape2);
|
|
|
|
|
foreach (var item in subGX_Items)
|
|
|
|
|
{
|
|
|
|
|
if (subGX_Items.IndexOf(item) == 0)
|
|
|
|
|
{
|
|
|
|
|
temp.Shape2 = item;
|
|
|
|
|
gxDataList.Add(temp);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
temp = new DLTBGXAttribute(gx_FieldsIndex);
|
|
|
|
|
temp.SetAttribure(gxItem);
|
|
|
|
|
temp.Shape2 = item;
|
|
|
|
|
gxDataList.Add(temp);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
gxDataList.Add(tempGXData);//若是更新层没有数据,直接添加勾选的变更图斑
|
|
|
|
|
foreach (var gxItem in gxDataList)
|
|
|
|
|
{
|
|
|
|
|
List<IFeature> jc_Features = FeatureAPI.Identify(gxItem.Shape2, pJC_Layer);
|
|
|
|
|
foreach (var jc in jc_Features)
|
|
|
|
|
{
|
|
|
|
|
DLTBGXAttribute jcData = new DLTBGXAttribute(gx_FieldsIndex);
|
|
|
|
|
jcData.SetAttribure(jc, jc_FieldsIndex);
|
|
|
|
|
if (FeatureAPI.IsAdjacent(gxItem.Shape2, jc.ShapeCopy))//两个图斑是否相邻
|
|
|
|
|
{
|
|
|
|
|
if (gxItem.IsEqual(jcData))
|
|
|
|
|
{
|
|
|
|
|
List<IFeature> list = FeatureAPI.Identify2(jc.ShapeCopy, pGX_Layer);
|
|
|
|
|
if (list.Count > 0)
|
|
|
|
|
continue;
|
|
|
|
|
gxItem.Shape2 = FeatureAPI.Union(gxItem.Shape2, jc.ShapeCopy);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (FeatureAPI.IsInterSect(gxItem.Shape2, jc.ShapeCopy) && !FeatureAPI.IsContains(jc.ShapeCopy, gxItem.Shape2))//相交不包含(部分相交)
|
|
|
|
|
{
|
|
|
|
|
if (gxItem.IsEqual(jcData))
|
|
|
|
|
{
|
|
|
|
|
List<IFeature> list = FeatureAPI.Identify2(jc.ShapeCopy, pGX_Layer);
|
|
|
|
|
if (list.Count > 0)
|
|
|
|
|
continue;
|
|
|
|
|
gxItem.Shape2 = FeatureAPI.Union(gxItem.Shape2, jc.ShapeCopy);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<DLTBGXAttribute> newGXDataList = new List<DLTBGXAttribute>();
|
|
|
|
|
foreach (var gxItem in gxDataList)//根据变更图斑获取更新过程数据
|
|
|
|
|
{
|
|
|
|
|
gxItem.GCDataList.AddRange(GetGXGCData(gxItem, gxItem.Shape2, pGXGC_Layer, pJC_Layer, ref newGXDataList));//已存在的过程数据
|
|
|
|
|
|
|
|
|
|
if (gxItem.Shape == null)//从基础库获取过程数据
|
|
|
|
|
{
|
|
|
|
|
gxItem.GCDataList.AddRange(GetGXGCDataForJCLayer(gxItem, gxItem.Shape2, pJC_Layer, ref newGXDataList));
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
IRelationalOperator relational = gxItem.Shape as IRelationalOperator;
|
|
|
|
|
if (!relational.Equals(gxItem.Shape2))
|
|
|
|
|
{
|
|
|
|
|
List<DLTBGXGCAttribute> gcList = GetGXGCDataForJCLayer(gxItem, FeatureAPI.Difference(gxItem.Shape2, gxItem.Shape), pJC_Layer, ref newGXDataList);
|
|
|
|
|
foreach (var gc in gcList)
|
|
|
|
|
{
|
|
|
|
|
if (FeatureAPI.IsInterSect(gxItem.Shape, gc.Shape) || FeatureAPI.IsInterSect(gc.Shape, gxItem.Shape))
|
|
|
|
|
continue;
|
|
|
|
|
gxItem.GCDataList.Add(gc);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//擦除(更新)和相交(过程)的是否相交的部分
|
|
|
|
|
foreach (var item in newGXDataList)
|
|
|
|
|
{
|
|
|
|
|
if (item.GCDataList.Count > 0)
|
|
|
|
|
if (gxDataList.FirstOrDefault(f => FeatureAPI.IsInterSect(f.Shape2, item.Shape)) == null)
|
|
|
|
|
{
|
|
|
|
|
gxDataList.Add(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
if (gxDataList.Count > 1)
|
|
|
|
|
{
|
|
|
|
|
gxDataList = gxDataList.OrderByDescending(f => f.TBMJ).ToList();
|
|
|
|
|
List<DLTBGXAttribute> result = new List<DLTBGXAttribute>();
|
|
|
|
|
foreach (var item in gxDataList)
|
|
|
|
|
{
|
|
|
|
|
if (item.Shape == null)
|
|
|
|
|
continue;
|
|
|
|
|
if (item.GCDataList.Count == 1)
|
|
|
|
|
{
|
|
|
|
|
List<IFeature> jc_Features = new List<IFeature>();
|
|
|
|
|
jc_Features = FeatureAPI.Identify2(item.GCDataList[0].Shape, pJC_Layer);
|
|
|
|
|
if (jc_Features.Count == 1)
|
|
|
|
|
{
|
|
|
|
|
IRelationalOperator relational = item.GCDataList[0].Shape as IRelationalOperator;
|
|
|
|
|
if (relational.Equals(jc_Features[0].ShapeCopy))//是否是图形变化(过程数据与基础库数据进行对比)
|
|
|
|
|
{
|
|
|
|
|
item.GCDataList[0].BGXW = "1";
|
|
|
|
|
item.BSM = jc_Features[0].Value[jc_Features[0].Fields.FindField("BSM")].ToTrim();
|
|
|
|
|
item.GCDataList[0].BGHTBBSM = item.BSM;
|
|
|
|
|
item.TBBH = jc_Features[0].Value[jc_Features[0].Fields.FindField("TBBH")].ToTrim();
|
|
|
|
|
result.Add(item);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ShapeInfo InterShape = new ShapeInfo(item.Shape);
|
|
|
|
|
DLTBAreaHandle InterHandle = new DLTBAreaHandle(InterShape);
|
|
|
|
|
List<ShapeInfo> InterShapes = InterHandle.GetFeatures();
|
|
|
|
|
if (InterShapes.Count > 1)
|
|
|
|
|
{
|
|
|
|
|
foreach (var subItem in InterShapes)
|
|
|
|
|
{
|
|
|
|
|
DLTBGXAttribute gx = new DLTBGXAttribute(gx_FieldsIndex, item.GCDataList[0]);
|
|
|
|
|
if (InterShapes.IndexOf(subItem) == 0)
|
|
|
|
|
{
|
|
|
|
|
gx.UpdateOID = item.UpdateOID;
|
|
|
|
|
gx.IsUpdate = item.IsUpdate;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gx.IsUpdate = false;
|
|
|
|
|
}
|
|
|
|
|
gx.GCDataList.AddRange(item.GCDataList.FindAll(f => FeatureAPI.IsContains(subItem.Shape, f.Shape)));
|
|
|
|
|
|
|
|
|
|
gx.BSM = "";
|
|
|
|
|
gx.TBBH = "";
|
|
|
|
|
gx.GCDataList.ForEach(f =>
|
|
|
|
|
{
|
|
|
|
|
if (f.IsUpdate && !string.IsNullOrWhiteSpace(f.BGHTBBSM))
|
|
|
|
|
{
|
|
|
|
|
gx.TBBH = f.BGHTBBH;
|
|
|
|
|
gx.BSM = f.BGHTBBSM;
|
|
|
|
|
}
|
|
|
|
|
f.BGXW = "2";
|
|
|
|
|
});
|
|
|
|
|
if (string.IsNullOrWhiteSpace(gx.BSM))
|
|
|
|
|
{
|
|
|
|
|
gx.IsUpdate = false;
|
|
|
|
|
}
|
|
|
|
|
if (gx.GCDataList.Count > 1 && !gx.IsUpdate)
|
|
|
|
|
gx.BSM = "";
|
|
|
|
|
result.Add(gx);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (result.Count == 0)
|
|
|
|
|
{
|
|
|
|
|
result.Add(item);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (result.FirstOrDefault(f => FeatureAPI.IsContains(f.Shape, item.Shape)) != null)
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (result.FirstOrDefault(f => f.BSM == item.BSM) != null)
|
|
|
|
|
{
|
|
|
|
|
item.BSM = "";
|
|
|
|
|
item.GCDataList.ForEach(f => f.BGHTBBSM = "");
|
|
|
|
|
}
|
|
|
|
|
result.Add(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
item.BSM = "";
|
|
|
|
|
item.TBBH = "";
|
|
|
|
|
item.GCDataList.ForEach(f =>
|
|
|
|
|
{
|
|
|
|
|
if (f.IsUpdate && !string.IsNullOrWhiteSpace(f.BGHTBBSM))
|
|
|
|
|
{
|
|
|
|
|
item.TBBH = f.BGHTBBH;
|
|
|
|
|
item.BSM = f.BGHTBBSM;
|
|
|
|
|
}
|
|
|
|
|
f.BGXW = "2";
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
if (gxDataList.Count == 1)
|
|
|
|
|
{
|
|
|
|
|
if (gxDataList[0].GCDataList.Count == 1)
|
|
|
|
|
{
|
|
|
|
|
if (!gxDataList[0].IsUpdate)
|
|
|
|
|
{
|
|
|
|
|
gxDataList[0].GCDataList[0].BGXW = "1";
|
|
|
|
|
gxDataList[0].BSM = gxDataList[0].GCDataList[0].BGHTBBSM;
|
|
|
|
|
gxDataList[0].TBBH = gxDataList[0].GCDataList[0].BGHTBBH;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gxDataList[0].GCDataList[0].BGXW = "2";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gxDataList[0].TBBH = "";
|
|
|
|
|
gxDataList[0].BSM = "";
|
|
|
|
|
gxDataList[0].GCDataList.ForEach(f =>
|
|
|
|
|
{
|
|
|
|
|
if (f.IsUpdate && !string.IsNullOrWhiteSpace(f.BGHTBBSM))
|
|
|
|
|
{
|
|
|
|
|
gxDataList[0].TBBH = f.BGHTBBH;
|
|
|
|
|
gxDataList[0].BSM = f.BGHTBBSM;
|
|
|
|
|
}
|
|
|
|
|
f.BGXW = "2";
|
|
|
|
|
});
|
|
|
|
|
if (gxDataList[0].UpdateOID == 0)
|
|
|
|
|
gxDataList[0].IsUpdate = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return gxDataList;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug(ex.Message);
|
|
|
|
|
throw ex;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<DLTBGXGCAttribute> GetGXGCDataForJCLayer(DLTBGXAttribute pBGFeature, IGeometry pGXShape, IFeatureLayer pJC_Layer, ref List<DLTBGXAttribute> newGXData)
|
|
|
|
|
{
|
|
|
|
|
List<DLTBGXGCAttribute> result = new List<DLTBGXGCAttribute>();
|
|
|
|
|
List<IFeature> jc_Features = new List<IFeature>();
|
|
|
|
|
jc_Features = FeatureAPI.Identify2(pGXShape, pJC_Layer);
|
|
|
|
|
foreach (var jc in jc_Features)
|
|
|
|
|
{
|
|
|
|
|
DLTBGXGCAttribute gxgc = new DLTBGXGCAttribute(gxgc_FieldsIndex);
|
|
|
|
|
//gxgc.BGTBOID = pBGFeature.OID.ToString();
|
|
|
|
|
gxgc.SetBGQAttribure(jc, jc_FieldsIndex);
|
|
|
|
|
gxgc.SetBGHAttribure(jc, jc_FieldsIndex);
|
|
|
|
|
gxgc.BGMJ = jc.Value[jc.Fields.FindField("TBMJ")].ToDouble();
|
|
|
|
|
gxgc.BGHTBBH = jc.Value[jc.Fields.FindField("TBBH")].ToTrim();
|
|
|
|
|
if (FeatureAPI.IsAdjacent(jc.ShapeCopy, pGXShape))
|
|
|
|
|
{
|
|
|
|
|
DLTBGXAttribute tempgx = new DLTBGXAttribute(gx_FieldsIndex);
|
|
|
|
|
tempgx.SetAttribure(jc, jc_FieldsIndex);
|
|
|
|
|
if (pBGFeature.IsEqual(tempgx))
|
|
|
|
|
{
|
|
|
|
|
gxgc.Shape = jc.ShapeCopy;
|
|
|
|
|
result.Add(gxgc);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (FeatureAPI.IsContains(pGXShape, jc.ShapeCopy))
|
|
|
|
|
{
|
|
|
|
|
gxgc.Shape = jc.ShapeCopy;
|
|
|
|
|
gxgc.SetBGHAttribure(pBGFeature);
|
|
|
|
|
if (pBGFeature.FieldsValue.ContainsKey("XZQTZLX"))
|
|
|
|
|
{
|
|
|
|
|
gxgc.SetXZQTZLX(pBGFeature.FieldsValue["XZQTZLX"].ToTrim());
|
|
|
|
|
}
|
|
|
|
|
if (FeatureAPI.IsContains(jc.ShapeCopy, pGXShape))
|
|
|
|
|
{
|
|
|
|
|
gxgc.BGHTBBSM = jc.Value[jc.Fields.FindField("BSM")].ToTrim();
|
|
|
|
|
}
|
|
|
|
|
result.Add(gxgc);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
double jc_MJ = gxgc.BGMJ;
|
|
|
|
|
//相交部分图形
|
|
|
|
|
IGeometry IntersectGeo = FeatureAPI.InterSect(jc.ShapeCopy, pGXShape);
|
|
|
|
|
if (IntersectGeo.IsEmpty)
|
|
|
|
|
continue;
|
|
|
|
|
#region 图斑分割/合并/拆分多部件后进行面积平差
|
|
|
|
|
List<DLTBGXGCAttribute> Area_GXGCAttribure = new List<DLTBGXGCAttribute>();
|
|
|
|
|
ShapeInfo InterShape = new ShapeInfo(IntersectGeo);
|
|
|
|
|
DLTBAreaHandle InterHandle = new DLTBAreaHandle(InterShape);
|
|
|
|
|
List<ShapeInfo> InterShapes = InterHandle.GetFeatures();
|
|
|
|
|
List<ShapeInfo> areaOperationData = new List<ShapeInfo>();
|
|
|
|
|
int id = 0;
|
|
|
|
|
foreach (var item in InterShapes)
|
|
|
|
|
{
|
|
|
|
|
id++;
|
|
|
|
|
item.ID = id;
|
|
|
|
|
areaOperationData.Add(item);
|
|
|
|
|
}
|
|
|
|
|
IGeometry DiffGeo = FeatureAPI.Difference(jc.ShapeCopy, pGXShape);
|
|
|
|
|
List<ShapeInfo> DiffShapes = null;
|
|
|
|
|
if (DiffGeo != null && !DiffGeo.IsEmpty)
|
|
|
|
|
{
|
|
|
|
|
ShapeInfo DiffShape = new ShapeInfo(DiffGeo);
|
|
|
|
|
DLTBAreaHandle DiffHandle = new DLTBAreaHandle(DiffShape);
|
|
|
|
|
DiffShapes = DiffHandle.GetFeatures();
|
|
|
|
|
foreach (var item in DiffShapes)
|
|
|
|
|
{
|
|
|
|
|
id++;
|
|
|
|
|
item.ID = id;
|
|
|
|
|
areaOperationData.Add(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
AreaAdjustment2(areaOperationData, jc_MJ);//过程数据平差
|
|
|
|
|
foreach (var item in areaOperationData)
|
|
|
|
|
{
|
|
|
|
|
if (InterShapes != null)
|
|
|
|
|
{
|
|
|
|
|
if (InterShapes.FirstOrDefault(f => f.ID == item.ID) != null)
|
|
|
|
|
{
|
|
|
|
|
InterShapes.FirstOrDefault(f => f.ID == item.ID).SetArea(item.Area);
|
|
|
|
|
}
|
|
|
|
|
else if (DiffShapes != null)
|
|
|
|
|
{
|
|
|
|
|
if (DiffShapes.FirstOrDefault(f => f.ID == item.ID) != null)
|
|
|
|
|
{
|
|
|
|
|
DiffShapes.FirstOrDefault(f => f.ID == item.ID).SetArea(item.Area);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
foreach (var item in InterShapes)//return 过程数据
|
|
|
|
|
{
|
|
|
|
|
DLTBGXGCAttribute gxgc2 = new DLTBGXGCAttribute(gxgc_FieldsIndex);
|
|
|
|
|
gxgc2.SetBGQAttribure(jc, jc_FieldsIndex);
|
|
|
|
|
gxgc2.SetBGHAttribure(pBGFeature);
|
|
|
|
|
gxgc2.BGMJ = item.Area;
|
|
|
|
|
gxgc2.Shape = item.Shape;
|
|
|
|
|
result.Add(gxgc2);
|
|
|
|
|
}
|
|
|
|
|
for (int j = 0; j < DiffShapes.Count; j++)//ref newGXData更新数据
|
|
|
|
|
{
|
|
|
|
|
DLTBGXGCAttribute gxgc2 = new DLTBGXGCAttribute(gxgc_FieldsIndex);
|
|
|
|
|
gxgc2.SetBGQAttribure(jc, jc_FieldsIndex);
|
|
|
|
|
gxgc2.SetBGHAttribure(jc, jc_FieldsIndex);
|
|
|
|
|
gxgc2.Shape = DiffShapes[j].Shape;
|
|
|
|
|
gxgc2.BGMJ = DiffShapes[j].Area;
|
|
|
|
|
DLTBGXAttribute newGXData3 = new DLTBGXAttribute(gx_FieldsIndex, gxgc2);
|
|
|
|
|
newGXData3.BSM = gxgc.BGHTBBSM;
|
|
|
|
|
//newGXData3.TBBH = gxgc.BGHTBBH;
|
|
|
|
|
newGXData3.GCDataList.Add(gxgc2);
|
|
|
|
|
newGXData.Add(newGXData3);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 从更新过程层获取过程数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="pBGFeature">勾选的变更数据</param>
|
|
|
|
|
/// <param name="pGXShape">变更图形</param>
|
|
|
|
|
/// <param name="pGXGC_Layer"></param>
|
|
|
|
|
/// <param name="pJC_Layer"></param>
|
|
|
|
|
/// <param name="newGXData"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
private List<DLTBGXGCAttribute> GetGXGCData(DLTBGXAttribute pBGFeature, IGeometry pGXShape, IFeatureLayer pGXGC_Layer, IFeatureLayer pJC_Layer, ref List<DLTBGXAttribute> newGXData)
|
|
|
|
|
{
|
|
|
|
|
List<DLTBGXGCAttribute> result = new List<DLTBGXGCAttribute>();
|
|
|
|
|
//foreach (var gx in newGXData)
|
|
|
|
|
int gxCount = newGXData.Count;
|
|
|
|
|
for (int num = 0; num < gxCount; num++)
|
|
|
|
|
{
|
|
|
|
|
var gx = newGXData[num];
|
|
|
|
|
foreach (var gc in gx.GCDataList)
|
|
|
|
|
{
|
|
|
|
|
if (FeatureAPI.IsContains(gc.Shape, pGXShape))
|
|
|
|
|
{
|
|
|
|
|
double jc_MJ = gc.BGMJ;
|
|
|
|
|
//相交部分图形
|
|
|
|
|
IGeometry IntersectGeo = FeatureAPI.InterSect(gc.Shape, pGXShape);
|
|
|
|
|
if (IntersectGeo.IsEmpty)
|
|
|
|
|
continue;
|
|
|
|
|
#region 图斑分割/合并/拆分多部件后进行面积平差
|
|
|
|
|
List<DLTBGXGCAttribute> Area_GXGCAttribure = new List<DLTBGXGCAttribute>();
|
|
|
|
|
ShapeInfo InterShape = new ShapeInfo(IntersectGeo);
|
|
|
|
|
DLTBAreaHandle InterHandle = new DLTBAreaHandle(InterShape);
|
|
|
|
|
List<ShapeInfo> InterShapes = InterHandle.GetFeatures();
|
|
|
|
|
List<ShapeInfo> areaOperationData = new List<ShapeInfo>();
|
|
|
|
|
int id = 0;
|
|
|
|
|
foreach (var item in InterShapes)
|
|
|
|
|
{
|
|
|
|
|
id++;
|
|
|
|
|
item.ID = id;
|
|
|
|
|
areaOperationData.Add(item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IGeometry DiffGeo = FeatureAPI.Difference(gc.Shape, pGXShape);
|
|
|
|
|
List<ShapeInfo> DiffShapes = null;
|
|
|
|
|
if (DiffGeo != null && !DiffGeo.IsEmpty)
|
|
|
|
|
{
|
|
|
|
|
ShapeInfo DiffShape = new ShapeInfo(DiffGeo);
|
|
|
|
|
DLTBAreaHandle DiffHandle = new DLTBAreaHandle(DiffShape);
|
|
|
|
|
DiffShapes = DiffHandle.GetFeatures();
|
|
|
|
|
foreach (var item in DiffShapes)
|
|
|
|
|
{
|
|
|
|
|
id++;
|
|
|
|
|
item.ID = id;
|
|
|
|
|
areaOperationData.Add(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
AreaAdjustment2(areaOperationData, jc_MJ);
|
|
|
|
|
foreach (var item in areaOperationData)
|
|
|
|
|
{
|
|
|
|
|
if (InterShapes != null)
|
|
|
|
|
{
|
|
|
|
|
if (InterShapes.FirstOrDefault(f => f.ID == item.ID) != null)
|
|
|
|
|
{
|
|
|
|
|
InterShapes.FirstOrDefault(f => f.ID == item.ID).SetArea(item.Area);
|
|
|
|
|
}
|
|
|
|
|
else if (DiffShapes != null)
|
|
|
|
|
{
|
|
|
|
|
if (DiffShapes.FirstOrDefault(f => f.ID == item.ID) != null)
|
|
|
|
|
{
|
|
|
|
|
DiffShapes.FirstOrDefault(f => f.ID == item.ID).SetArea(item.Area);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
for (int i = 0; i < InterShapes.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
DLTBGXGCAttribute gxgc2 = new DLTBGXGCAttribute(gxgc_FieldsIndex);
|
|
|
|
|
gxgc2.SetBGQAttribure(gc);
|
|
|
|
|
gxgc2.SetBGHAttribure(pBGFeature);
|
|
|
|
|
gxgc2.BGMJ = InterShapes[i].Area;
|
|
|
|
|
if (i == 0)
|
|
|
|
|
{
|
|
|
|
|
gxgc2.Shape = InterShapes[i].Shape;
|
|
|
|
|
result.Add(gxgc2);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gc.BGMJ = InterShapes[i].Area;
|
|
|
|
|
gc.Shape = InterShapes[i].Shape;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (DiffShapes != null)
|
|
|
|
|
{
|
|
|
|
|
for (int j = 0; j < DiffShapes.Count; j++)
|
|
|
|
|
{
|
|
|
|
|
if (j == 0)
|
|
|
|
|
{
|
|
|
|
|
gc.Shape = DiffShapes[j].Shape;
|
|
|
|
|
gc.BGMJ = DiffShapes[j].Area;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
DLTBGXGCAttribute gxgc2 = new DLTBGXGCAttribute(gxgc_FieldsIndex);
|
|
|
|
|
gxgc2.SetBGQAttribure(gc);
|
|
|
|
|
gxgc2.SetBGHAttribure(pBGFeature);
|
|
|
|
|
gxgc2.Shape = DiffShapes[j].Shape;
|
|
|
|
|
gxgc2.BGMJ = DiffShapes[j].Area;
|
|
|
|
|
|
|
|
|
|
DLTBGXAttribute newGXData3 = new DLTBGXAttribute(gx_FieldsIndex, gxgc2)
|
|
|
|
|
{
|
|
|
|
|
BSM = gc.BGHTBBSM
|
|
|
|
|
};
|
|
|
|
|
newGXData3.GCDataList.Add(gxgc2);
|
|
|
|
|
newGXData.Add(newGXData3);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gx.GCDataList.Remove(gc);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else if (FeatureAPI.GetEqual(gc.Shape, pGXShape) || FeatureAPI.IsContains(pGXShape, gc.Shape))
|
|
|
|
|
{
|
|
|
|
|
gc.SetBGHAttribure(pBGFeature);
|
|
|
|
|
result.Add(gc);
|
|
|
|
|
gx.GCDataList.Remove(gc);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
double jc_MJ = gc.BGMJ;
|
|
|
|
|
//相交部分图形
|
|
|
|
|
IGeometry IntersectGeo = FeatureAPI.InterSect(gc.Shape, pGXShape);
|
|
|
|
|
if (IntersectGeo.IsEmpty)
|
|
|
|
|
continue;
|
|
|
|
|
#region 图斑分割/合并/拆分多部件后进行面积平差
|
|
|
|
|
List<DLTBGXGCAttribute> Area_GXGCAttribure = new List<DLTBGXGCAttribute>();
|
|
|
|
|
ShapeInfo InterShape = new ShapeInfo(IntersectGeo);
|
|
|
|
|
DLTBAreaHandle InterHandle = new DLTBAreaHandle(InterShape);
|
|
|
|
|
List<ShapeInfo> InterShapes = InterHandle.GetFeatures();
|
|
|
|
|
List<ShapeInfo> areaOperationData = new List<ShapeInfo>();
|
|
|
|
|
int id = 0;
|
|
|
|
|
foreach (var item in InterShapes)
|
|
|
|
|
{
|
|
|
|
|
id++;
|
|
|
|
|
item.ID = id;
|
|
|
|
|
areaOperationData.Add(item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IGeometry DiffGeo = FeatureAPI.Difference(gc.Shape, pGXShape);
|
|
|
|
|
List<ShapeInfo> DiffShapes = null;
|
|
|
|
|
if (DiffGeo != null && !DiffGeo.IsEmpty)
|
|
|
|
|
{
|
|
|
|
|
ShapeInfo DiffShape = new ShapeInfo(DiffGeo);
|
|
|
|
|
DLTBAreaHandle DiffHandle = new DLTBAreaHandle(DiffShape);
|
|
|
|
|
DiffShapes = DiffHandle.GetFeatures();
|
|
|
|
|
|
|
|
|
|
foreach (var item in DiffShapes)
|
|
|
|
|
{
|
|
|
|
|
id++;
|
|
|
|
|
item.ID = id;
|
|
|
|
|
areaOperationData.Add(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AreaAdjustment2(areaOperationData, jc_MJ);
|
|
|
|
|
foreach (var item in areaOperationData)
|
|
|
|
|
{
|
|
|
|
|
if (InterShapes != null)
|
|
|
|
|
{
|
|
|
|
|
if (InterShapes.FirstOrDefault(f => f.ID == item.ID) != null)
|
|
|
|
|
{
|
|
|
|
|
InterShapes.FirstOrDefault(f => f.ID == item.ID).SetArea(item.Area);
|
|
|
|
|
}
|
|
|
|
|
else if (DiffShapes != null)
|
|
|
|
|
{
|
|
|
|
|
if (DiffShapes.FirstOrDefault(f => f.ID == item.ID) != null)
|
|
|
|
|
{
|
|
|
|
|
DiffShapes.FirstOrDefault(f => f.ID == item.ID).SetArea(item.Area);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
for (int i = 0; i < InterShapes.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
DLTBGXGCAttribute gxgc2 = new DLTBGXGCAttribute(gxgc_FieldsIndex);
|
|
|
|
|
gxgc2.SetBGQAttribure(gc);
|
|
|
|
|
gxgc2.SetBGHAttribure(pBGFeature);
|
|
|
|
|
gxgc2.BGMJ = InterShapes[i].Area;
|
|
|
|
|
if (i == 0)
|
|
|
|
|
{
|
|
|
|
|
IRelationalOperator relational = InterShapes[i].Shape as IRelationalOperator;
|
|
|
|
|
if (result.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
bool x = false;
|
|
|
|
|
foreach (var item in result)
|
|
|
|
|
{
|
|
|
|
|
if (relational.Equals(item.Shape))
|
|
|
|
|
{
|
|
|
|
|
x = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!x)
|
|
|
|
|
{
|
|
|
|
|
gxgc2.Shape = InterShapes[i].Shape;
|
|
|
|
|
result.Add(gxgc2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gxgc2.Shape = InterShapes[i].Shape;
|
|
|
|
|
result.Add(gxgc2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gc.BGMJ = InterShapes[i].Area;
|
|
|
|
|
gc.Shape = InterShapes[i].Shape;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (DiffShapes != null)
|
|
|
|
|
{
|
|
|
|
|
for (int j = 0; j < DiffShapes.Count; j++)
|
|
|
|
|
{
|
|
|
|
|
if (j == 0)
|
|
|
|
|
{
|
|
|
|
|
gc.Shape = DiffShapes[j].Shape;
|
|
|
|
|
gc.BGMJ = DiffShapes[j].Area;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
DLTBGXGCAttribute gxgc2 = new DLTBGXGCAttribute(gxgc_FieldsIndex);
|
|
|
|
|
gxgc2.SetBGQAttribure(gc);
|
|
|
|
|
gxgc2.SetBGHAttribure(pBGFeature);
|
|
|
|
|
gxgc2.Shape = DiffShapes[j].Shape;
|
|
|
|
|
gxgc2.BGMJ = DiffShapes[j].Area;
|
|
|
|
|
|
|
|
|
|
DLTBGXAttribute newGXData3 = new DLTBGXAttribute(gx_FieldsIndex, gxgc2);
|
|
|
|
|
newGXData3.BSM = gc.BGHTBBSM;
|
|
|
|
|
newGXData3.GCDataList.Add(gxgc2);
|
|
|
|
|
newGXData.Add(newGXData3);
|
|
|
|
|
}
|
|
|
|
|
//gc.Shape = DiffShapes[j].Shape;
|
|
|
|
|
//gc.BGMJ = DiffShapes[j].Area;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
gxCount = newGXData.Count;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<IFeature> gxgc_Features = FeatureAPI.Identify2(pGXShape, pGXGC_Layer);
|
|
|
|
|
foreach (var gxgcItem in gxgc_Features)
|
|
|
|
|
{
|
|
|
|
|
if (result.FirstOrDefault(f => FeatureAPI.IsInterSect(f.Shape, gxgcItem.ShapeCopy)) != null)
|
|
|
|
|
continue;//变更层生成更新层数据相交到过程层数据直接略过
|
|
|
|
|
DLTBGXGCAttribute gxgc = new DLTBGXGCAttribute(gxgc_FieldsIndex);
|
|
|
|
|
gxgc.SetAttribure(gxgcItem, gxgc_FieldsIndex);
|
|
|
|
|
gxgc.Shape = gxgcItem.ShapeCopy;
|
|
|
|
|
gxgc.IsUpdate = true;
|
|
|
|
|
gxgc.UpdateOID = gxgcItem.OID;
|
|
|
|
|
gxgc.BGMJ = gxgcItem.Value[gxgcItem.Fields.FindField("TBBGMJ")].ToDouble();
|
|
|
|
|
if (FeatureAPI.GetEqual(pGXShape, gxgcItem.ShapeCopy) || FeatureAPI.IsContains(pGXShape, gxgcItem.ShapeCopy))
|
|
|
|
|
{//更新层与过程层图形是否相等/包含
|
|
|
|
|
List<IFeature> jc_Features = new List<IFeature>();
|
|
|
|
|
var jc = FeatureAPI.Identify2(pGXShape, pJC_Layer);
|
|
|
|
|
if (jc.Count == 1 && FeatureAPI.Difference(jc[0].ShapeCopy, gxgcItem.ShapeCopy).IsEmpty)
|
|
|
|
|
{
|
|
|
|
|
gxgc.BGHTBBSM = jc[0].Value[jc[0].Fields.FindField("BSM")].ToString();
|
|
|
|
|
gxgc.BGHTBBH = jc[0].Value[jc[0].Fields.FindField("TBBH")].ToString();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//if (gxgc.BGXW == "1")
|
|
|
|
|
gxgc.BGHTBBSM = "";
|
|
|
|
|
}
|
|
|
|
|
result.Add(gxgc);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
double jc_MJ = gxgc.BGMJ;
|
|
|
|
|
//相交部分图形
|
|
|
|
|
IGeometry IntersectGeo = FeatureAPI.InterSect(gxgcItem.ShapeCopy, pGXShape);
|
|
|
|
|
#region 图斑分割/合并/拆分多部件后进行面积平差
|
|
|
|
|
List<DLTBGXGCAttribute> Area_GXGCAttribure = new List<DLTBGXGCAttribute>();
|
|
|
|
|
ShapeInfo InterShape = new ShapeInfo(IntersectGeo);
|
|
|
|
|
DLTBAreaHandle InterHandle = new DLTBAreaHandle(InterShape);
|
|
|
|
|
List<ShapeInfo> InterShapes = InterHandle.GetFeatures();
|
|
|
|
|
List<ShapeInfo> areaOperationData = new List<ShapeInfo>();
|
|
|
|
|
int id = 0;
|
|
|
|
|
foreach (var item in InterShapes)
|
|
|
|
|
{
|
|
|
|
|
id++;
|
|
|
|
|
item.ID = id;
|
|
|
|
|
areaOperationData.Add(item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IGeometry DiffGeo = FeatureAPI.Difference(gxgcItem.ShapeCopy, pGXShape);
|
|
|
|
|
List<ShapeInfo> DiffShapes = null;
|
|
|
|
|
if (DiffGeo != null && !DiffGeo.IsEmpty)
|
|
|
|
|
{
|
|
|
|
|
ShapeInfo DiffShape = new ShapeInfo(DiffGeo);
|
|
|
|
|
DLTBAreaHandle DiffHandle = new DLTBAreaHandle(DiffShape);
|
|
|
|
|
DiffShapes = DiffHandle.GetFeatures();
|
|
|
|
|
foreach (var item in DiffShapes)
|
|
|
|
|
{
|
|
|
|
|
id++;
|
|
|
|
|
item.ID = id;
|
|
|
|
|
areaOperationData.Add(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AreaAdjustment2(areaOperationData, jc_MJ);
|
|
|
|
|
foreach (var item in areaOperationData)
|
|
|
|
|
{
|
|
|
|
|
if (InterShapes != null)
|
|
|
|
|
{
|
|
|
|
|
if (InterShapes.FirstOrDefault(f => f.ID == item.ID) != null)
|
|
|
|
|
{
|
|
|
|
|
InterShapes.FirstOrDefault(f => f.ID == item.ID).SetArea(item.Area);
|
|
|
|
|
}
|
|
|
|
|
else if (DiffShapes != null)
|
|
|
|
|
{
|
|
|
|
|
if (DiffShapes.FirstOrDefault(f => f.ID == item.ID) != null)
|
|
|
|
|
{
|
|
|
|
|
DiffShapes.FirstOrDefault(f => f.ID == item.ID).SetArea(item.Area);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < InterShapes.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
DLTBGXGCAttribute gxgc2 = new DLTBGXGCAttribute(gxgc_FieldsIndex);
|
|
|
|
|
gxgc2.SetAttribure(gxgcItem, gxgc_FieldsIndex);
|
|
|
|
|
gxgc2.SetBGHAttribure(pBGFeature);
|
|
|
|
|
gxgc2.BGMJ = InterShapes[i].Area;
|
|
|
|
|
gxgc2.Shape = InterShapes[i].Shape;
|
|
|
|
|
if (i == 0)
|
|
|
|
|
{
|
|
|
|
|
gxgc2.IsUpdate = true;
|
|
|
|
|
gxgc2.UpdateOID = gxgc.UpdateOID;
|
|
|
|
|
gxgc2.BGHTBBSM = gxgc.BGHTBBSM;
|
|
|
|
|
result.Add(gxgc2);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
result.Add(gxgc2);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//release.ManageLifetime(IntersectGeo);
|
|
|
|
|
for (int j = 0; j < DiffShapes.Count; j++)
|
|
|
|
|
{
|
|
|
|
|
DLTBGXGCAttribute gxgc2 = new DLTBGXGCAttribute(gxgc_FieldsIndex);
|
|
|
|
|
gxgc2.SetAttribure(gxgcItem, gxgc_FieldsIndex);
|
|
|
|
|
//gxgc2.SetBGHAttribure(gxgcItem, gxgc_FieldsIndex);
|
|
|
|
|
gxgc2.Shape = DiffShapes[j].Shape;
|
|
|
|
|
gxgc2.BGMJ = DiffShapes[j].Area;
|
|
|
|
|
|
|
|
|
|
DLTBGXAttribute newGXData3 = new DLTBGXAttribute(gx_FieldsIndex, gxgc2);
|
|
|
|
|
newGXData3.BSM = gxgc.BGHTBBSM;
|
|
|
|
|
newGXData3.GCDataList.Add(gxgc2);
|
|
|
|
|
newGXData.Add(newGXData3);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
public void InsertGXFeature(DLTBGXAttribute pGXData, IFeatureLayer pGX_Layer, bool isUpdateTBBH)
|
|
|
|
|
{
|
|
|
|
|
IFeatureCursor updateCursor = null;
|
|
|
|
|
IFeatureCursor gx_cursor = null;
|
|
|
|
|
IFeatureBuffer gx_buffer = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (pGXData.IsUpdate)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrWhiteSpace(pGXData.BSM))
|
|
|
|
|
{
|
|
|
|
|
string bsmPrefix = MaxBSM.Substring(0, 10);
|
|
|
|
|
int MaxNum = Convert.ToInt32(MaxBSM.Substring(9));
|
|
|
|
|
MaxBSM = bsmPrefix + (MaxNum + 1).ToString().PadLeft(8, '0');
|
|
|
|
|
pGXData.BSM = MaxBSM;
|
|
|
|
|
}
|
|
|
|
|
IFeature f = pGX_Layer.FeatureClass.GetFeature(pGXData.UpdateOID);
|
|
|
|
|
if (pGXData.GCDataList.Count == 1 && pGXData.GCDataList[0].BGXW == "1")
|
|
|
|
|
{
|
|
|
|
|
if (!isUpdateTBBH)
|
|
|
|
|
{
|
|
|
|
|
f.Value[gx_FieldsIndex["TBBH"]] = pGXData.GCDataList[0].BGHTBBH;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
UpdateFeature(f, pGXData);
|
|
|
|
|
f.Store();
|
|
|
|
|
pGXData.OID = f.OID;
|
|
|
|
|
foreach (var gxgc in pGXData.GCDataList)
|
|
|
|
|
{
|
|
|
|
|
gxgc.BGHTBBSM = pGXData.BSM;
|
|
|
|
|
gxgc.BGHTBBH = pGXData.TBBH;
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if (pGXData.GCDataList.Count == 1)
|
|
|
|
|
{
|
|
|
|
|
//新增不需要合并的,判断BSM是否为空,为空认为是图形变更,需进行重新编号
|
|
|
|
|
if (string.IsNullOrWhiteSpace(pGXData.BSM))
|
|
|
|
|
{
|
|
|
|
|
string bsmPrefix = MaxBSM.Substring(0, 10);
|
|
|
|
|
int MaxNum = Convert.ToInt32(MaxBSM.Substring(9));
|
|
|
|
|
MaxBSM = bsmPrefix + (MaxNum + 1).ToString().PadLeft(8, '0');
|
|
|
|
|
pGXData.BSM = MaxBSM;
|
|
|
|
|
pGXData.GCDataList[0].BGHTBBSM = pGXData.BSM;
|
|
|
|
|
pGXData.GCDataList[0].BGHTBBH = pGXData.TBBH;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pGXData.GCDataList[0].BGXW = "1";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (pGXData.GCDataList.Count > 1)
|
|
|
|
|
{
|
|
|
|
|
//新增需要合并的,认为图形变更
|
|
|
|
|
if (string.IsNullOrWhiteSpace(pGXData.BSM))
|
|
|
|
|
{
|
|
|
|
|
string bsmPrefix = MaxBSM.Substring(0, 10);
|
|
|
|
|
int MaxNum = Convert.ToInt32(MaxBSM.Substring(9));
|
|
|
|
|
MaxBSM = bsmPrefix + (MaxNum + 1).ToString().PadLeft(8, '0');
|
|
|
|
|
pGXData.BSM = MaxBSM;
|
|
|
|
|
pGXData.GCDataList.ForEach(f => { f.BGXW = "2"; f.BGHTBBSM = pGXData.BSM; });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
gx_cursor = pGX_Layer.FeatureClass.Insert(true);
|
|
|
|
|
gx_buffer = pGX_Layer.FeatureClass.CreateFeatureBuffer();
|
|
|
|
|
gx_buffer.Shape = pGXData.Shape;
|
|
|
|
|
foreach (var fieldName in gx_FieldsIndex.Keys)
|
|
|
|
|
{
|
|
|
|
|
if (fieldName == "TBMJ")
|
|
|
|
|
{
|
|
|
|
|
gx_buffer.Value[gx_FieldsIndex[fieldName]] = pGXData.TBMJ;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (fieldName == "GXSJ")
|
|
|
|
|
{
|
|
|
|
|
gx_buffer.Value[gx_FieldsIndex[fieldName]] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (fieldName == "TBBH")
|
|
|
|
|
{
|
|
|
|
|
if (pGXData.GCDataList.Count == 1 && pGXData.GCDataList[0].BGXW == "1")
|
|
|
|
|
{
|
|
|
|
|
if (!isUpdateTBBH)
|
|
|
|
|
{
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(pGXData.GCDataList[0].BGHTBBH))
|
|
|
|
|
gx_buffer.Value[gx_FieldsIndex[fieldName]] = pGXData.GCDataList[0].BGHTBBH;
|
|
|
|
|
else
|
|
|
|
|
gx_buffer.Value[gx_FieldsIndex[fieldName]] = pGXData.FieldsValue[fieldName];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gx_buffer.Value[gx_FieldsIndex[fieldName]] = pGXData.FieldsValue[fieldName];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gx_buffer.Value[gx_FieldsIndex[fieldName]] = pGXData.FieldsValue[fieldName];
|
|
|
|
|
}
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (fieldName == "YSDM")
|
|
|
|
|
{
|
|
|
|
|
gx_buffer.Value[gx_FieldsIndex[fieldName]] = "2001010100";
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (fieldName == "SJNF")
|
|
|
|
|
{
|
|
|
|
|
gx_buffer.Value[gx_FieldsIndex[fieldName]] = "2023";
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (fieldName == "KCMJ")
|
|
|
|
|
{
|
|
|
|
|
gx_buffer.Value[gx_FieldsIndex[fieldName]] = Math.Round(pGXData.TBMJ * pGXData.KCXS, 2);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (fieldName == "TBDLMJ")
|
|
|
|
|
{
|
|
|
|
|
double dKCMJ_Temp = Math.Round(pGXData.TBMJ * pGXData.KCXS, 2);
|
|
|
|
|
gx_buffer.Value[gx_FieldsIndex[fieldName]] = Math.Round(pGXData.TBMJ - dKCMJ_Temp, 2);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (fieldName == "BGTBOID")
|
|
|
|
|
{
|
|
|
|
|
gx_buffer.Value[gx_FieldsIndex[fieldName]] = pGXData.BGTBOID;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (pGXData.FieldsValue.Keys.Contains(fieldName))
|
|
|
|
|
gx_buffer.Value[gx_FieldsIndex[fieldName]] = pGXData.FieldsValue[fieldName];
|
|
|
|
|
}
|
|
|
|
|
object oid = gx_cursor.InsertFeature(gx_buffer);
|
|
|
|
|
gx_cursor.Flush();
|
|
|
|
|
pGXData.OID = Convert.ToInt32(oid);
|
|
|
|
|
Marshal.ReleaseComObject(gx_buffer);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug("写入更新层数据时发生异常,异常信息如下:");
|
|
|
|
|
LogAPI.Debug(ex);
|
|
|
|
|
LogAPI.Debug("异常信息结束");
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
if (updateCursor != null)
|
|
|
|
|
Marshal.ReleaseComObject(updateCursor);
|
|
|
|
|
if (gx_cursor != null)
|
|
|
|
|
Marshal.ReleaseComObject(gx_cursor);
|
|
|
|
|
if (gx_buffer != null)
|
|
|
|
|
Marshal.ReleaseComObject(gx_buffer);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void UpdateFeature(IFeature pFeature, DLTBGXAttribute pData)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
pFeature.Shape = pData.Shape;
|
|
|
|
|
foreach (var key in pData.FieldsIndex.Keys)
|
|
|
|
|
{
|
|
|
|
|
if (pData.FieldsValue == null)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (key == "JCTBBSM")
|
|
|
|
|
continue;
|
|
|
|
|
if (key == "TBBH")
|
|
|
|
|
{
|
|
|
|
|
pFeature.Value[pData.FieldsIndex[key]] = pData.TBBH;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (key == "SJNF")
|
|
|
|
|
{
|
|
|
|
|
pFeature.Value[pData.FieldsIndex[key]] = "2019";
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (key == "TBMJ")
|
|
|
|
|
{
|
|
|
|
|
pFeature.Value[pData.FieldsIndex[key]] = pData.TBMJ;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (key == "BGTBOID")
|
|
|
|
|
{
|
|
|
|
|
pFeature.Value[pData.FieldsIndex[key]] = pData.BGTBOID;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (key == "YSDM")
|
|
|
|
|
{
|
|
|
|
|
pFeature.Value[pData.FieldsIndex[key]] = "2001010100";
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (key == "GXSJ")
|
|
|
|
|
{
|
|
|
|
|
pFeature.Value[pData.FieldsIndex[key]] = new DateTime(2019, 12, 31);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (pData.FieldsValue.Keys.Contains(key))
|
|
|
|
|
{
|
|
|
|
|
pFeature.Value[pData.FieldsIndex[key]] = pData.FieldsValue[key];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
throw ex;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取字段名称及下标值
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="pFields">要素类字段集合</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
private Dictionary<string, int> GetFieldsIndex(IFields pFields)
|
|
|
|
|
{
|
|
|
|
|
Dictionary<string, int> result = new Dictionary<string, int>();
|
|
|
|
|
for (int i = 0; i < pFields.FieldCount; i++)
|
|
|
|
|
{
|
|
|
|
|
IField field = pFields.Field[i];
|
|
|
|
|
if (!field.Editable || field.Name.ToUpper().Contains("SHAPE") || field.Name.ToUpper() == "SJNF") continue;
|
|
|
|
|
result.Add(field.Name.ToUpper(), i);
|
|
|
|
|
Marshal.ReleaseComObject(field);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int InsertGXGCFeature(DLTBGXGCAttribute pGxgc, DLTBGXAttribute pGx, IFeatureLayer pFC)
|
|
|
|
|
{
|
|
|
|
|
IFeatureCursor gxgc_cursor = null;
|
|
|
|
|
IFeatureBuffer gxgc_buffer = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (pGxgc.IsUpdate)
|
|
|
|
|
{
|
|
|
|
|
IFeature updateFeature = pFC.FeatureClass.GetFeature(pGxgc.UpdateOID);
|
|
|
|
|
foreach (var fieldName in gxgc_FieldsIndex.Keys)
|
|
|
|
|
{
|
|
|
|
|
if (fieldName == "TBBGMJ")
|
|
|
|
|
{
|
|
|
|
|
updateFeature.Value[gxgc_FieldsIndex[fieldName]] = pGxgc.BGMJ;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (fieldName == "BGXW")
|
|
|
|
|
{
|
|
|
|
|
updateFeature.Value[gxgc_FieldsIndex[fieldName]] = pGxgc.BGXW;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (fieldName == "BGTBOID")
|
|
|
|
|
{
|
|
|
|
|
updateFeature.Value[gxgc_FieldsIndex[fieldName]] = pGxgc.BGTBOID;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (fieldName == "BGHTBBSM")
|
|
|
|
|
{
|
|
|
|
|
updateFeature.Value[gxgc_FieldsIndex[fieldName]] = pGx.BSM;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (pGxgc.FieldsValue.Keys.Contains(fieldName) && fieldName.Contains("BGH") && pGx.FieldsValue.ContainsKey(GetRemovePrefixString(fieldName, "BGH")))
|
|
|
|
|
{
|
|
|
|
|
updateFeature.Value[gxgc_FieldsIndex[fieldName]] = pGx.FieldsValue[GetRemovePrefixString(fieldName, "BGH")];
|
|
|
|
|
}
|
|
|
|
|
if (pGxgc.FieldsValue == null)
|
|
|
|
|
continue;
|
|
|
|
|
if (pGxgc.FieldsValue.Keys.Contains(fieldName) && !fieldName.Contains("BGH"))
|
|
|
|
|
{
|
|
|
|
|
updateFeature.Value[gxgc_FieldsIndex[fieldName]] = pGxgc.FieldsValue[fieldName];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 变更前_面积维护
|
|
|
|
|
double kcxs = 0;
|
|
|
|
|
//获取变更前扣除系数
|
|
|
|
|
int buffer_F_Index = updateFeature.Fields.FindField("BGQKCXS");
|
|
|
|
|
if (buffer_F_Index != -1)
|
|
|
|
|
{
|
|
|
|
|
if (!(updateFeature.Value[buffer_F_Index] is DBNull))
|
|
|
|
|
kcxs = (double)updateFeature.Value[buffer_F_Index];
|
|
|
|
|
}
|
|
|
|
|
//变更前扣除面积
|
|
|
|
|
double kcmj = 0;
|
|
|
|
|
buffer_F_Index = updateFeature.Fields.FindField("BGQKCMJ");
|
|
|
|
|
if (buffer_F_Index != -1)
|
|
|
|
|
{
|
|
|
|
|
kcmj = Math.Round(pGxgc.BGMJ * kcxs, 2);
|
|
|
|
|
updateFeature.Value[buffer_F_Index] = kcmj;
|
|
|
|
|
}
|
|
|
|
|
//变更前图斑地类面积
|
|
|
|
|
buffer_F_Index = updateFeature.Fields.FindField("BGQTBDLMJ");
|
|
|
|
|
if (buffer_F_Index != -1)
|
|
|
|
|
{
|
|
|
|
|
updateFeature.Value[buffer_F_Index] = pGxgc.BGMJ - kcmj;
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
#region 变更后_面积维护
|
|
|
|
|
kcxs = 0;
|
|
|
|
|
//获取变更后扣除系数
|
|
|
|
|
buffer_F_Index = updateFeature.Fields.FindField("BGHKCXS");
|
|
|
|
|
if (buffer_F_Index != -1)
|
|
|
|
|
{
|
|
|
|
|
if (!(updateFeature.Value[buffer_F_Index] is DBNull))
|
|
|
|
|
kcxs = (double)updateFeature.Value[buffer_F_Index];
|
|
|
|
|
}
|
|
|
|
|
//变更后扣除面积
|
|
|
|
|
kcmj = 0;
|
|
|
|
|
buffer_F_Index = updateFeature.Fields.FindField("BGHKCMJ");
|
|
|
|
|
if (buffer_F_Index != -1)
|
|
|
|
|
{
|
|
|
|
|
kcmj = Math.Round(pGxgc.BGMJ * kcxs, 2);
|
|
|
|
|
updateFeature.Value[buffer_F_Index] = kcmj;
|
|
|
|
|
}
|
|
|
|
|
//变更后图斑地类面积
|
|
|
|
|
buffer_F_Index = updateFeature.Fields.FindField("BGHTBDLMJ");
|
|
|
|
|
if (buffer_F_Index != -1)
|
|
|
|
|
{
|
|
|
|
|
updateFeature.Value[buffer_F_Index] = pGxgc.BGMJ - kcmj;
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
updateFeature.Shape = pGxgc.Shape;
|
|
|
|
|
updateFeature.Store();
|
|
|
|
|
Marshal.ReleaseComObject(updateFeature);
|
|
|
|
|
return pGxgc.UpdateOID;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gxgc_cursor = pFC.FeatureClass.Insert(true);
|
|
|
|
|
gxgc_buffer = pFC.FeatureClass.CreateFeatureBuffer();
|
|
|
|
|
gxgc_buffer.Shape = pGxgc.Shape;
|
|
|
|
|
foreach (var fieldName in gxgc_FieldsIndex.Keys)
|
|
|
|
|
{
|
|
|
|
|
if (fieldName == "TBBGMJ")
|
|
|
|
|
{
|
|
|
|
|
gxgc_buffer.Value[gxgc_FieldsIndex[fieldName]] = pGxgc.BGMJ;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (fieldName == "BGXW")
|
|
|
|
|
{
|
|
|
|
|
gxgc_buffer.Value[gxgc_FieldsIndex[fieldName]] = pGxgc.BGXW;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (fieldName == "GXSJ")
|
|
|
|
|
{
|
|
|
|
|
gxgc_buffer.Value[gxgc_FieldsIndex[fieldName]] = new DateTime(2019, 12, 31);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (fieldName == "BGTBOID")
|
|
|
|
|
{
|
|
|
|
|
gxgc_buffer.Value[gxgc_FieldsIndex[fieldName]] = pGxgc.BGTBOID;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (fieldName == "BGHTBBSM")
|
|
|
|
|
{
|
|
|
|
|
gxgc_buffer.Value[gxgc_FieldsIndex[fieldName]] = pGx.BSM;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (pGxgc.FieldsValue.Keys.Contains(fieldName) && fieldName.Contains("BGH") && pGx.FieldsValue.ContainsKey(GetRemovePrefixString(fieldName, "BGH")))
|
|
|
|
|
{
|
|
|
|
|
gxgc_buffer.Value[gxgc_FieldsIndex[fieldName]] = pGx.FieldsValue[GetRemovePrefixString(fieldName, "BGH")];
|
|
|
|
|
}
|
|
|
|
|
if (pGxgc.FieldsValue.Keys.Contains(fieldName) && !fieldName.Contains("BGH"))
|
|
|
|
|
gxgc_buffer.Value[gxgc_FieldsIndex[fieldName]] = pGxgc.FieldsValue[fieldName];
|
|
|
|
|
}
|
|
|
|
|
#region 变更前_面积维护
|
|
|
|
|
double kcxs = 0;
|
|
|
|
|
//获取变更前扣除系数
|
|
|
|
|
int buffer_F_Index = gxgc_buffer.Fields.FindField("BGQKCXS");
|
|
|
|
|
if (buffer_F_Index != -1)
|
|
|
|
|
{
|
|
|
|
|
if (!(gxgc_buffer.Value[buffer_F_Index] is DBNull))
|
|
|
|
|
kcxs = (double)gxgc_buffer.Value[buffer_F_Index];
|
|
|
|
|
}
|
|
|
|
|
//变更前扣除面积
|
|
|
|
|
double kcmj = 0;
|
|
|
|
|
buffer_F_Index = gxgc_buffer.Fields.FindField("BGQKCMJ");
|
|
|
|
|
if (buffer_F_Index != -1)
|
|
|
|
|
{
|
|
|
|
|
kcmj = Math.Round(pGxgc.BGMJ * kcxs, 2);
|
|
|
|
|
gxgc_buffer.Value[buffer_F_Index] = kcmj;
|
|
|
|
|
}
|
|
|
|
|
//变更前图斑地类面积
|
|
|
|
|
buffer_F_Index = gxgc_buffer.Fields.FindField("BGQTBDLMJ");
|
|
|
|
|
if (buffer_F_Index != -1)
|
|
|
|
|
{
|
|
|
|
|
gxgc_buffer.Value[buffer_F_Index] = pGxgc.BGMJ - kcmj;
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
#region 变更后_面积维护
|
|
|
|
|
kcxs = 0;
|
|
|
|
|
//获取变更后扣除系数
|
|
|
|
|
buffer_F_Index = gxgc_buffer.Fields.FindField("BGHKCXS");
|
|
|
|
|
if (buffer_F_Index != -1)
|
|
|
|
|
{
|
|
|
|
|
if (!(gxgc_buffer.Value[buffer_F_Index] is DBNull))
|
|
|
|
|
kcxs = (double)gxgc_buffer.Value[buffer_F_Index];
|
|
|
|
|
}
|
|
|
|
|
//变更后扣除面积
|
|
|
|
|
kcmj = 0;
|
|
|
|
|
buffer_F_Index = gxgc_buffer.Fields.FindField("BGHKCMJ");
|
|
|
|
|
if (buffer_F_Index != -1)
|
|
|
|
|
{
|
|
|
|
|
kcmj = Math.Round(pGxgc.BGMJ * kcxs, 2);
|
|
|
|
|
gxgc_buffer.Value[buffer_F_Index] = kcmj;
|
|
|
|
|
}
|
|
|
|
|
//变更后图斑地类面积
|
|
|
|
|
buffer_F_Index = gxgc_buffer.Fields.FindField("BGHTBDLMJ");
|
|
|
|
|
if (buffer_F_Index != -1)
|
|
|
|
|
{
|
|
|
|
|
gxgc_buffer.Value[buffer_F_Index] = pGxgc.BGMJ - kcmj;
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
object oid = gxgc_cursor.InsertFeature(gxgc_buffer);
|
|
|
|
|
gxgc_cursor.Flush();
|
|
|
|
|
Marshal.ReleaseComObject(gxgc_buffer);
|
|
|
|
|
return (int)oid;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
throw;
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
if (gxgc_cursor != null)
|
|
|
|
|
Marshal.ReleaseComObject(gxgc_cursor);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void BHXXB(DLTBGXGCAttribute pGxgc, DLTBGXAttribute pGx, IFeatureLayer pFC)
|
|
|
|
|
{
|
|
|
|
|
string dbPath = System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).ProjDir) + @"\BGTJ.sqlite";
|
|
|
|
|
IRDBHelper rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
|
|
|
|
|
if (!rdbHelper.TableIsExist("BHXXB"))
|
|
|
|
|
{
|
|
|
|
|
rdbHelper.ExecuteSQL(" Create TABLE BHXXB ( BGQTBBSM text(100),BGHTBBSM text(100),BGQTBBH text(100),BGHTBBH text(100),BGQZLDWDM text(100),BGHZLDWDM text(100)," +
|
|
|
|
|
"BGQZLDWMC text(100),BGHZLDWMC text(100),BGQQSDWDM text(100),BGHQSDWDM text(100),BGQQSDWMC text(100),BGHQSDWMC text(100),BGQQSXZ text(100),BGHQSXZ text(100)," +
|
|
|
|
|
"BGQDLBM text(100),BGHDLBM text(100),BGQKCDLBM text(100),BGHKCDLBM text(100),BGQKCXS text(100),BGHKCXS text(100),BGQKCMJ NUMERIC,BGHKCMJ NUMERIC,BGQGDLX text(100),BGHGDLX text(100),BGQGDPDJB text(100),BGHGDPDJB text(100),BGQCZCSXM text(100),BGHCZCSXM text(100)," +
|
|
|
|
|
"BGQTBXHDM text(100),BGHTBXHDM text(100),BGQZZSXDM text(100),BGHZZSXDM text(100),BGQMSSM text(100),BGHMSSM text(100),BGQGDDB text(100),BGHGDDB text(100)," +
|
|
|
|
|
"BGMJ NUMERIC,XZQTZLX text(100),BZ text(10),BGXW text(10) ) ");
|
|
|
|
|
}
|
|
|
|
|
string bhxxbField = "BGQTBBSM,BGHTBBSM,BGQTBBH,BGHTBBH,BGQZLDWDM,BGHZLDWDM,BGQZLDWMC,BGHZLDWMC,BGQQSDWDM,BGHQSDWDM,BGQQSDWMC,BGHQSDWMC,BGQQSXZ,BGHQSXZ,BGQDLBM,BGHDLBM,BGQKCDLBM,BGHKCDLBM,BGQKCXS,BGHKCXS,BGQKCMJ,BGHKCMJ,BGQGDLX,BGHGDLX,BGQGDPDJB,BGHGDPDJB,BGQCZCSXM,BGHCZCSXM,BGQTBXHDM,BGHTBXHDM,BGQZZSXDM,BGHZZSXDM,BGQMSSM,BGHMSSM,BGQGDDB,BGHGDDB,BGMJ,XZQTZLX,BZ,BGXW";
|
|
|
|
|
List<string> strSQL = new List<string>();
|
|
|
|
|
|
|
|
|
|
//生成sql语句代码块开始
|
|
|
|
|
string[] bhxxbfieldArr = bhxxbField.Split(',');
|
|
|
|
|
string bhxxbValue = string.Empty;
|
|
|
|
|
foreach (var item in bhxxbfieldArr)
|
|
|
|
|
{
|
|
|
|
|
if (pGxgc.FieldsValue.ContainsKey(item))
|
|
|
|
|
{
|
|
|
|
|
bhxxbValue += string.Format("'{0}',", pGxgc.FieldsValue[item]);
|
|
|
|
|
}
|
|
|
|
|
else if (item == "BGMJ")
|
|
|
|
|
{
|
|
|
|
|
bhxxbValue += string.Format("{0},", pGxgc.BGMJ);
|
|
|
|
|
}
|
|
|
|
|
else if (item == "BGXW")
|
|
|
|
|
{
|
|
|
|
|
bhxxbValue += string.Format("'{0}',", pGxgc.BGXW);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
bhxxbValue += string.Format("'{0}',", "");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
bhxxbValue = bhxxbValue.TrimEnd(',');
|
|
|
|
|
string strSQLTemp = string.Format("Insert into BHXXB ({0}) values ({1})", bhxxbField, bhxxbValue);
|
|
|
|
|
|
|
|
|
|
strSQL.Add(strSQLTemp);
|
|
|
|
|
|
|
|
|
|
//生成sql代码块结束
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
rdbHelper.BeginTransaction();
|
|
|
|
|
rdbHelper.ExecuteSQL(string.Format("delete from BHXXB where BGQTBBSM='{0}' and BGHTBBH='{1}'", pGxgc.FieldsValue["BGQTBBSM"], pGxgc.BGHTBBH));
|
|
|
|
|
rdbHelper.ExecuteSQL(strSQLTemp);
|
|
|
|
|
rdbHelper.Commit();
|
|
|
|
|
rdbHelper.DisConnect();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
rdbHelper.Rollback();
|
|
|
|
|
throw ex;
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
rdbHelper.DisConnect();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 获取最新标识码
|
|
|
|
|
private string GetMaxBSM(List<IFeatureClass> fcList)
|
|
|
|
|
{
|
|
|
|
|
//System.Windows.Forms.Application.DoEvents();
|
|
|
|
|
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
|
|
|
|
|
{
|
|
|
|
|
Table = table,
|
|
|
|
|
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 && !string.IsNullOrWhiteSpace(BSMStr.Trim())) return BSM;
|
|
|
|
|
string subBSMStr = BSMStr.Substring(9);
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
currBSM = Convert.ToInt32(subBSMStr);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
return BSM;
|
|
|
|
|
}
|
|
|
|
|
if (currBSM > maxBSM) maxBSM = currBSM;
|
|
|
|
|
|
|
|
|
|
if (BSMStr.Length != 18) return BSM;
|
|
|
|
|
string maxStr = maxBSM.ToString();
|
|
|
|
|
int zeroNum = 9 - maxStr.Length;
|
|
|
|
|
for (int i = 0; i < zeroNum; i++)
|
|
|
|
|
{
|
|
|
|
|
maxStr = 0 + maxStr;
|
|
|
|
|
}
|
|
|
|
|
BSM = BSMStr.Substring(0, 9) + maxStr;
|
|
|
|
|
}
|
|
|
|
|
if (BSM.Length != 18)
|
|
|
|
|
continue;
|
|
|
|
|
int xh2 = Convert.ToInt32(BSM.Substring(10));
|
|
|
|
|
leftStr = BSM.Substring(0, 10);
|
|
|
|
|
if (xh < xh2)
|
|
|
|
|
{
|
|
|
|
|
xh = xh2;
|
|
|
|
|
MaxBSM = BSM;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return MaxBSM;
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 获取最新图斑编号
|
|
|
|
|
private int GetNewTBBH(List<IFeatureClass> fc, string pZLDWDM)
|
|
|
|
|
{
|
|
|
|
|
fc = GetBSMFcList;
|
|
|
|
|
int result = 0;
|
|
|
|
|
foreach (var item in fc)
|
|
|
|
|
{
|
|
|
|
|
int maxTBBH = GetMaxTBBH(item, pZLDWDM);
|
|
|
|
|
if (result < maxTBBH)
|
|
|
|
|
result = maxTBBH;
|
|
|
|
|
}
|
|
|
|
|
result++;
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
private int GetMaxTBBH(IFeatureClass fc, string pZLDWDM)
|
|
|
|
|
{
|
|
|
|
|
string fileName = "TBBH";
|
|
|
|
|
int result = 0;
|
|
|
|
|
int index = fc.FindField(fileName);
|
|
|
|
|
if (index == -1) return result;
|
|
|
|
|
|
|
|
|
|
ITable table = (ITable)fc;
|
|
|
|
|
// 创建一个ITableSort接口对象
|
|
|
|
|
ITableSort tableSort = new TableSortClass();
|
|
|
|
|
tableSort.Table = table;
|
|
|
|
|
tableSort.Fields = fileName;
|
|
|
|
|
tableSort.QueryFilter = new QueryFilterClass() { WhereClause = string.Format("ZLDWDM='{0}'", pZLDWDM) };
|
|
|
|
|
tableSort.set_Ascending(fileName, false);
|
|
|
|
|
tableSort.Sort(null);
|
|
|
|
|
ICursor cursor = tableSort.Rows;
|
|
|
|
|
IRow row = cursor.NextRow();
|
|
|
|
|
while (row != null)
|
|
|
|
|
{
|
|
|
|
|
int tbbh = 0;
|
|
|
|
|
if (row.Value[index] is DBNull)
|
|
|
|
|
{
|
|
|
|
|
tbbh = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int.TryParse(row.Value[index].ToString(), out tbbh);
|
|
|
|
|
}
|
|
|
|
|
if (result < tbbh)
|
|
|
|
|
{
|
|
|
|
|
result = tbbh;
|
|
|
|
|
}
|
|
|
|
|
row = cursor.NextRow();
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
///<summary>
|
|
|
|
|
/// 移除前缀字符串
|
|
|
|
|
///</summary>
|
|
|
|
|
///<param name="val">原字符串</param>
|
|
|
|
|
///<param name="str">前缀字符串</param>
|
|
|
|
|
///<returns></returns>
|
|
|
|
|
public string GetRemovePrefixString(string val, string str)
|
|
|
|
|
{
|
|
|
|
|
string strRegex = @"^(" + str + ")";
|
|
|
|
|
return Regex.Replace(val, strRegex, "");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 面积平差
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="shpList">需要平差的对象集合</param>
|
|
|
|
|
/// <param name="pKZMJ">控制面积</param>
|
|
|
|
|
public void AreaAdjustment2(List<ShapeInfo> shpList, double pKZMJ)
|
|
|
|
|
{
|
|
|
|
|
if (shpList.Count == 1)
|
|
|
|
|
{
|
|
|
|
|
shpList[0].SetArea(pKZMJ);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//如果面积=0,计算椭球面积
|
|
|
|
|
shpList.ForEach(f =>
|
|
|
|
|
{
|
|
|
|
|
if (f.Area == 0)
|
|
|
|
|
f.CalculationArea();
|
|
|
|
|
});
|
|
|
|
|
shpList = shpList.OrderByDescending(o => o.Area).ToList();
|
|
|
|
|
double mjc = Math.Round(shpList.Sum(s => s.Area) - pKZMJ, 2);
|
|
|
|
|
//平差
|
|
|
|
|
while (Math.Round(mjc, 2) != 0)
|
|
|
|
|
{
|
|
|
|
|
int tpsm = (int)(Math.Abs(Math.Round(mjc, 2)) / (double)0.01);
|
|
|
|
|
int e = tpsm / shpList.Count;
|
|
|
|
|
int f = tpsm % shpList.Count;
|
|
|
|
|
if (f != 0)
|
|
|
|
|
{
|
|
|
|
|
double tpmj = (e + 1) * 0.01;
|
|
|
|
|
for (int i = 0; i < f; i++)
|
|
|
|
|
{
|
|
|
|
|
if (mjc < 0)
|
|
|
|
|
shpList[i].SetArea(shpList[i].Area + tpmj);
|
|
|
|
|
else
|
|
|
|
|
shpList[i].SetArea(shpList[i].Area - tpmj);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (e != 0)
|
|
|
|
|
{
|
|
|
|
|
double tpmj = e * 0.01;
|
|
|
|
|
for (int i = f; i < shpList.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
if (mjc < 0)
|
|
|
|
|
shpList[i].SetArea(shpList[i].Area + tpmj);
|
|
|
|
|
else
|
|
|
|
|
shpList[i].SetArea(shpList[i].Area - tpmj);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
mjc = Math.Round(shpList.Sum(s => s.Area), 2) - pKZMJ;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 考虑待定
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class DLTBGXGCAttribute
|
|
|
|
|
{
|
|
|
|
|
public bool IsAdjacent { get; set; }
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 是否已被合并
|
|
|
|
|
/// </summary>
|
|
|
|
|
public bool IsUnioned { get; set; }
|
|
|
|
|
public string TempBSMPrefix { get; set; }
|
|
|
|
|
public string BGTBOID
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue != null && FieldsValue.Keys.Contains("BGTBOID"))
|
|
|
|
|
{
|
|
|
|
|
return FieldsValue["BGTBOID"].ToTrim();
|
|
|
|
|
}
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsValue.Keys.Contains("BGTBOID"))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue["BGTBOID"] = value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add("BGTBOID", value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public bool IsUpdate { get; set; }
|
|
|
|
|
public int UpdateOID { get; set; }
|
|
|
|
|
public string BGHTBBH
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue != null && FieldsValue.Keys.Contains("BGHTBBH"))
|
|
|
|
|
{
|
|
|
|
|
return FieldsValue["BGHTBBH"].ToTrim();
|
|
|
|
|
}
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsValue.Keys.Contains("BGHTBBH"))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue["BGHTBBH"] = value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add("BGHTBBH", value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 数据年份
|
|
|
|
|
/// </summary>
|
|
|
|
|
public int SJNF { get; set; }
|
|
|
|
|
public string BGHTBBSM
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue != null && FieldsValue.Keys.Contains("BGHTBBSM"))
|
|
|
|
|
{
|
|
|
|
|
return FieldsValue["BGHTBBSM"].ToTrim();
|
|
|
|
|
}
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsValue.Keys.Contains("BGHTBBSM"))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue["BGHTBBSM"] = value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add("BGHTBBSM", value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 变更行为
|
|
|
|
|
/// </summary>
|
|
|
|
|
public string BGXW { get; set; }
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 变更面积
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double BGMJ
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue != null && FieldsValue.Keys.Contains("TBBGMJ"))
|
|
|
|
|
{
|
|
|
|
|
return FieldsValue["TBBGMJ"].ToDouble();
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsValue.Keys.Contains("TBBGMJ"))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue["TBBGMJ"] = value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add("TBBGMJ", value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public string XZQTZLX { get; set; }
|
|
|
|
|
public void SetXZQTZLX(string pValue = "")
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
string result = "";
|
|
|
|
|
if (string.IsNullOrWhiteSpace(pValue))
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue.ContainsKey("XZQTZLX"))
|
|
|
|
|
result = FieldsValue["XZQTZLX"].ToString();
|
|
|
|
|
if (string.IsNullOrWhiteSpace(result))
|
|
|
|
|
{
|
|
|
|
|
if (!FieldsValue.ContainsKey("BGQZLDWDM") || !FieldsValue.ContainsKey("BGHZLDWDM"))
|
|
|
|
|
result = "";
|
|
|
|
|
if (!FieldsValue["BGQZLDWDM"].ToString().StartsWith(FieldsValue["BGHZLDWDM"].ToString().Substring(0, 6)))
|
|
|
|
|
result = "5";
|
|
|
|
|
if (string.IsNullOrWhiteSpace(result))
|
|
|
|
|
result = "0";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
result = pValue;
|
|
|
|
|
}
|
|
|
|
|
if (FieldsValue.Keys.Contains("XZQTZLX"))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue["XZQTZLX"] = result;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add("XZQTZLX", result);
|
|
|
|
|
}
|
|
|
|
|
XZQTZLX = result;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
public Dictionary<string, int> FieldsIndex { get; set; }
|
|
|
|
|
public Dictionary<string, object> FieldsValue { get; set; }
|
|
|
|
|
public DLTBGXGCAttribute()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
public DLTBGXGCAttribute(IFields pFields)
|
|
|
|
|
{
|
|
|
|
|
if (FieldsIndex == null)
|
|
|
|
|
FieldsIndex = new Dictionary<string, int>();
|
|
|
|
|
using (ComReleaser releaser = new ComReleaser())
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < pFields.FieldCount; i++)
|
|
|
|
|
{
|
|
|
|
|
IField field = pFields.Field[i];
|
|
|
|
|
releaser.ManageLifetime(field);
|
|
|
|
|
if (!field.Editable || field.Name.ToUpper().Contains("SHAPE")) continue;
|
|
|
|
|
FieldsIndex.Add(field.Name.ToUpper(), i);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public DLTBGXGCAttribute(Dictionary<string, int> pFieldsIndex)
|
|
|
|
|
{
|
|
|
|
|
this.FieldsIndex = pFieldsIndex;
|
|
|
|
|
}
|
|
|
|
|
public IGeometry Shape { get; set; }
|
|
|
|
|
public void SetBGQAttribure(IFeature pFeature, Dictionary<string, int> pFieldsIndex)
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsIndex == null)
|
|
|
|
|
return;
|
|
|
|
|
foreach (var item in pFieldsIndex.Keys)
|
|
|
|
|
{
|
|
|
|
|
string bghAttr = "BGQ" + item;
|
|
|
|
|
if (!FieldsIndex.Keys.Contains(bghAttr))
|
|
|
|
|
{
|
|
|
|
|
bghAttr = "BGQTB" + item;
|
|
|
|
|
}
|
|
|
|
|
if (!FieldsIndex.Keys.Contains(bghAttr))
|
|
|
|
|
continue;
|
|
|
|
|
if (FieldsValue.Keys.Contains(bghAttr))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue[bghAttr] = pFeature.Value[pFieldsIndex[item]];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add(bghAttr, pFeature.Value[pFieldsIndex[item]]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void SetBGQAttribure(DLTBGXGCAttribute pGXGCData)
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsIndex == null)
|
|
|
|
|
return;
|
|
|
|
|
foreach (var item in pGXGCData.FieldsValue.Keys)
|
|
|
|
|
{
|
|
|
|
|
if (item.Contains("BGH"))
|
|
|
|
|
continue;
|
|
|
|
|
string bghAttr = item;
|
|
|
|
|
if (!FieldsValue.Keys.Contains(bghAttr))
|
|
|
|
|
{
|
|
|
|
|
bghAttr = item;
|
|
|
|
|
}
|
|
|
|
|
if (!FieldsIndex.Keys.Contains(bghAttr))
|
|
|
|
|
continue;
|
|
|
|
|
if (FieldsValue.Keys.Contains(bghAttr))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue[bghAttr] = pGXGCData.FieldsValue[item];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add(bghAttr, pGXGCData.FieldsValue[item]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void SetBGHAttribure(DLTBGXGCAttribute pGXGCData)
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsIndex == null)
|
|
|
|
|
return;
|
|
|
|
|
foreach (var item in pGXGCData.FieldsValue.Keys)
|
|
|
|
|
{
|
|
|
|
|
if (item.Contains("BGQ"))
|
|
|
|
|
continue;
|
|
|
|
|
string bghAttr = item;
|
|
|
|
|
if (!FieldsValue.Keys.Contains(bghAttr))
|
|
|
|
|
{
|
|
|
|
|
bghAttr = item;
|
|
|
|
|
}
|
|
|
|
|
if (!FieldsIndex.Keys.Contains(bghAttr))
|
|
|
|
|
continue;
|
|
|
|
|
if (FieldsValue.Keys.Contains(bghAttr))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue[bghAttr] = pGXGCData.FieldsValue[item];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add(bghAttr, pGXGCData.FieldsValue[item]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void SetBGHAttribure(DLTBGXAttribute pGXData)
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsIndex == null)
|
|
|
|
|
return;
|
|
|
|
|
foreach (var item in pGXData.FieldsValue.Keys)
|
|
|
|
|
{
|
|
|
|
|
string bghAttr = "BGH" + item;
|
|
|
|
|
if (!FieldsIndex.Keys.Contains(bghAttr))
|
|
|
|
|
{
|
|
|
|
|
bghAttr = "BGHTB" + item;
|
|
|
|
|
}
|
|
|
|
|
if (!FieldsIndex.Keys.Contains(bghAttr))
|
|
|
|
|
continue;
|
|
|
|
|
if (FieldsValue.Keys.Contains(bghAttr))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue[bghAttr] = pGXData.FieldsValue[item];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add(bghAttr, pGXData.FieldsValue[item]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void SetBGHAttribure(IFeature pFeature, Dictionary<string, int> pFieldsIndex)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsIndex == null)
|
|
|
|
|
return;
|
|
|
|
|
foreach (var item in pFieldsIndex.Keys)
|
|
|
|
|
{
|
|
|
|
|
string bghAttr = "BGH" + item;
|
|
|
|
|
if (!FieldsIndex.Keys.Contains(bghAttr))
|
|
|
|
|
{
|
|
|
|
|
bghAttr = "BGHTB" + item;
|
|
|
|
|
}
|
|
|
|
|
if (!FieldsIndex.Keys.Contains(bghAttr))
|
|
|
|
|
continue;
|
|
|
|
|
if (FieldsValue.Keys.Contains(bghAttr))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue[bghAttr] = pFeature.Value[pFieldsIndex[item]];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add(bghAttr, pFeature.Value[pFieldsIndex[item]]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void SetAttribure(IFeature pFeature, Dictionary<string, int> pGxgcFieldsIndex)
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsIndex == null)
|
|
|
|
|
return;
|
|
|
|
|
foreach (var item in pGxgcFieldsIndex.Keys)
|
|
|
|
|
{
|
|
|
|
|
if (FieldsIndex.Keys.Contains(item))
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue.Keys.Contains(item))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue[item] = pFeature.Value[pGxgcFieldsIndex[item]];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add(item, pFeature.Value[pGxgcFieldsIndex[item]]);
|
|
|
|
|
}
|
|
|
|
|
if (item == "BGXW")
|
|
|
|
|
{
|
|
|
|
|
BGXW = pFeature.Value[pGxgcFieldsIndex[item]].ToTrim();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void CalculationArea()
|
|
|
|
|
{
|
|
|
|
|
BGMJ = Shape.GetEllipseArea(); //ATEllipseArea.GetPolygonArea(Shape as IPolygon);
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 判断变更后属性是否相同(除面积、BSM、道路、河流之外)
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="pOther"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public bool BGHAttribureIsEqual(DLTBGXGCAttribute pOther, bool IsXZTBIntrenal = false)
|
|
|
|
|
{
|
|
|
|
|
bool result = true;
|
|
|
|
|
if (FieldsValue == null || pOther.FieldsValue == null)
|
|
|
|
|
{
|
|
|
|
|
result = false;
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
foreach (var item in FieldsIndex.Keys)
|
|
|
|
|
{
|
|
|
|
|
if ("BGHTBBSM,BGHTBBH,BGHCZCSXM".Contains(item) || item.Contains("MJ") || !item.Contains("BGH"))
|
|
|
|
|
continue;
|
|
|
|
|
if (item == "BGHDLBM")
|
|
|
|
|
{
|
|
|
|
|
if ("1003、1004、1006、1101、1107、1107A".Contains(FieldsValue[item].ToString()) && !IsXZTBIntrenal)
|
|
|
|
|
{
|
|
|
|
|
result = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!pOther.FieldsValue.Keys.Contains(item)) continue;
|
|
|
|
|
if (!Equals(FieldsValue[item], pOther.FieldsValue[item]))
|
|
|
|
|
{
|
|
|
|
|
result = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public DLTBGXGCAttribute UnionDLTBGXGCAttr(DLTBGXGCAttribute OtherData)
|
|
|
|
|
{
|
|
|
|
|
DLTBGXGCAttribute result = this;
|
|
|
|
|
result.Shape = FeatureAPI.Union(result.Shape, OtherData.Shape);
|
|
|
|
|
result.BGMJ += OtherData.BGMJ;
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
private bool Equals(object obj1, object obj2)
|
|
|
|
|
{
|
|
|
|
|
if (obj1 == null || obj1 is DBNull)
|
|
|
|
|
{
|
|
|
|
|
obj1 = "";
|
|
|
|
|
}
|
|
|
|
|
if (obj2 == null || obj2 is DBNull)
|
|
|
|
|
{
|
|
|
|
|
obj2 = "";
|
|
|
|
|
}
|
|
|
|
|
if (obj2.ToString() == "0")
|
|
|
|
|
obj2 = "";
|
|
|
|
|
if (obj1.ToString() == "0")
|
|
|
|
|
obj1 = "";
|
|
|
|
|
if (obj1.ToTrim() == obj2.ToTrim())
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public class DLTBGXAttribute
|
|
|
|
|
{
|
|
|
|
|
public int OID { get; set; }
|
|
|
|
|
public string TempBSMPrefix { get; set; }
|
|
|
|
|
public string BSM
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue != null && FieldsValue.Keys.Contains("BSM"))
|
|
|
|
|
{
|
|
|
|
|
return FieldsValue["BSM"].ToTrim();
|
|
|
|
|
}
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsValue.Keys.Contains("BSM"))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue["BSM"] = value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add("BSM", value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string TBBH
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue != null && FieldsValue.Keys.Contains("TBBH"))
|
|
|
|
|
{
|
|
|
|
|
return FieldsValue["TBBH"].ToTrim();
|
|
|
|
|
}
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsValue.Keys.Contains("TBBH"))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue["TBBH"] = value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add("TBBH", value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string CZCSXM
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue != null && FieldsValue.Keys.Contains("CZCSXM"))
|
|
|
|
|
{
|
|
|
|
|
return FieldsValue["CZCSXM"].ToTrim();
|
|
|
|
|
}
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsValue.Keys.Contains("CZCSXM"))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue["CZCSXM"] = value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add("CZCSXM", value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public string BGTBOID { get; set; }
|
|
|
|
|
public bool IsUpdate { get; set; }
|
|
|
|
|
public bool IsAdd { get; set; }
|
|
|
|
|
public int UpdateOID { get; set; }
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 继承OID
|
|
|
|
|
/// </summary>
|
|
|
|
|
public int InheritOID { get; set; }
|
|
|
|
|
private List<DLTBGXGCAttribute> _GCDataList;
|
|
|
|
|
public List<DLTBGXGCAttribute> GCDataList
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (_GCDataList == null)
|
|
|
|
|
_GCDataList = new List<DLTBGXGCAttribute>();
|
|
|
|
|
return _GCDataList;
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_GCDataList = value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public string DLBM
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue != null && FieldsValue.Keys.Contains("DLBM"))
|
|
|
|
|
{
|
|
|
|
|
return FieldsValue["DLBM"].ToTrim();
|
|
|
|
|
}
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 数据年份
|
|
|
|
|
/// </summary>
|
|
|
|
|
public int SJNF
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue != null && FieldsValue.Keys.Contains("SJNF"))
|
|
|
|
|
{
|
|
|
|
|
return Convert.ToInt32(FieldsValue["SJNF"]);
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsValue.Keys.Contains("SJNF"))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue["SJNF"] = value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add("SJNF", value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public double TBMJ
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue != null && FieldsValue.Keys.Contains("TBMJ"))
|
|
|
|
|
{
|
|
|
|
|
return FieldsValue["TBMJ"].ToDouble();
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsValue.Keys.Contains("TBMJ"))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue["TBMJ"] = value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add("TBMJ", value);
|
|
|
|
|
}
|
|
|
|
|
if (FieldsValue.Keys.Contains("KCMJ"))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue["KCMJ"] = Math.Round(value * KCXS, 2);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add("KCMJ", Math.Round(value * KCXS, 2));
|
|
|
|
|
}
|
|
|
|
|
if (FieldsValue.Keys.Contains("TBDLMJ"))
|
|
|
|
|
{
|
|
|
|
|
//FieldsValue["TBDLMJ"] = Math.Round(TBMJ - value * KCXS, 2);
|
|
|
|
|
|
|
|
|
|
double dTBDLMJ_Temp2 = Math.Round(value * KCXS, 2);
|
|
|
|
|
FieldsValue["TBDLMJ"] = Math.Round(TBMJ - dTBDLMJ_Temp2, 2);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//FieldsValue.Add("TBDLMJ", Math.Round(TBMJ - value * KCXS, 2));
|
|
|
|
|
|
|
|
|
|
double dTBDLMJ_Temp2 = Math.Round(value * KCXS, 2);
|
|
|
|
|
FieldsValue.Add("TBDLMJ", Math.Round(TBMJ - dTBDLMJ_Temp2, 2));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public double KCXS
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue != null && FieldsValue.Keys.Contains("KCXS"))
|
|
|
|
|
{
|
|
|
|
|
return FieldsValue["KCXS"].ToDouble();
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsValue.Keys.Contains("KCXS"))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue["KCXS"] = value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add("KCXS", value);
|
|
|
|
|
}
|
|
|
|
|
if (FieldsValue.Keys.Contains("KCMJ"))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue["KCMJ"] = Math.Round(value * TBMJ, 2);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add("KCMJ", Math.Round(value * TBMJ, 2));
|
|
|
|
|
}
|
|
|
|
|
if (FieldsValue.Keys.Contains("TBDLMJ"))
|
|
|
|
|
{
|
|
|
|
|
//FieldsValue["TBDLMJ"] = Math.Round(TBMJ - value * TBMJ, 2);
|
|
|
|
|
|
|
|
|
|
double dTBDLMJ_Temp3 = Math.Round(value * TBMJ, 2);
|
|
|
|
|
FieldsValue["TBDLMJ"] = Math.Round(TBMJ - dTBDLMJ_Temp3, 2);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//FieldsValue.Add("TBDLMJ", Math.Round(TBMJ - value * TBMJ, 2));
|
|
|
|
|
|
|
|
|
|
double dTBDLMJ_Temp3 = Math.Round(value * TBMJ, 2);
|
|
|
|
|
FieldsValue.Add("TBDLMJ", Math.Round(TBMJ - dTBDLMJ_Temp3, 2));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private IGeometry _Shape;
|
|
|
|
|
public IGeometry Shape
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (_GCDataList != null)
|
|
|
|
|
{
|
|
|
|
|
_Shape = UnionGXGC();
|
|
|
|
|
}
|
|
|
|
|
return _Shape;
|
|
|
|
|
}
|
|
|
|
|
set { _Shape = value; }
|
|
|
|
|
}
|
|
|
|
|
public IGeometry Shape2 { get; set; }
|
|
|
|
|
public Dictionary<string, int> FieldsIndex { get; set; }
|
|
|
|
|
public Dictionary<string, object> FieldsValue { get; set; }
|
|
|
|
|
public DLTBGXAttribute(Dictionary<string, int> pFieldsIndex, DLTBGXGCAttribute pGXGCData)
|
|
|
|
|
{
|
|
|
|
|
this.FieldsIndex = pFieldsIndex;
|
|
|
|
|
if (pGXGCData == null)
|
|
|
|
|
return;
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsIndex == null)
|
|
|
|
|
return;
|
|
|
|
|
foreach (var item in FieldsIndex.Keys)
|
|
|
|
|
{
|
|
|
|
|
string bghAttr = "BGH" + item;
|
|
|
|
|
if (!pGXGCData.FieldsValue.Keys.Contains(bghAttr))
|
|
|
|
|
{
|
|
|
|
|
bghAttr = "BGHTB" + item;
|
|
|
|
|
}
|
|
|
|
|
if (!pGXGCData.FieldsValue.Keys.Contains(bghAttr))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add(item, null);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (FieldsValue.Keys.Contains(item))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue[item] = pGXGCData.FieldsValue[bghAttr];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add(item, pGXGCData.FieldsValue[bghAttr]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
TempBSMPrefix = pGXGCData.TempBSMPrefix;
|
|
|
|
|
BGTBOID = pGXGCData.BGTBOID;
|
|
|
|
|
Shape = pGXGCData.Shape;
|
|
|
|
|
TBMJ = pGXGCData.BGMJ;
|
|
|
|
|
//SJNF = pGXGCData.SJNF;
|
|
|
|
|
FieldsValue["TBBH"] = pGXGCData.BGHTBBH;
|
|
|
|
|
}
|
|
|
|
|
public DLTBGXAttribute(Dictionary<string, int> pFieldsIndex)
|
|
|
|
|
{
|
|
|
|
|
FieldsIndex = pFieldsIndex;
|
|
|
|
|
}
|
|
|
|
|
public void SetAttribureNew(IFeature pFeature, Dictionary<string, int> pFieldsIndex = null)
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsIndex == null)
|
|
|
|
|
return;
|
|
|
|
|
Shape = pFeature.ShapeCopy;
|
|
|
|
|
Dictionary<string, int> fields = FieldsIndex;
|
|
|
|
|
if (pFieldsIndex != null)
|
|
|
|
|
{
|
|
|
|
|
FieldsIndex = pFieldsIndex;
|
|
|
|
|
fields = pFieldsIndex;
|
|
|
|
|
}
|
|
|
|
|
foreach (var item in fields.Keys)
|
|
|
|
|
{
|
|
|
|
|
if (item == "OBJECTID" || item == "FID")
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (item == "BGTBOID")
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (item == "FID_JC_DLTB" || item == "FID_DLTBBG_BUFFER")
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pFieldsIndex != null)
|
|
|
|
|
{
|
|
|
|
|
if (item == "TBMJ")
|
|
|
|
|
{
|
|
|
|
|
TBMJ = pFeature.Value[pFieldsIndex[item]].ToDouble();
|
|
|
|
|
}
|
|
|
|
|
if (FieldsValue.Keys.Contains(item))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue[item] = pFeature.Value[pFieldsIndex[item]];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add(item, pFeature.Value[pFieldsIndex[item]]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (item == "TBMJ")
|
|
|
|
|
{
|
|
|
|
|
TBMJ = pFeature.Value[FieldsIndex[item]].ToDouble();
|
|
|
|
|
}
|
|
|
|
|
if (FieldsValue.Keys.Contains(item))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue[item] = pFeature.Value[FieldsIndex[item]];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add(item, pFeature.Value[FieldsIndex[item]]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetAttribure(IFeature pFeature, Dictionary<string, int> pFieldsIndex = null)
|
|
|
|
|
{
|
|
|
|
|
if (FieldsValue == null)
|
|
|
|
|
FieldsValue = new Dictionary<string, object>();
|
|
|
|
|
if (FieldsIndex == null)
|
|
|
|
|
return;
|
|
|
|
|
Shape = pFeature.ShapeCopy;
|
|
|
|
|
Dictionary<string, int> fields = FieldsIndex;
|
|
|
|
|
if (pFieldsIndex != null)
|
|
|
|
|
fields = pFieldsIndex;
|
|
|
|
|
foreach (var item in fields.Keys)
|
|
|
|
|
{
|
|
|
|
|
if (pFeature.Fields.Field[fields[item]].Name == "SJNF") continue;
|
|
|
|
|
if (item == "TBMJ")
|
|
|
|
|
{
|
|
|
|
|
TBMJ = pFeature.Value[fields[item]].ToDouble();
|
|
|
|
|
}
|
|
|
|
|
if (item == "XZQTZLX")
|
|
|
|
|
{
|
|
|
|
|
int idx = pFeature.Fields.FindField(item);
|
|
|
|
|
if (idx == -1) continue;
|
|
|
|
|
FieldsValue[item] = pFeature.Value[idx];
|
|
|
|
|
continue;
|
|
|
|
|
//BGTBOID = pFeature.Value[FieldsIndex[item]].ToTrim();
|
|
|
|
|
}
|
|
|
|
|
//if (item == "SJNF")
|
|
|
|
|
//{
|
|
|
|
|
// SJNF = Convert.ToInt32(pFeature.Value[FieldsIndex[item]]);
|
|
|
|
|
//}
|
|
|
|
|
if (FieldsValue.Keys.Contains(item))
|
|
|
|
|
{
|
|
|
|
|
FieldsValue[item] = pFeature.Value[fields[item]];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FieldsValue.Add(item, pFeature.Value[fields[item]]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public bool IsEqual(DLTBGXAttribute pData)
|
|
|
|
|
{
|
|
|
|
|
bool result = true;
|
|
|
|
|
if (FieldsValue == null || pData.FieldsValue == null)
|
|
|
|
|
{
|
|
|
|
|
result = false;
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
foreach (var item in FieldsIndex.Keys)
|
|
|
|
|
{
|
|
|
|
|
if ("SHAPE,TBBSM,YSDM,SJNF,TBBH,TBYBH,JCTBBSM,BGTBOID,GXSJ,MSSM,BZ,XZQTZLX,CZCSXM".Contains(item) || item.Contains("MJ"))
|
|
|
|
|
continue;
|
|
|
|
|
if (item == "DLBM")
|
|
|
|
|
{
|
|
|
|
|
if ("1003、1004、1006、1101、1107、1107A".Contains(FieldsValue[item].ToString()))
|
|
|
|
|
{
|
|
|
|
|
result = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!pData.FieldsValue.Keys.Contains(item) || !FieldsValue.Keys.Contains(item)) continue;
|
|
|
|
|
if (!Equals(FieldsValue[item], pData.FieldsValue[item]))
|
|
|
|
|
{
|
|
|
|
|
result = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
private bool Equals(object obj1, object obj2)
|
|
|
|
|
{
|
|
|
|
|
if (obj1 == null || obj1 is DBNull)
|
|
|
|
|
{
|
|
|
|
|
obj1 = "";
|
|
|
|
|
}
|
|
|
|
|
if (obj2 == null || obj2 is DBNull)
|
|
|
|
|
{
|
|
|
|
|
obj2 = "";
|
|
|
|
|
}
|
|
|
|
|
if (obj2.ToString() == "0")
|
|
|
|
|
obj2 = "";
|
|
|
|
|
if (obj1.ToString() == "0")
|
|
|
|
|
obj1 = "";
|
|
|
|
|
if (obj1.ToTrim() == obj2.ToTrim())
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private IGeometry UnionGXGC()
|
|
|
|
|
{
|
|
|
|
|
IGeometry result = null;
|
|
|
|
|
List<int> updateOIDs = new List<int>();
|
|
|
|
|
foreach (var item in _GCDataList)
|
|
|
|
|
{
|
|
|
|
|
if (item.Shape == null || item.Shape.IsEmpty)
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (item.IsUpdate)
|
|
|
|
|
{
|
|
|
|
|
if (updateOIDs.Contains(item.UpdateOID))
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
updateOIDs.Add(item.UpdateOID);
|
|
|
|
|
}
|
|
|
|
|
if (result == null)
|
|
|
|
|
{
|
|
|
|
|
result = item.Shape;
|
|
|
|
|
TBMJ = item.BGMJ;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ITopologicalOperator topo = result as ITopologicalOperator;
|
|
|
|
|
topo.Simplify();
|
|
|
|
|
ITopologicalOperator topo2 = item.Shape as ITopologicalOperator;
|
|
|
|
|
topo2.Simplify();
|
|
|
|
|
IGeometry result2 = topo.Union(item.Shape);
|
|
|
|
|
result = result2;
|
|
|
|
|
TBMJ = Math.Round(TBMJ + item.BGMJ, 2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public class DLTBAreaHandle
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 要素
|
|
|
|
|
/// </summary>
|
|
|
|
|
private ShapeInfo m_FeatureInfo;
|
|
|
|
|
private bool m_IsPolycyclic;
|
|
|
|
|
public bool IsPolycyclic { get { return m_IsPolycyclic; } }
|
|
|
|
|
public DLTBAreaHandle(ShapeInfo pFeature)
|
|
|
|
|
{
|
|
|
|
|
m_FeatureInfo = pFeature;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<ShapeInfo> GetFeatures(bool IsAdjustment = true)
|
|
|
|
|
{
|
|
|
|
|
List<ShapeInfo> result = new List<ShapeInfo>();
|
|
|
|
|
//将多环图形打散
|
|
|
|
|
List<IGeometry> geoList = FeatureAPI.DissolveGeometryByRing(m_FeatureInfo.Shape);
|
|
|
|
|
foreach (IGeometry item in geoList)
|
|
|
|
|
{
|
|
|
|
|
result.Add(new ShapeInfo(item));
|
|
|
|
|
|
|
|
|
|
//Marshal.ReleaseComObject(item);
|
|
|
|
|
}
|
|
|
|
|
if (m_FeatureInfo.Area == 0)
|
|
|
|
|
{
|
|
|
|
|
m_FeatureInfo.CalculationArea();
|
|
|
|
|
}
|
|
|
|
|
if (result.Count == 1)
|
|
|
|
|
{
|
|
|
|
|
result[0].SetArea(m_FeatureInfo.Area);
|
|
|
|
|
}
|
|
|
|
|
else if (result.Count > 1 && IsAdjustment)
|
|
|
|
|
{
|
|
|
|
|
AreaHandle.AreaAdjustment(result, m_FeatureInfo.Area);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public class ShapeInfo
|
|
|
|
|
{
|
|
|
|
|
private string m_BGXW;
|
|
|
|
|
private string m_TBBSM;
|
|
|
|
|
private string m_TBBH;
|
|
|
|
|
private string m_ZLDWDM;
|
|
|
|
|
private double m_Area;
|
|
|
|
|
private IGeometry m_Shape;
|
|
|
|
|
private IFeature m_AttrSourceFeature;
|
|
|
|
|
public int ID { get; set; }
|
|
|
|
|
public IFeature AttrSourceFeature { get { return m_AttrSourceFeature; } }
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 变更行为
|
|
|
|
|
/// </summary>
|
|
|
|
|
public string BGXW { get { return m_BGXW; } }
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 图斑标识码
|
|
|
|
|
/// </summary>
|
|
|
|
|
public string TBBSM { get { return m_TBBSM; } }
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 图斑编号
|
|
|
|
|
/// </summary>
|
|
|
|
|
public string TBBH { get { return m_TBBH; } }
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 图斑编号
|
|
|
|
|
/// </summary>
|
|
|
|
|
public string ZLDWDM { get { return m_ZLDWDM; } }
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 图斑面积
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double Area { get { return Math.Round(m_Area, 2); } }
|
|
|
|
|
public IGeometry Shape { get { return m_Shape; } }
|
|
|
|
|
public ShapeInfo() { }
|
|
|
|
|
public ShapeInfo(IGeometry pGeo)
|
|
|
|
|
{
|
|
|
|
|
m_Shape = pGeo;
|
|
|
|
|
}
|
|
|
|
|
public void SetAttrSourceFeature(IFeature pFeature)
|
|
|
|
|
{
|
|
|
|
|
m_AttrSourceFeature = pFeature;
|
|
|
|
|
}
|
|
|
|
|
public void SetShape(IGeometry pGeo)
|
|
|
|
|
{
|
|
|
|
|
m_Shape = pGeo;
|
|
|
|
|
}
|
|
|
|
|
public void CalculationArea()
|
|
|
|
|
{
|
|
|
|
|
m_Area = m_Shape.GetEllipseArea();// ATEllipseArea.GetPolygonArea(m_Shape as IPolygon);
|
|
|
|
|
}
|
|
|
|
|
public void SetArea(double pArea)
|
|
|
|
|
{
|
|
|
|
|
m_Area = pArea;
|
|
|
|
|
}
|
|
|
|
|
public void SetBGXW(string pBGXW)
|
|
|
|
|
{
|
|
|
|
|
m_BGXW = pBGXW;
|
|
|
|
|
}
|
|
|
|
|
public void SetTBBSM(string pTBBSM)
|
|
|
|
|
{
|
|
|
|
|
m_TBBSM = pTBBSM;
|
|
|
|
|
}
|
|
|
|
|
public void SetTBBH(string pTBBH)
|
|
|
|
|
{
|
|
|
|
|
m_TBBH = pTBBH;
|
|
|
|
|
}
|
|
|
|
|
public void SetZLDWDM(string pZLDWDM)
|
|
|
|
|
{
|
|
|
|
|
m_ZLDWDM = pZLDWDM;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public class AreaHandle
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 面积平差
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="shpList">需要平差的对象集合</param>
|
|
|
|
|
/// <param name="pKZMJ">控制面积</param>
|
|
|
|
|
public static void AreaAdjustment(List<ShapeInfo> shpList, double pKZMJ)
|
|
|
|
|
{
|
|
|
|
|
//如果面积=0,计算椭球面积
|
|
|
|
|
shpList.ForEach(f =>
|
|
|
|
|
{
|
|
|
|
|
if (f.Area == 0)
|
|
|
|
|
f.CalculationArea();
|
|
|
|
|
});
|
|
|
|
|
shpList = shpList.OrderByDescending(o => o.Area).ToList();
|
|
|
|
|
double mjc = Math.Round(shpList.Sum(s => s.Area) - pKZMJ, 2);
|
|
|
|
|
//平差
|
|
|
|
|
while (Math.Round(mjc, 2) != 0)
|
|
|
|
|
{
|
|
|
|
|
int tpsm = (int)(Math.Abs(Math.Round(mjc, 2)) / (double)0.01);
|
|
|
|
|
int e = tpsm / shpList.Count;
|
|
|
|
|
int f = tpsm % shpList.Count;
|
|
|
|
|
if (f != 0)
|
|
|
|
|
{
|
|
|
|
|
double tpmj = (e + 1) * 0.01;
|
|
|
|
|
for (int i = 0; i < f; i++)
|
|
|
|
|
{
|
|
|
|
|
if (mjc < 0)
|
|
|
|
|
shpList[i].SetArea(shpList[i].Area + tpmj);
|
|
|
|
|
else
|
|
|
|
|
shpList[i].SetArea(shpList[i].Area - tpmj);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (e != 0)
|
|
|
|
|
{
|
|
|
|
|
double tpmj = e * 0.01;
|
|
|
|
|
for (int i = f; i < shpList.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
if (mjc < 0)
|
|
|
|
|
shpList[i].SetArea(shpList[i].Area + tpmj);
|
|
|
|
|
else
|
|
|
|
|
shpList[i].SetArea(shpList[i].Area - tpmj);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
mjc = Math.Round(shpList.Sum(s => s.Area), 2) - pKZMJ;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|