You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2452 lines
127 KiB
2452 lines
127 KiB
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.Controls; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using ESRI.ArcGIS.Geometry; |
|
using KGIS.Framework.AE; |
|
using KGIS.Framework.AE.ExtensionMethod; |
|
using KGIS.Framework.Maps; |
|
using KGIS.Framework.Platform; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.ExtensionMethod; |
|
using KGIS.Framework.Utils.Helper; |
|
using KGIS.Framework.Views; |
|
using Kingo.PluginServiceInterface; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Linq; |
|
using System.Runtime.InteropServices; |
|
using System.Text.RegularExpressions; |
|
using System.Windows; |
|
using System.Windows.Controls; |
|
using UIShell.OSGi; |
|
using KUI.Windows; |
|
using KGIS.Framework.Utils.Interface; |
|
using System.Data; |
|
using KGIS.Framework.DBOperator; |
|
|
|
namespace Kingo.Plugin.DLTB_IDG.View |
|
{ |
|
/// <summary> |
|
/// 地类增量图斑更新 的交互逻辑 |
|
/// </summary> |
|
public partial class ZLDataModifyView : UserControl, IDockPanel2 |
|
{ |
|
private EngineEditorClass pEditor = null; |
|
private List<IElementInfo> _Elements = null; |
|
private IElementInfo _FeatureInfo = null; |
|
private IFeatureLayer _curDLTBGX_FL = null; |
|
private IFeatureLayer _curDLTBGXGC_FL = null; |
|
|
|
private string MaxBSM { get; set; } |
|
|
|
public event EventHandler CloseViewHandler; |
|
private int SaveFeatureOID = -1; |
|
private bool IsSave = false; |
|
|
|
private ControlsMapRefreshViewCommandClass refresh = new ControlsMapRefreshViewCommandClass(); |
|
|
|
private Dictionary<string, int> jc_FieldsIndex; |
|
private Dictionary<string, int> gx_FieldsIndex; |
|
private Dictionary<string, int> gxgc_FieldsIndex; |
|
|
|
public Dictionary<string, int> TempBSMDic = new Dictionary<string, int>(); |
|
public Dictionary<string, int> TempTBBHDic = new Dictionary<string, int>(); |
|
|
|
/// <summary> |
|
/// 基础地类图斑层 |
|
/// </summary> |
|
private IFeatureLayer jcdltb_Layer = null; |
|
private string XZQCode = string.Empty; |
|
|
|
IRDBHelper rdbHelper = null; |
|
DataTable dtDict = null; |
|
public ZLDataModifyView(IFeatureLayer GXLayer) |
|
{ |
|
InitializeComponent(); |
|
Title = "增量更新变更"; |
|
this.DockAreas = DockStyle.DockRight | DockStyle.Document; |
|
this.FloatSize = new System.Drawing.Size(400, 800); |
|
this.DefaultArea = DockStyle.DockRight; |
|
this.DockWidth = 400; |
|
this.ShowCloseButton = true; |
|
this.ShowAutoHideButton = true; |
|
InitView(); |
|
this.Loaded += (s, e) => |
|
{ |
|
MapsManager.Instance.MapService.OnSelectionChanged += MapService_OnSelectionChanged; |
|
_curDLTBGX_FL = GXLayer;// MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBGX"); |
|
_curDLTBGXGC_FL = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBGXGC"); |
|
jcdltb_Layer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("地类图斑"); |
|
XZQCode = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE; |
|
refresh.OnCreate(MapsManager.Instance.MapService.Hook); |
|
pEditor = new EngineEditorClass(); |
|
}; |
|
} |
|
|
|
/// <summary> |
|
/// 构造函数() |
|
/// </summary> |
|
public ZLDataModifyView() |
|
{ |
|
refresh = new ControlsMapRefreshViewCommandClass(); |
|
} |
|
|
|
private void MapService_OnSelectionChanged(object sender, EventArgs e) |
|
{ |
|
try |
|
{ |
|
ISelectionSet pSelectionSetes = (_curDLTBGX_FL as IFeatureSelection).SelectionSet;//获取图层要素已被选择的 |
|
int oid = -1; |
|
if (pSelectionSetes != null && pSelectionSetes.Count == 1) |
|
{ |
|
if (IsSave) return; |
|
IEnumIDs enumIDs = pSelectionSetes.IDs; |
|
enumIDs.Reset(); |
|
while ((oid = enumIDs.Next()) >= 0) |
|
{ |
|
IFeature f = _curDLTBGX_FL.FeatureClass.GetFeature(oid); |
|
_FeatureInfo.BindData(f); |
|
SaveFeatureOID = oid; |
|
btnSave.Visibility = Visibility.Visible; |
|
btnDele.Visibility = Visibility.Collapsed; |
|
break; |
|
} |
|
Marshal.ReleaseComObject(enumIDs); |
|
} |
|
else if (pSelectionSetes != null && pSelectionSetes.Count != 1) |
|
{ |
|
oid = -1; |
|
} |
|
if (oid == -1) |
|
{ |
|
_FeatureInfo.BindData(_curDLTBGX_FL.FeatureClass.CreateFeatureBuffer() as IFeature); |
|
btnSave.Visibility = Visibility.Collapsed; |
|
btnDele.Visibility = Visibility.Collapsed; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex.Message); |
|
} |
|
} |
|
|
|
#region 继承属性 |
|
public bool IsShow { get; set; } |
|
public int ShowIndex { get; set; } |
|
public bool ResetSize { get; set; } |
|
public bool AllowEdit { get; set; } |
|
public Guid ID { get; set; } |
|
public DockStyle DockAreas { get; set; } |
|
public System.Drawing.Size FloatSize { get; set; } |
|
public int DockWidth { get; set; } |
|
public int DockHeight { get; set; } |
|
public DockStyle DefaultArea { get; set; } |
|
public bool ShowCloseButton { get; set; } |
|
public bool ShowAutoHideButton { get; set; } |
|
public string Title { get; set; } |
|
public bool IsShowInMap { get; set; } |
|
#endregion |
|
|
|
/// <summary> |
|
/// 保存-按钮 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void BtnSave_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
IsSave = false; |
|
btnSave.IsEnabled = false; |
|
btnDele.IsEnabled = false; |
|
if (pEditor.EditState != esriEngineEditState.esriEngineStateEditing) |
|
{ |
|
MessageHelper.ShowTips("请先开启图层编辑!"); |
|
return; |
|
} |
|
this.ShowLoading("正在进行增量更新数据准备........", 0, 0); |
|
if (_curDLTBGX_FL == null) |
|
_curDLTBGX_FL = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBGX"); |
|
if (string.IsNullOrWhiteSpace(MaxBSM)) |
|
MaxBSM = GetMaxBSM(new List<IFeatureClass>() { _curDLTBGX_FL.FeatureClass, _curDLTBGXGC_FL.FeatureClass, jcdltb_Layer.FeatureClass }); |
|
IFeature GX_f = null; |
|
SaveDataBySaveCommand();//执行变更前保存因外部修改 |
|
if (SaveFeatureOID != -1) |
|
{ |
|
try |
|
{ |
|
GX_f = _curDLTBGX_FL.FeatureClass.GetFeature(SaveFeatureOID); |
|
} |
|
catch (Exception) |
|
{ |
|
MessageHelper.ShowError("当前数据获取失败,请重新选择数据!"); |
|
return; |
|
} |
|
} |
|
else return; |
|
int BSMGXIndex = _curDLTBGX_FL.FeatureClass.FindField("BSM"); |
|
ITable tableGC = _curDLTBGXGC_FL.FeatureClass as ITable; |
|
ITable tableGX = _curDLTBGX_FL.FeatureClass as ITable; |
|
if (GX_f != null) |
|
{ |
|
if (DataSpecificationCheck(GX_f) == false) return; |
|
} |
|
else |
|
{ |
|
MessageHelper.ShowTips("当前图斑获取失败_OID:" + SaveFeatureOID); |
|
return; |
|
} |
|
string GX_BSM = GX_f.Value[BSMGXIndex].ToString().Trim(); |
|
IQueryFilter queryFilter = new QueryFilterClass |
|
{ |
|
WhereClause = string.Format("BGHTBBSM='{0}'", GX_BSM) |
|
}; |
|
|
|
#region 图层字段 |
|
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(_curDLTBGX_FL.FeatureClass.Fields); |
|
|
|
if (gxgc_FieldsIndex == null || gxgc_FieldsIndex.Count == 0) |
|
gxgc_FieldsIndex = GetFieldsIndex(_curDLTBGXGC_FL.FeatureClass.Fields); |
|
#endregion |
|
this.UpdateMsg("正在进行增量数据更新........"); |
|
queryFilter.WhereClause = string.Format("BSM='{0}'", GX_BSM); |
|
if (tableGX.RowCount(queryFilter) > 1)//存在重复BSM,默认是分割图斑造成 |
|
{ |
|
IFeatureCursor featureCursorGX = _curDLTBGX_FL.FeatureClass.Update(queryFilter, false); |
|
IFeature featureGX = null; |
|
while ((featureGX = featureCursorGX.NextFeature()) != null) |
|
{ |
|
if (featureGX.OID == GX_f.OID) |
|
{ |
|
ExeZLDataGeneration(featureGX, jcdltb_Layer, null, _curDLTBGX_FL, _curDLTBGXGC_FL, XZQCode); |
|
} |
|
else |
|
{ //切割的其余部分要重新赋值BSM |
|
string bsmPrefix = MaxBSM.Substring(0, 10); |
|
int MaxNum = Convert.ToInt32(MaxBSM.Substring(9)); |
|
MaxBSM = bsmPrefix + (MaxNum + 1).ToString().PadLeft(8, '0'); |
|
featureGX.Value[BSMGXIndex] = MaxBSM; |
|
featureGX.Store(); |
|
ExeZLDataGeneration(featureGX, jcdltb_Layer, null, _curDLTBGX_FL, _curDLTBGXGC_FL, XZQCode); |
|
} |
|
} |
|
} |
|
else//新增/BSM唯一 |
|
{ |
|
if (string.IsNullOrWhiteSpace(GX_BSM))//BSM为空,默认为新增图斑 |
|
{ //新增图斑重新编BSM |
|
string bsmPrefix = MaxBSM.Substring(0, 10); |
|
int MaxNum = Convert.ToInt32(MaxBSM.Substring(9)); |
|
MaxBSM = bsmPrefix + (MaxNum + 1).ToString().PadLeft(8, '0'); |
|
GX_f.Value[BSMGXIndex] = MaxBSM; |
|
GX_f.Store(); |
|
} |
|
ExeZLDataGeneration(GX_f, jcdltb_Layer, null, _curDLTBGX_FL, _curDLTBGXGC_FL, XZQCode); |
|
} |
|
refresh.OnClick(); |
|
this.CloseLoading(); |
|
IsSave = true; |
|
MessageHelper.ShowTips("增量数据更新成功!"); |
|
} |
|
catch (Exception ex) |
|
{ |
|
IsSave = false; |
|
LogAPI.Debug("增量数据更新失败!"); |
|
LogAPI.Debug(ex); |
|
this.CloseLoading(); |
|
MessageHelper.ShowError("保存失败:" + ex.Message); |
|
SaveFeatureOID = -1; |
|
_FeatureInfo.BindData(_curDLTBGX_FL.FeatureClass.CreateFeatureBuffer() as IFeature); |
|
} |
|
finally |
|
{ |
|
#region 注释(调用保存) |
|
|
|
#endregion |
|
IsSave = false; |
|
btnSave.IsEnabled = true; |
|
btnDele.IsEnabled = true; |
|
this.CloseLoading(); |
|
} |
|
} |
|
//系统保存,避免最终非常规关闭,导致所有修改项保存失败 |
|
private ControlsEditingSaveCommandClass saveCmd = null; |
|
private void SaveDataBySaveCommand() |
|
{ |
|
if (saveCmd == null) |
|
{ |
|
saveCmd = new ControlsEditingSaveCommandClass(); |
|
saveCmd.OnCreate(MapsManager.Instance.MapService.Hook); |
|
} |
|
if (saveCmd.Enabled) |
|
{ |
|
saveCmd.OnClick(); |
|
} |
|
} |
|
|
|
public void ExeBatchModifying(IFeatureLayer _curDLTBGX_FL, IQueryFilter queryFilter) |
|
{ |
|
try |
|
{ |
|
this.ShowLoading("正在进行增量更新数据准备........", 0, 0); |
|
if (_curDLTBGXGC_FL == null) |
|
_curDLTBGXGC_FL = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBGXGC"); |
|
if (jcdltb_Layer == null) |
|
jcdltb_Layer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("地类图斑"); |
|
XZQCode = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE; |
|
refresh.OnCreate(MapsManager.Instance.MapService.Hook); |
|
#region 图层字段 |
|
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(_curDLTBGX_FL.FeatureClass.Fields); |
|
|
|
if (gxgc_FieldsIndex == null || gxgc_FieldsIndex.Count == 0) |
|
gxgc_FieldsIndex = GetFieldsIndex(_curDLTBGXGC_FL.FeatureClass.Fields); |
|
#endregion |
|
if (_curDLTBGX_FL == null) |
|
_curDLTBGX_FL = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBGX"); |
|
if (string.IsNullOrWhiteSpace(MaxBSM)) |
|
MaxBSM = GetMaxBSM(new List<IFeatureClass>() { _curDLTBGX_FL.FeatureClass, _curDLTBGXGC_FL.FeatureClass, jcdltb_Layer.FeatureClass }); |
|
IFeature GX_f = null; |
|
IFeatureCursor feature = _curDLTBGX_FL.FeatureClass.Update(queryFilter, true); |
|
int BSMGXIndex = _curDLTBGX_FL.FeatureClass.FindField("BSM"); |
|
ITable tableGC = _curDLTBGXGC_FL.FeatureClass as ITable; |
|
ITable tableGX = _curDLTBGX_FL.FeatureClass as ITable; |
|
this.UpdateMsg("正在进行增量数据更新........"); |
|
while ((GX_f = feature.NextFeature()) != null) |
|
{ |
|
string GX_BSM = GX_f.Value[BSMGXIndex].ToString().Trim(); |
|
queryFilter.WhereClause = string.Format("BSM='{0}'", GX_BSM); |
|
if (tableGX.RowCount(queryFilter) > 1)//存在重复BSM,默认是分割图斑造成 |
|
{ |
|
IFeatureCursor featureCursorGX = _curDLTBGX_FL.FeatureClass.Update(queryFilter, false); |
|
IFeature featureGX = null; |
|
while ((featureGX = featureCursorGX.NextFeature()) != null) |
|
{ |
|
if (featureGX.OID == GX_f.OID) |
|
{ |
|
ExeZLDataGeneration(featureGX, jcdltb_Layer, null, _curDLTBGX_FL, _curDLTBGXGC_FL, XZQCode); |
|
} |
|
else |
|
{ //切割的其余部分要重新赋值BSM |
|
string bsmPrefix = MaxBSM.Substring(0, 10); |
|
int MaxNum = Convert.ToInt32(MaxBSM.Substring(9)); |
|
MaxBSM = bsmPrefix + (MaxNum + 1).ToString().PadLeft(8, '0'); |
|
featureGX.Value[BSMGXIndex] = MaxBSM; |
|
featureGX.Store(); |
|
ExeZLDataGeneration(featureGX, jcdltb_Layer, null, _curDLTBGX_FL, _curDLTBGXGC_FL, XZQCode); |
|
} |
|
} |
|
} |
|
else//新增/BSM唯一 |
|
{ |
|
if (string.IsNullOrWhiteSpace(GX_BSM))//BSM为空,默认为新增图斑 |
|
{ //新增图斑重新编BSM |
|
string bsmPrefix = MaxBSM.Substring(0, 10); |
|
int MaxNum = Convert.ToInt32(MaxBSM.Substring(9)); |
|
MaxBSM = bsmPrefix + (MaxNum + 1).ToString().PadLeft(8, '0'); |
|
GX_f.Value[BSMGXIndex] = MaxBSM; |
|
GX_f.Store(); |
|
} |
|
ExeZLDataGeneration(GX_f, jcdltb_Layer, null, _curDLTBGX_FL, _curDLTBGXGC_FL, XZQCode); |
|
} |
|
} |
|
refresh.OnClick(); |
|
this.CloseLoading(); |
|
MessageHelper.ShowTips("增量数据批量更新成功!"); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("增量数据批量更新失败!"); |
|
LogAPI.Debug(ex); |
|
this.CloseLoading(); |
|
MessageHelper.ShowError("保存失败:" + ex.Message); |
|
} |
|
finally |
|
{ |
|
this.CloseLoading(); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 增量数据变更前数据检查 |
|
/// </summary> |
|
/// <param name="GX_f">修改过得更新图斑</param> |
|
/// <returns></returns> |
|
private bool DataSpecificationCheck(IFeature GX_f) |
|
{ |
|
IFeature feature = GX_f; |
|
string dbpath = System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite"; |
|
if (rdbHelper == null) |
|
rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbpath, DatabaseType.SQLite); |
|
if (rdbHelper == null) |
|
{ |
|
throw new Exception("数据库连接打开失败:" + dbpath); |
|
} |
|
this.UpdateMsg("正在进行增量数据变更数据规范性检查........."); |
|
if (dtDict == null) |
|
dtDict = rdbHelper.ExecuteDatatable("Sys_DicType", $"SELECT CODE,NAME FROM Sys_DicDetail WHERE OWNERDIC='2' ", true); |
|
List<DataDicTionary> DicsZZSX = Platform.Instance.DicHelper.GetDic(DicTypeEnum.ZZSX); |
|
List<DataDicTionary> DicsXHLX = Platform.Instance.DicHelper.GetDic(DicTypeEnum.TBXHLX); |
|
try |
|
{ |
|
#region 属性 |
|
int iQSDWDM = _curDLTBGX_FL.FeatureClass.Fields.FindField("QSDWDM");//权属单位代码 |
|
int iQSDWMC = _curDLTBGX_FL.FeatureClass.Fields.FindField("QSDWMC");//权属单位名称 |
|
int iZLDWDM = _curDLTBGX_FL.FeatureClass.Fields.FindField("ZLDWDM");//坐落单位代码 |
|
int iZLDWMC = _curDLTBGX_FL.FeatureClass.Fields.FindField("ZLDWMC");//坐落单位名称 |
|
int iMSSM = _curDLTBGX_FL.FeatureClass.Fields.FindField("MSSM");//描述说明 |
|
int iDLBM = _curDLTBGX_FL.FeatureClass.Fields.FindField("DLBM");//地类编码 |
|
int iDLMC = _curDLTBGX_FL.FeatureClass.Fields.FindField("DLMC");//地类名称 |
|
int iQSXZ = _curDLTBGX_FL.FeatureClass.Fields.FindField("QSXZ");//权属性质 |
|
int iGDPDJB = _curDLTBGX_FL.FeatureClass.Fields.FindField("GDPDJB");//耕地坡度级别 |
|
int iKCDLXS = _curDLTBGX_FL.FeatureClass.Fields.FindField("KCXS");//扣除地类系数 |
|
int iKCDLBM = _curDLTBGX_FL.FeatureClass.Fields.FindField("KCDLBM");//扣除地类编码 |
|
int iGDLX = _curDLTBGX_FL.FeatureClass.Fields.FindField("GDLX");//耕地类型 |
|
int iGDDB = _curDLTBGX_FL.FeatureClass.Fields.FindField("GDDB");//耕地等别 |
|
int iTBXHDM = _curDLTBGX_FL.FeatureClass.Fields.FindField("TBXHDM");//图斑细化代码 |
|
int iTBXHMC = _curDLTBGX_FL.FeatureClass.Fields.FindField("TBXHMC");//图斑细化名称 |
|
int iZZSXDM = _curDLTBGX_FL.FeatureClass.Fields.FindField("ZZSXDM");//种植属性代码 |
|
int iZZSXMC = _curDLTBGX_FL.FeatureClass.Fields.FindField("ZZSXMC");//种植属性名称 |
|
int iCZCSXM = _curDLTBGX_FL.FeatureClass.Fields.FindField("CZCSXM");//城镇村属性码 |
|
int iXZDWKD = _curDLTBGX_FL.FeatureClass.Fields.FindField("XZDWKD");//线状地物宽度 |
|
int iBZ = _curDLTBGX_FL.FeatureClass.Fields.FindField("BZ");//备注 |
|
int iFRDBS = _curDLTBGX_FL.FeatureClass.Fields.FindField("FRDBS");//飞入地标识 |
|
int iBSM = _curDLTBGX_FL.FeatureClass.Fields.FindField("BSM");//标识码 |
|
#endregion |
|
string strDLBM = feature.Value[iDLBM].ToTrim(); |
|
if (!string.IsNullOrEmpty(strDLBM) && strDLBM.Length > 2) |
|
{ |
|
strDLBM = strDLBM.Substring(0, 2); |
|
} |
|
LogAPI.Debug("增量数据变更数据规范性检查开始.........OID:" + GX_f.OID); |
|
string ErrLogs = string.Empty; |
|
if (string.IsNullOrEmpty(feature.Value[iQSDWDM].ToTrim()) || string.IsNullOrEmpty(feature.Value[iQSDWMC].ToTrim()) || string.IsNullOrEmpty(feature.Value[iZLDWDM].ToTrim()) || string.IsNullOrEmpty(feature.Value[iZLDWMC].ToTrim())) |
|
{ |
|
ErrLogs += "权属/坐落不可为空!\r\n"; |
|
LogAPI.Debug("权属/坐落不可为空!"); |
|
} |
|
if (string.IsNullOrEmpty(feature.Value[iMSSM].ToTrim())) |
|
{ |
|
ErrLogs += "描述说明不可为空!\r\n"; |
|
LogAPI.Debug("描述说明不可为空!"); |
|
} |
|
//地类名称/代码 |
|
if (string.IsNullOrEmpty(feature.Value[iDLBM].ToTrim()) || string.IsNullOrEmpty(feature.Value[iDLMC].ToTrim())) |
|
{ |
|
ErrLogs += "地类名称/代码不可为空!\r\n"; |
|
LogAPI.Debug("地类名称/代码不可为空!"); |
|
} |
|
else |
|
{ |
|
var dtrow = dtDict.Select($"CODE = '{feature.Value[iDLBM].ToString()}'"); |
|
if (dtrow.Length > 0 && feature.Value[iDLMC].ToTrim() != dtrow[0]["NAME"].ToTrim()) |
|
{ |
|
ErrLogs += "当前的地类名称填写错误!\r\n"; |
|
LogAPI.Debug("当前的地类名称填写错误!" + feature.Value[iDLMC].ToString()); |
|
} |
|
else if (dtrow.Length <= 0) |
|
{ |
|
ErrLogs += "当前的地类编码在字典中不存在!\r\n"; |
|
LogAPI.Debug("当前的地类编码在字典中不存在!" + feature.Value[iDLBM].ToString()); |
|
} |
|
} |
|
//权属性质 |
|
if ((feature.Value[iQSXZ].ToString() == "21" || feature.Value[iQSXZ].ToString() == "41") && feature.Value[iMSSM].ToTrim() != "01") |
|
{ |
|
ErrLogs += "权属性质为21/41,描述说明应该为01!\r\n"; |
|
LogAPI.Debug("权属性质为21/41,描述说明应该为01!"); |
|
} |
|
//耕地坡度级别/扣除地类系数/扣除地类编码 |
|
if (!string.IsNullOrEmpty(feature.Value[iDLBM].ToTrim())) |
|
{ |
|
if (strDLBM != "01" && !(string.IsNullOrWhiteSpace(feature.Value[iKCDLXS].ToTrim()) || feature.Value[iKCDLXS].ToTrim() == "0")) |
|
{ |
|
ErrLogs += "地类为非01类图斑,扣除地类系数应该为0!\r\n"; |
|
LogAPI.Debug("地类为非01类图斑,扣除地类系数应该为0!"); |
|
} |
|
if (strDLBM != "01" && !string.IsNullOrWhiteSpace(feature.Value[iKCDLBM].ToTrim())) |
|
{ |
|
ErrLogs += "地类为非01类图斑,扣除地类编码应该为空!\r\n"; |
|
LogAPI.Debug("地类为非01类图斑,扣除地类编码应该为空!"); |
|
} |
|
if (strDLBM != "01" && !string.IsNullOrWhiteSpace(feature.Value[iGDPDJB].ToTrim())) |
|
{ |
|
ErrLogs += "地类为非01类图斑,耕地坡度级别应该为空!\r\n"; |
|
LogAPI.Debug("地类为非01类图斑,耕地坡度级别应该为空!"); |
|
} |
|
} |
|
//耕地类型/耕地等别 |
|
if (!string.IsNullOrEmpty(feature.Value[iDLBM].ToTrim())) |
|
{ |
|
if (strDLBM != "01" && !string.IsNullOrWhiteSpace(feature.Value[iGDLX].ToTrim())) |
|
{ |
|
ErrLogs += "地类为非01类图斑,耕地类型应该为空!\r\n"; |
|
LogAPI.Debug("地类为非01类图斑,耕地类型应该为空!"); |
|
} |
|
if (strDLBM != "01" && !(string.IsNullOrWhiteSpace(feature.Value[iGDDB].ToTrim()) || feature.Value[iGDDB].ToTrim() == "0")) |
|
{ |
|
ErrLogs += "地类为非01类图斑,耕地等别应该为空!\r\n"; |
|
LogAPI.Debug("地类为非01类图斑,耕地等别应该为空!"); |
|
} |
|
} |
|
List<string> liststr = new List<string>() { "HDGD", "HQGD", "LQGD", "MQGD", "SHGD", "SMGD", "YJGD" }; |
|
//图斑细化代码/图斑细化名称 |
|
if (!string.IsNullOrEmpty(feature.Value[iDLBM].ToTrim())) |
|
{ |
|
//非01类图斑,图斑细化代码标注HDGD、HQGD、LQGD、MQGD、SHGD、SMGD、YJGD的需清空。 |
|
if (strDLBM != "01" && liststr.Contains(feature.Value[iTBXHDM].ToString())) |
|
{ |
|
if (feature.Value[iTBXHDM].ToTrim() == "" || feature.Value[iTBXHMC].ToTrim() == "") |
|
{ |
|
ErrLogs += "地类为非01类图斑,图斑细化代码不应该为HDGD,HQGD,LQGD,MQGD,SHGD,SMGD,YJGD中的其一,应清空图斑细化代码、名称!\r\n"; |
|
LogAPI.Debug("地类为非01类图斑,图斑细化代码不应该为HDGD,HQGD,LQGD,MQGD,SHGD,SMGD,YJGD中的其一,应清空图斑细化代码、名称!"); |
|
} |
|
} |
|
//非06类用地,TBXHDM字段为HDGY、GTGY、MTGY、SNGY、BLGY、DLGY的需清空。 |
|
liststr = new List<string>() { "HDGY", "GTGY", "MTGY", "SNGY", "BLGY", "DLGY" }; |
|
if (strDLBM != "06" && liststr.Contains(feature.Value[iTBXHDM].ToString())) |
|
{ |
|
if (feature.Value[iTBXHDM].ToTrim() == "" || feature.Value[iTBXHMC].ToTrim() == "") |
|
{ |
|
ErrLogs += "地类为非06类图斑,图斑细化代码不应该为HDGY,GTGY,MTGY,SNGY,BLGY,DLGY中的其一,应清空图斑细化代码、名称!\r\n"; |
|
LogAPI.Debug("地类为非06类图斑,图斑细化代码不应该为HDGY,GTGY,MTGY,SNGY,BLGY,DLGY中的其一,应清空图斑细化代码、名称!"); |
|
} |
|
} |
|
//非04类图斑,标注GCCD的需清除。 |
|
if (strDLBM != "04" && feature.Value[iTBXHDM].ToString() == "GCCD") |
|
{ |
|
if (feature.Value[iTBXHDM].ToTrim() == "" || feature.Value[iTBXHMC].ToTrim() == "") |
|
{ |
|
ErrLogs += "地类为非04类,图斑细化代码不应该为GCCD,应清空图斑细化代码、名称!\r\n"; |
|
LogAPI.Debug("地类为非04类,图斑细化代码不应该为GCCD,应清空图斑细化代码、名称!"); |
|
} |
|
} |
|
//非03类,0404的图斑,标注LJTM的需要清除。 |
|
if ((strDLBM != "03" || feature.Value[iDLBM].ToString() == "0404") && feature.Value[iTBXHDM].ToString() == "LJTM") |
|
{ |
|
if (feature.Value[iTBXHDM].ToTrim() == "" || feature.Value[iTBXHMC].ToTrim() == "") |
|
{ |
|
ErrLogs += "地类为非03类或非0404,图斑细化代码不应该为LJTM,应清空图斑细化代码、名称!\r\n"; |
|
LogAPI.Debug("地类为非03类或非0404,图斑细化代码不应该为LJTM,应清空图斑细化代码、名称!"); |
|
} |
|
} |
|
//地类编码字段前2位非01、02、03、04,且不等于0601、0602、1001、1003,或属于湿地的,不能进行图斑细化标注 |
|
liststr = new List<string>() { "01", "02", "03", "04", "0601", "0602", "1001", "1003", "0303", "0304", "0306", "0402", "0603", "1105", "1106", "1108" }; |
|
if (!liststr.Contains(strDLBM) && !liststr.Contains(feature.Value[iDLBM].ToString())) |
|
{ |
|
if (feature.Value[iTBXHDM].ToTrim() != "" || feature.Value[iTBXHMC].ToTrim() != "") |
|
{ |
|
ErrLogs += "地类编码字段为非‘01类,02类,03类,04类,0601,0602,1001,1003,0303,0304,0306,0402,0603,1105,1106,1108’,不能进行图斑细化标注,应清空图斑细化代码、名称!\r\n"; |
|
LogAPI.Debug("地类编码字段为非‘01类,02类,03类,04类,0601,0602,1001,1003,0303,0304,0306,0402,0603,1105,1106,1108’,不能进行图斑细化标注,应清空图斑细化代码、名称!"); |
|
} |
|
} |
|
} |
|
//种植属性代码/种植属性名称 |
|
if (!string.IsNullOrEmpty(feature.Value[iDLBM].ToTrim())) |
|
{ |
|
//非01类图斑,种植属性代码标注LS、FLS、LYFL、XG、LLJZ、WG的需要清空; |
|
liststr = new List<string>() { "LS", "FLS", "LYFL", "XG", "LLJZ", "WG" }; |
|
if (strDLBM != "01" && !strDLBM.StartsWith("01") && liststr.Contains(feature.Value[iZZSXDM].ToTrim())) |
|
{ |
|
if (feature.Value[iZZSXDM].ToTrim() == "" || feature.Value[iZZSXMC].ToTrim() == "") |
|
{ |
|
ErrLogs += "地类为非01类图斑,种植属性代码标注LS、FLS、LYFL、XG、LLJZ、WG,应清空种植属性代码、名称!\r\n"; |
|
LogAPI.Debug("地类为非01类图斑,种植属性代码标注LS、FLS、LYFL、XG、LLJZ、WG,应清空种植属性代码、名称!"); |
|
} |
|
} |
|
//非0301、0302、0305、0307、0404、1104、1104A,0201、0202、0203、0204、0201K、0202K、0203K、0204K、0301K、0302K、0307K、0403K、1104K的种植属性代码填写JKHF、GCHF的需清空。 |
|
liststr = new List<string>() { "0301", "0302", "0305", "0307", "0404", "1104", "1104A", "0201", "0202", "0203", "0204", "0201K", "0202K", "0203K", "0204K", "0301K", "0302K", "0307K", "0403K", "1104K" }; |
|
if (!liststr.Contains(feature.Value[iDLBM].ToTrim()) && (feature.Value[iZZSXDM].ToTrim() == "JKHF" || feature.Value[iZZSXDM].ToTrim() == "GCHF")) |
|
{ |
|
if (feature.Value[iZZSXDM].ToTrim() == "" || feature.Value[iZZSXMC].ToTrim() == "") |
|
{ |
|
ErrLogs += "地类为非0301、0302、0305、0307、0404、1104、1104A,0201、0202、0203、0204、0201K、0202K、0203K、0204K、0301K、0302K、0307K、0403K、1104K的图斑,种植属性代码标注JKHF、GCHF,应清空种植属性代码、名称!\r\n"; |
|
LogAPI.Debug("地类为非0301、0302、0305、0307、0404、1104、1104A,0201、0202、0203、0204、0201K、0202K、0203K、0204K、0301K、0302K、0307K、0403K、1104K的图斑,种植属性代码标注JKHF、GCHF,应清空种植属性代码、名称!"); |
|
} |
|
} |
|
//地类编码字段前2位为04(不包括0404、0403K)、05、06、07、08、09、10、11(不包括1104、1104A、1104K)、12,或属于湿地的,不能进行种植属性标注或恢复属性标注; |
|
liststr = new List<string>() { "04", "05", "06", "07", "08", "09", "10", "11", "12", "0303", "0304", "0306", "0402", "0603", "1105", "1106", "1108" }; |
|
var liststr1 = new List<string>() { "0404", "0403K", "1104", "1104A", "1104K" }; |
|
if ((liststr.Contains(strDLBM) || liststr.Contains(feature.Value[iDLBM].ToTrim())) && !liststr1.Contains(feature.Value[iDLBM].ToTrim())) |
|
{ |
|
if (feature.Value[iZZSXDM].ToTrim() != "" || feature.Value[iZZSXMC].ToTrim() != "") |
|
{ |
|
ErrLogs += "地类编码字段前2位为04(不包括0404、0403K)、05、06、07、08、09、10、11(不包括1104、1104A、1104K)、12,或属于湿地的图斑,应清空种植属性代码、名称!\r\n"; |
|
LogAPI.Debug("地类编码字段前2位为04(不包括0404、0403K)、05、06、07、08、09、10、11(不包括1104、1104A、1104K)、12,或属于湿地的图斑,应清空种植属性代码、名称!"); |
|
} |
|
} |
|
} |
|
//城镇村属性码 |
|
if (!string.IsNullOrEmpty(feature.Value[iDLBM].ToTrim())) |
|
{ |
|
//1001、1002、1003、1007、1008、1009、1109的图斑,城镇村属性码应为空 |
|
liststr = new List<string>() { "1001", "1002", "1003", "1007", "1008", "1009", "1109" }; |
|
if (liststr.Contains(feature.Value[iDLBM].ToString())) |
|
{ |
|
if (feature.Value[iCZCSXM].ToTrim() != "") |
|
{ |
|
ErrLogs += "地类为1001、1002、1003、1007、1008、1009、1109的图斑,城镇村属性码应为空!\r\n"; |
|
LogAPI.Debug("地类为1001、1002、1003、1007、1008、1009、1109的图斑,城镇村属性码应为空!"); |
|
} |
|
} |
|
} |
|
//线状地物宽度 |
|
if (!string.IsNullOrEmpty(feature.Value[iDLBM].ToTrim())) |
|
{ |
|
//非线性图斑要清除线状地物宽度 |
|
liststr = new List<string>() { "1001", "1002", "1003", "1004", "1006", "1009", "1101", "1107", "1107A", "1203" }; |
|
if (!liststr.Contains(feature.Value[iDLBM].ToString()) && feature.Value[iXZDWKD].ToString() != "0") |
|
{ |
|
if (feature.Value[iXZDWKD].ToTrim() != "0") |
|
{ |
|
ErrLogs += "地类为1001、1002、1003、1007、1008、1009、1109、1101、1107、1107A、1203的图斑,线状地物宽度应为0!\r\n"; |
|
LogAPI.Debug("地类为1001、1002、1003、1007、1008、1009、1109、1101、1107、1107A、1203的图斑,线状地物宽度应为0!"); |
|
} |
|
} |
|
} |
|
//飞入地标识 |
|
if (string.IsNullOrEmpty(feature.Value[iFRDBS].ToTrim())) |
|
{ |
|
ErrLogs += "飞入地标识不能为空!"; |
|
LogAPI.Debug("飞入地标识不能为空!"); |
|
} |
|
LogAPI.Debug("增量数据变更数据规范性检查结束........."); |
|
if (!string.IsNullOrEmpty(ErrLogs)) |
|
{ |
|
MessageHelper.ShowTips(string.Format("数据检查过程中出现填写不规范!\r\n{0}", ErrLogs)); |
|
return false; |
|
} |
|
else |
|
{ |
|
return true; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("增量变更数据规范性检查报错,详情如下:"); |
|
LogAPI.Debug(ex); |
|
MessageHelper.ShowError("增量变更数据规范性检查报错,请查看日志!"); |
|
return false; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 删除增量数据 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void BtnDele_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
if (pEditor.EditState != esriEngineEditState.esriEngineStateEditing) |
|
{ |
|
MessageHelper.ShowTips("请先开启图层编辑!"); |
|
return; |
|
} |
|
if (_curDLTBGX_FL == null) |
|
_curDLTBGX_FL = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBGX"); |
|
IFeature DeleGX_f = null; |
|
if (SaveFeatureOID != -1) |
|
{ |
|
try |
|
{ |
|
DeleGX_f = _curDLTBGX_FL.FeatureClass.GetFeature(SaveFeatureOID); |
|
} |
|
catch (Exception) |
|
{ |
|
MessageHelper.ShowError("获取当前图斑失败,请刷新后再尝试!"); |
|
return; |
|
} |
|
} |
|
else return; |
|
|
|
#region 图层字段 |
|
int BGQBSMGXGCIndex = _curDLTBGXGC_FL.FeatureClass.FindField("BGQTBBSM"); |
|
int BGHBSMGXGCIndex = _curDLTBGXGC_FL.FeatureClass.FindField("BGHTBBSM"); |
|
int BSMGXIndex = _curDLTBGX_FL.FeatureClass.FindField("BSM"); |
|
int BGMJIndex = _curDLTBGX_FL.FeatureClass.FindField("TBMJ"); |
|
int JCBSMGXIndex = jcdltb_Layer.FeatureClass.FindField("BSM"); |
|
ITable tableGC = _curDLTBGXGC_FL.FeatureClass as ITable; |
|
ITable tableGX = _curDLTBGX_FL.FeatureClass as ITable; |
|
|
|
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(_curDLTBGX_FL.FeatureClass.Fields); |
|
|
|
if (gxgc_FieldsIndex == null || gxgc_FieldsIndex.Count == 0) |
|
gxgc_FieldsIndex = GetFieldsIndex(_curDLTBGXGC_FL.FeatureClass.Fields); |
|
#endregion |
|
|
|
string GXBSM = DeleGX_f.Value[BSMGXIndex].ToString().Trim(); |
|
if (string.IsNullOrWhiteSpace(GXBSM)) |
|
MessageHelper.ShowTips("当前数据标识码为空!"); |
|
else |
|
{ |
|
this.ShowLoading("正在进行变更数据还原操作........", 0, 0); |
|
IQueryFilter queryFilter = new QueryFilterClass |
|
{ |
|
WhereClause = string.Format("BGHTBBSM='{0}'", GXBSM) |
|
}; |
|
DLTBGXAttribute temp_De = new DLTBGXAttribute(gx_FieldsIndex); |
|
temp_De.OID = DeleGX_f.OID; |
|
temp_De.Shape2 = DeleGX_f.ShapeCopy;//删除增量数据,属性还原成基础图斑属性 |
|
temp_De.GCDataList.AddRange(GetDLTBGXGCs(temp_De, DeleGX_f)); |
|
if (temp_De.GCDataList.Count == 1) |
|
{ |
|
List<IFeature> JC_Fs = FeatureAPI.Identify2(temp_De.GCDataList[0].Shape, jcdltb_Layer); |
|
int length = JC_Fs.Count; |
|
if (JC_Fs.Count == 1 && FeatureAPI.IsContains(JC_Fs[0].ShapeCopy, temp_De.Shape2)) |
|
{ |
|
DLTBGXAttribute dLTBGXAttribute = new DLTBGXAttribute(gx_FieldsIndex); |
|
dLTBGXAttribute.SetAttribure(JC_Fs[0], jc_FieldsIndex); |
|
temp_De.SetAttribure(DeleGX_f);//被动变更图斑不需要还原 |
|
if (dLTBGXAttribute.IsEqual(temp_De)) return; |
|
} |
|
else |
|
{ |
|
for (int i = 0; i < length; i++) |
|
{ |
|
if (!FeatureAPI.IsContains(JC_Fs[i].ShapeCopy, temp_De.GCDataList[0].Shape)) |
|
{ JC_Fs.Remove(JC_Fs[i]); i--; length--; }//剔除边界压盖基础图斑 |
|
} |
|
} |
|
temp_De.SetAttribure(JC_Fs[0], jc_FieldsIndex);//还原更新数据为基础数据属性 |
|
temp_De.GCDataList[0].SetBGHAttribure(temp_De);//对应过程数据还原为基础图斑 |
|
temp_De.GCDataList[0].SetBGQAttribure(JC_Fs[0], gxgc_FieldsIndex);//对应过程数据还原为基础图斑 |
|
//当前更新图斑与基础图斑边界保持一致,直接删除 |
|
if (FeatureAPI.IsContains(DeleGX_f.ShapeCopy, JC_Fs[0].ShapeCopy) || FeatureAPI.GetEqual(DeleGX_f.ShapeCopy, JC_Fs[0].ShapeCopy)) |
|
{ |
|
Platform.Instance.SendMsg(new NotifyMsgPackage() { Content = DeleGX_f.OID, MsgType = "RefreshViewAttrTable", Extend = "DelDataByOID" }); |
|
DeleGX_f.Delete(); |
|
tableGC.DeleteSearchedRows(queryFilter); |
|
return; |
|
} |
|
else if (FeatureAPI.IsContains(JC_Fs[0].ShapeCopy, DeleGX_f.ShapeCopy) && !FeatureAPI.GetEqual(DeleGX_f.ShapeCopy, JC_Fs[0].ShapeCopy)) |
|
{ |
|
List<IFeature> GX_Fs = FeatureAPI.Identify(DeleGX_f.ShapeCopy, _curDLTBGX_FL); |
|
foreach (IFeature ZBGX_Fitem in GX_Fs) |
|
{ |
|
if (ZBGX_Fitem.OID == DeleGX_f.OID) continue; |
|
if (!FeatureAPI.IsContains(JC_Fs[0].ShapeCopy, ZBGX_Fitem.ShapeCopy)) continue; |
|
DLTBGXAttribute tempgx = new DLTBGXAttribute(gx_FieldsIndex); |
|
tempgx.SetAttribure(ZBGX_Fitem, gx_FieldsIndex);//周边更新数据属性 |
|
tempgx.Shape2 = ZBGX_Fitem.ShapeCopy; |
|
if (temp_De.IsEqual(tempgx))//存在周边更新图斑与基础图斑一致时,才删除当前更新数据 |
|
{ |
|
tempgx.GCDataList.AddRange(GetDLTBGXGCs(tempgx, ZBGX_Fitem)); |
|
foreach (DLTBGXGCAttribute GC_item in temp_De.GCDataList) |
|
{ |
|
//验证数据的准确性 |
|
DLTBGXGCAttribute dLTBGXGC = tempgx.GCDataList.FirstOrDefault(x => x.FieldsValue["BGQTBBSM"].ToString() == JC_Fs[0].Value[JCBSMGXIndex].ToString()); |
|
if (dLTBGXGC != null) |
|
{ |
|
temp_De.IsUpdate = true; |
|
temp_De.BSM = ""; |
|
GC_item.BGMJ += dLTBGXGC.BGMJ; |
|
GC_item.Shape = FeatureAPI.Union(GC_item.Shape, dLTBGXGC.Shape); |
|
queryFilter.WhereClause = string.Format("BGHTBBSM='{0}'", ZBGX_Fitem.Value[BSMGXIndex].ToTrim()); |
|
tableGC.DeleteSearchedRows(queryFilter); |
|
Platform.Instance.SendMsg(new NotifyMsgPackage() { Content = ZBGX_Fitem.OID, MsgType = "RefreshViewAttrTable", Extend = "DelDataByOID" }); |
|
ZBGX_Fitem.Delete(); |
|
} |
|
} |
|
} |
|
} |
|
if (temp_De.IsUpdate == true)//存在合并状况 |
|
{ |
|
queryFilter.WhereClause = string.Format("BGHTBBSM='{0}'", DeleGX_f.Value[BSMGXIndex].ToTrim()); |
|
tableGC.DeleteSearchedRows(queryFilter); |
|
Platform.Instance.SendMsg(new NotifyMsgPackage() { Content = DeleGX_f.OID, MsgType = "RefreshViewAttrTable", Extend = "DelDataByOID" }); |
|
DeleGX_f.Delete(); |
|
if (string.IsNullOrWhiteSpace(MaxBSM)) |
|
MaxBSM = GetMaxBSM(new List<IFeatureClass>() { _curDLTBGX_FL.FeatureClass, _curDLTBGXGC_FL.FeatureClass }); |
|
//与基础图斑边界一致,默认还原变更 |
|
if (!FeatureAPI.GetEqual(temp_De.Shape, JC_Fs[0].ShapeCopy)) |
|
{ |
|
InsertGXFeature(temp_De, _curDLTBGX_FL); |
|
foreach (DLTBGXGCAttribute GCItem in temp_De.GCDataList) |
|
{ |
|
InsertGXGCFeature(GCItem, temp_De, _curDLTBGXGC_FL); |
|
} |
|
} |
|
} |
|
else//仅当前更新数据及变更层作修改 |
|
{ |
|
UpdateGXFeature(DeleGX_f, temp_De, false); |
|
foreach (DLTBGXGCAttribute GCItem in temp_De.GCDataList) |
|
{ |
|
IFeature feature = _curDLTBGXGC_FL.FeatureClass.GetFeature(GCItem.UpdateOID); |
|
UpdateGCFeature(feature, GCItem); |
|
} |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
//存储周边更新数据改的 |
|
List<DLTBGXAttribute> NewGXAtts = new List<DLTBGXAttribute>();//被修改的图斑 |
|
List<DLTBGXGCAttribute> OldZBGXGCAtts = new List<DLTBGXGCAttribute>();//被合并的图斑 |
|
DLTBGXAttribute temp_DelPart = new DLTBGXAttribute(gx_FieldsIndex); |
|
temp_DelPart.Shape2 = DeleGX_f.ShapeCopy;//增量数据 |
|
temp_DelPart.GCDataList.AddRange(GetDLTBGXGCs(temp_DelPart, DeleGX_f)); |
|
foreach (DLTBGXGCAttribute DelGCAttriitem in temp_DelPart.GCDataList) |
|
{ |
|
List<IFeature> JCFsByGC = FeatureAPI.Identify(DelGCAttriitem.Shape, jcdltb_Layer); |
|
if (JCFsByGC != null && JCFsByGC.Count != 0)//过程层只能压盖到对应的基础图斑 |
|
{ |
|
int length = JCFsByGC.Count; |
|
for (int i = 0; i < length; i++) |
|
{ |
|
if (JCFsByGC[i].Value[JCBSMGXIndex].ToString().Trim() != DelGCAttriitem.FieldsValue["BGQTBBSM"].ToString()) |
|
{ JCFsByGC.Remove(JCFsByGC[i]); i--; length--; }//剔除边界压盖基础图斑 |
|
} |
|
DLTBGXAttribute NewGXAttribute = new DLTBGXAttribute(gx_FieldsIndex); |
|
NewGXAttribute.SetAttribure(JCFsByGC[0], jc_FieldsIndex); |
|
List<IFeature> ZBGCs = FeatureAPI.Identify(DelGCAttriitem.Shape, _curDLTBGXGC_FL); |
|
foreach (IFeature ZBGC_Fitem in ZBGCs) |
|
{ |
|
if (DelGCAttriitem.UpdateOID == ZBGC_Fitem.OID) |
|
{ |
|
Platform.Instance.SendMsg(new NotifyMsgPackage() { Content = ZBGC_Fitem.OID, MsgType = "RefreshViewAttrTable", Extend = "DelDataByOID" }); |
|
ZBGC_Fitem.Delete(); |
|
continue; |
|
} |
|
DLTBGXGCAttribute dLTBGXGC = new DLTBGXGCAttribute(gxgc_FieldsIndex);//ZB |
|
dLTBGXGC.SetAttribure(ZBGC_Fitem, gxgc_FieldsIndex); |
|
dLTBGXGC.Shape = ZBGC_Fitem.ShapeCopy; |
|
if (JCFsByGC[0].Value[JCBSMGXIndex].ToString().Trim() != dLTBGXGC.FieldsValue["BGQTBBSM"].ToString()) continue; |
|
//if (!FeatureAPI.IsContains(JCFsByGC[0].ShapeCopy, ZBGC_Fitem.ShapeCopy)) continue; |
|
//temp_DelPart.SetAttribure(JCFsByGC[0], jc_FieldsIndex); |
|
double GCBGMJ = DelGCAttriitem.BGMJ;//还原之前的过程图斑面积 |
|
DelGCAttriitem.SetBGHAttribure(JCFsByGC[0], jc_FieldsIndex); |
|
if (dLTBGXGC.BGHAttribureIsEqual(DelGCAttriitem))//相邻的过程层属性一致 |
|
{ |
|
DelGCAttriitem.Shape = FeatureAPI.Union(dLTBGXGC.Shape, DelGCAttriitem.Shape); |
|
DelGCAttriitem.BGMJ += dLTBGXGC.BGMJ; |
|
DelGCAttriitem.IsUpdate = true; |
|
NewGXAttribute.Shape2 = DelGCAttriitem.Shape; |
|
NewGXAttribute.TBMJ += DelGCAttriitem.BGMJ; |
|
NewGXAttribute.BSM = ""; |
|
NewGXAttribute.GCDataList.Add(DelGCAttriitem); |
|
Platform.Instance.SendMsg(new NotifyMsgPackage() { Content = ZBGC_Fitem.OID, MsgType = "RefreshViewAttrTable", Extend = "DelDataByOID" }); |
|
ZBGC_Fitem.Delete(); |
|
OldZBGXGCAtts.Add(dLTBGXGC);//参与合并, |
|
} |
|
else |
|
{ |
|
NewGXAttribute.Shape2 = DelGCAttriitem.Shape;//最开始的图形赋值 |
|
NewGXAttribute.GCDataList.Add(DelGCAttriitem);//本身作为被动变更 |
|
} |
|
} |
|
if (NewGXAttribute.GCDataList.Count != 0) |
|
{ |
|
if (!FeatureAPI.GetEqual(NewGXAttribute.Shape, JCFsByGC[0].ShapeCopy)) |
|
{ |
|
NewGXAtts.Add(NewGXAttribute);//还原为基础图斑属性(无论修改,覆盖/未改变) |
|
} |
|
} |
|
} |
|
} |
|
if (string.IsNullOrWhiteSpace(MaxBSM) && NewGXAtts.Count != 0) |
|
MaxBSM = GetMaxBSM(new List<IFeatureClass>() { _curDLTBGX_FL.FeatureClass, _curDLTBGXGC_FL.FeatureClass }); |
|
foreach (DLTBGXAttribute GXItem in NewGXAtts) |
|
{ |
|
InsertGXFeature(GXItem, _curDLTBGX_FL); |
|
foreach (DLTBGXGCAttribute GCItem in GXItem.GCDataList) |
|
{ |
|
InsertGXGCFeature(GCItem, GXItem, _curDLTBGXGC_FL); |
|
} |
|
} |
|
foreach (DLTBGXGCAttribute item in OldZBGXGCAtts) |
|
{ |
|
queryFilter.WhereClause = string.Format("BSM='{0}'", item.BGHTBBSM); |
|
IFeatureCursor featureCursor = _curDLTBGX_FL.FeatureClass.Update(queryFilter, false); |
|
IFeature feature = null; |
|
if ((feature = featureCursor.NextFeature()) != null) |
|
{ |
|
Platform.Instance.SendMsg(new NotifyMsgPackage() { Content = feature.OID, MsgType = "RefreshViewAttrTable", Extend = "DelDataByOID" }); |
|
feature.Delete(); |
|
} |
|
} |
|
Platform.Instance.SendMsg(new NotifyMsgPackage() { Content = DeleGX_f.OID, MsgType = "RefreshViewAttrTable", Extend = "DelDataByOID" }); |
|
DeleGX_f.Delete(); |
|
}//默认不存在压盖不到基础图斑 |
|
this.CloseLoading(); |
|
refresh.OnClick(); |
|
MessageHelper.ShowTips("增量数据还原成功!"); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("增量数据更新还原失败,原因如下:"); |
|
LogAPI.Debug(ex); |
|
this.CloseLoading(); |
|
MessageHelper.ShowTips("增量数据更新还原失败,请重新选择!"); |
|
} |
|
finally |
|
{ |
|
this.CloseLoading(); |
|
SaveFeatureOID = -1; |
|
_FeatureInfo.BindData(_curDLTBGX_FL.FeatureClass.CreateFeatureBuffer() as IFeature); |
|
} |
|
} |
|
|
|
private List<DLTBGXGCAttribute> GetDLTBGXGCs(DLTBGXAttribute DLTBGXAttribute, IFeature Temp_F) |
|
{ |
|
List<DLTBGXGCAttribute> TempGCs = new List<DLTBGXGCAttribute>(); |
|
int indexGX = _curDLTBGX_FL.FeatureClass.FindField("BSM"); |
|
IQueryFilter queryFilter = new QueryFilterClass |
|
{ |
|
WhereClause = string.Format("BGHTBBSM='{0}'", Temp_F.Value[indexGX].ToTrim()) |
|
}; |
|
IFeatureCursor featureCursor_GC = _curDLTBGXGC_FL.FeatureClass.Update(queryFilter, false); |
|
IFeature featureGC = null;//当前更新图斑对应过程层数据 |
|
while ((featureGC = featureCursor_GC.NextFeature()) != null) |
|
{ |
|
DLTBGXGCAttribute TempGC = new DLTBGXGCAttribute(gxgc_FieldsIndex); |
|
TempGC.SetAttribure(featureGC, gxgc_FieldsIndex); |
|
TempGC.Shape = featureGC.ShapeCopy; |
|
TempGC.UpdateOID = featureGC.OID; |
|
TempGCs.Add(TempGC); |
|
} |
|
return TempGCs; |
|
} |
|
|
|
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"></param> |
|
/// <returns></returns> |
|
private bool ExeZLDataGeneration(IFeature pGXFeature, IFeatureLayer pJC_Layer, IFeatureLayer pJC_Layer2, IFeatureLayer pGX_Layer, IFeatureLayer pGXGC_Layer, string pTempBSMPrefix) |
|
{ |
|
bool result = false; |
|
try |
|
{ |
|
this.UpdateMsg("正在进行更新过程数据......."); |
|
gxDataList = new List<DLTBGXAttribute>(); |
|
//获取更新数据过程数据 |
|
gxDataList = GetGXGCData2(pGXFeature, pJC_Layer, pGXGC_Layer, pGX_Layer); |
|
|
|
gxDataList.ForEach(x => x.TBMJ = x.GCDataList.Sum(k => k.BGMJ));//平差后的过程面积求和 |
|
|
|
try |
|
{ |
|
//修改更新数据 |
|
foreach (DLTBGXAttribute pGXData in gxDataList) |
|
{ |
|
if (pGXData.IsAdd == true)//产生多环图形,全部按照新增操作 |
|
{ |
|
InsertGXFeature(pGXData, pGX_Layer, false); |
|
continue; |
|
} |
|
IFeature featureGX = null; |
|
try |
|
{ |
|
featureGX = pGX_Layer.FeatureClass.GetFeature(pGXData.InheritOID); |
|
} |
|
catch (Exception) |
|
{ |
|
InsertGXFeature(pGXData, pGX_Layer, false); |
|
continue; |
|
} |
|
if (featureGX != null) |
|
{ |
|
featureGX.Shape = pGXData.Shape; |
|
foreach (var fieldName in gx_FieldsIndex.Keys) |
|
{ |
|
if (fieldName == "TBMJ") |
|
{ |
|
featureGX.Value[gx_FieldsIndex[fieldName]] = pGXData.TBMJ; |
|
continue; |
|
} |
|
if (fieldName == "YSDM") |
|
{ |
|
featureGX.Value[gx_FieldsIndex[fieldName]] = "2001010100"; |
|
continue; |
|
} |
|
if (fieldName == "TBBH") |
|
{ |
|
featureGX.Value[gx_FieldsIndex[fieldName]] = pGXData.FieldsValue[fieldName]; |
|
continue; |
|
} |
|
if (fieldName == "TBDLMJ") |
|
{ |
|
double dKCMJ_Temp = Math.Round(pGXData.TBMJ * pGXData.KCXS, 2); |
|
featureGX.Value[gx_FieldsIndex[fieldName]] = Math.Round(pGXData.TBMJ - dKCMJ_Temp, 2); |
|
continue; |
|
} |
|
featureGX.Value[gx_FieldsIndex[fieldName]] = pGXData.FieldsValue[fieldName]; |
|
} |
|
featureGX.Store(); |
|
} |
|
} |
|
//最终数据和基础图标一致,则做清除,反之插入数据;(不放在添加前判断,是先获取逻辑过程数据,作为数据验证) |
|
foreach (DLTBGXAttribute gx in gxDataList) |
|
{ |
|
foreach (var gxgc in gx.GCDataList) |
|
{ |
|
if (gxgc.BGXW == "1") |
|
{ |
|
IQueryFilter queryFilter = new QueryFilterClass |
|
{ |
|
WhereClause = string.Format("BSM='{0}'", gxgc.BGHTBBSM) |
|
}; |
|
IFeatureCursor featureCursor = jcdltb_Layer.FeatureClass.Search(queryFilter, true); |
|
IFeature jc = featureCursor.NextFeature(); |
|
DLTBGXAttribute jcData = new DLTBGXAttribute(gx_FieldsIndex); |
|
jcData.SetAttribure(jc, jc_FieldsIndex); |
|
if (gx.IsEqual(jcData)) |
|
{ |
|
queryFilter.WhereClause = string.Format("BSM='{0}'", gxgc.BGHTBBSM); |
|
featureCursor = pGX_Layer.FeatureClass.Update(queryFilter, true); |
|
IFeature featureGX = featureCursor.NextFeature(); |
|
Platform.Instance.SendMsg(new NotifyMsgPackage() { Content = featureGX.OID, MsgType = "RefreshViewAttrTable", Extend = "DelDataByOID" }); |
|
featureGX.Delete(); |
|
featureCursor.Flush(); |
|
continue; |
|
} |
|
} |
|
int oid = InsertGXGCFeature(gxgc, gx, pGXGC_Layer); |
|
LogAPI.Debug("增量数据变更-插入过程数据OID:" + oid); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("增量数据变更-过程数据生成异常:" + ex.Message); |
|
LogAPI.Debug(ex); |
|
} |
|
result = true; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("图斑变更发生异常!异常信息如下:"); |
|
LogAPI.Debug(ex); |
|
LogAPI.Debug("异常信息结束"); |
|
} |
|
return result; |
|
} |
|
#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; |
|
if (string.IsNullOrWhiteSpace(BSMStr)) continue; |
|
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 |
|
public void UpdateGXFeature(IFeature pFeature, DLTBGXAttribute pData, bool IsUpdateBSM = false) |
|
{ |
|
try |
|
{ |
|
pFeature.Shape = pData.Shape; |
|
foreach (var key in pData.FieldsIndex.Keys) |
|
{ |
|
if (pData.FieldsValue == null) |
|
{ |
|
break; |
|
} |
|
if (key == "JCTBBSM") |
|
continue; |
|
if (key == "BSM" && IsUpdateBSM == false) |
|
continue; |
|
if (key == "TBBH") |
|
{ |
|
pFeature.Value[pData.FieldsIndex[key]] = pData.TBBH; |
|
continue; |
|
} |
|
if (key == "SJNF") |
|
{ |
|
pFeature.Value[pData.FieldsIndex[key]] = "2023"; |
|
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]] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31); |
|
continue; |
|
} |
|
if (pData.FieldsValue.Keys.Contains(key)) |
|
{ |
|
pFeature.Value[pData.FieldsIndex[key]] = pData.FieldsValue[key]; |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("更新地类团更新数据异常:" + ex); |
|
LogAPI.Debug("更新地类团更新数据异常:" + ex.Message); |
|
LogAPI.Debug("更新地类团更新数据异常:" + ex.StackTrace); |
|
throw ex; |
|
} |
|
} |
|
public void UpdateGCFeature(IFeature pFeature, DLTBGXGCAttribute pData) |
|
{ |
|
try |
|
{ |
|
pFeature.Shape = pData.Shape; |
|
foreach (var key in pData.FieldsIndex.Keys) |
|
{ |
|
if (pData.FieldsValue == null) |
|
{ |
|
break; |
|
} |
|
if (key == "JCTBBSM") |
|
continue; |
|
if (key == "SJNF") |
|
{ |
|
pFeature.Value[pData.FieldsIndex[key]] = "2022"; |
|
continue; |
|
} |
|
if (key == "TBMJ") |
|
{ |
|
pFeature.Value[pData.FieldsIndex[key]] = pData.BGMJ; |
|
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]] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31); |
|
continue; |
|
} |
|
if (pData.FieldsValue.Keys.Contains(key)) |
|
{ |
|
pFeature.Value[pData.FieldsIndex[key]] = pData.FieldsValue[key]; |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("更新过程数据异常:" + ex); |
|
LogAPI.Debug("更新过程数据异常:" + ex.Message); |
|
LogAPI.Debug("更新过程数据异常:" + ex.StackTrace); |
|
throw ex; |
|
} |
|
} |
|
/// <summary> |
|
/// 插入更新层数据 |
|
/// </summary> |
|
/// <param name="pGXData"></param> |
|
/// <param name="pGX_Layer"></param> |
|
/// <param name="pGXGC_Layer"></param> |
|
public void InsertGXFeature(DLTBGXAttribute pGXData, IFeatureLayer pGX_Layer, bool isUpdateTBBH = false) |
|
{ |
|
IFeatureCursor updateCursor = null; |
|
IFeatureCursor gx_cursor = null; |
|
IFeatureBuffer gx_buffer = null; |
|
try |
|
{ |
|
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 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]] = "2022"; |
|
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 int InsertGXGCFeature(DLTBGXGCAttribute pGxgc, DLTBGXAttribute pGx, IFeatureLayer pFC) |
|
{ |
|
IFeatureCursor gxgc_cursor = null; |
|
IFeatureBuffer gxgc_buffer = null; |
|
try |
|
{ |
|
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 == "BSM") |
|
{ |
|
string bsmPrefix = MaxBSM.Substring(0, 10); |
|
int MaxNum = Convert.ToInt32(MaxBSM.Substring(9)); |
|
MaxBSM = bsmPrefix + (MaxNum + 1).ToString().PadLeft(8, '0'); |
|
gxgc_buffer.Value[gxgc_FieldsIndex[fieldName]] = MaxBSM; |
|
continue; |
|
} |
|
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]] = DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 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) |
|
{ |
|
LogAPI.Debug(ex.Message); |
|
throw; |
|
} |
|
finally |
|
{ |
|
if (gxgc_cursor != null) |
|
Marshal.ReleaseComObject(gxgc_cursor); |
|
} |
|
} |
|
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="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="pBGFeature">勾选得变更数据</param> |
|
/// <param name="pJC_Layer">基础_地类图斑/行政区调整前基础图斑</param> |
|
/// <param name="pGXGC_Layer">地类图斑更新过程层</param> |
|
/// <param name="pGX_Layer">地类图斑更新层</param> |
|
/// <returns></returns> |
|
private List<DLTBGXAttribute> GetGXGCData2(IFeature pGXFeature, IFeatureLayer pJC_Layer, IFeatureLayer pGXGC_Layer, IFeatureLayer pGX_Layer) |
|
{ |
|
try |
|
{ |
|
//当前更新图斑pGXFeature |
|
DLTBGXAttribute Save_GXData = new DLTBGXAttribute(gx_FieldsIndex); |
|
Save_GXData.SetAttribure(pGXFeature); |
|
Save_GXData.InheritOID = pGXFeature.OID; |
|
Save_GXData.Shape2 = pGXFeature.ShapeCopy; |
|
|
|
IQueryFilter queryFilter = new QueryFilterClass(); |
|
ITable tableGXGC = pGXGC_Layer.FeatureClass as ITable; |
|
int BSMGXIndex = pGX_Layer.FeatureClass.FindField("BSM"); |
|
|
|
#region 从更新层里判断(判断该图斑是否压盖其他更新图斑) |
|
List<IFeature> gx_Features = FeatureAPI.Identify(pGXFeature.ShapeCopy, pGX_Layer); |
|
if (gx_Features.Count != 0) |
|
{ |
|
foreach (var gxItem_ZB in gx_Features)//ZB-周边 |
|
{ |
|
if (gxItem_ZB.OID == pGXFeature.OID) continue;//压盖到自身 |
|
|
|
DLTBGXAttribute tempGX_ZB = new DLTBGXAttribute(gx_FieldsIndex) |
|
{ |
|
UpdateOID = gxItem_ZB.OID, |
|
InheritOID = gxItem_ZB.OID, |
|
IsUpdate = true |
|
}; |
|
tempGX_ZB.SetAttribure(gxItem_ZB); |
|
tempGX_ZB.Shape2 = gxItem_ZB.ShapeCopy; |
|
if (FeatureAPI.IsAdjacent(gxItem_ZB.ShapeCopy, pGXFeature.ShapeCopy)) |
|
{ |
|
if (tempGX_ZB.IsEqual(Save_GXData))//是否相邻比对属性数据 |
|
{ |
|
queryFilter.WhereClause = string.Format("BGHTBBSM='{0}'", gxItem_ZB.Value[BSMGXIndex].ToString().Trim()); |
|
tableGXGC.DeleteSearchedRows(queryFilter); |
|
gxItem_ZB.Delete();//合并周边更新图斑(过程层?删除) |
|
Save_GXData.Shape2 = FeatureAPI.Union(tempGX_ZB.Shape2, Save_GXData.Shape2); |
|
Save_GXData.TBMJ += tempGX_ZB.TBMJ; |
|
} |
|
} |
|
else if (FeatureAPI.IsContains(pGXFeature.ShapeCopy, gxItem_ZB.ShapeCopy)) |
|
{ |
|
queryFilter.WhereClause = string.Format("BGHTBBSM='{0}'", gxItem_ZB.Value[BSMGXIndex].ToString().Trim()); |
|
tableGXGC.DeleteSearchedRows(queryFilter); |
|
gxItem_ZB.Delete(); |
|
} |
|
else if (FeatureAPI.IsInterSect(gxItem_ZB.ShapeCopy, pGXFeature.ShapeCopy)) |
|
{ |
|
if (tempGX_ZB.IsEqual(Save_GXData))//相交且属性相同 |
|
{ |
|
Save_GXData.Shape2 = FeatureAPI.Union(tempGX_ZB.Shape2, Save_GXData.Shape2); |
|
Save_GXData.TBMJ += tempGX_ZB.TBMJ; |
|
queryFilter.WhereClause = string.Format("BGHTBBSM='{0}'", gxItem_ZB.Value[BSMGXIndex].ToString().Trim()); |
|
tableGXGC.DeleteSearchedRows(queryFilter); |
|
gxItem_ZB.Delete(); |
|
} |
|
else |
|
{ |
|
tempGX_ZB.Shape2 = FeatureAPI.Difference(tempGX_ZB.Shape2, Save_GXData.Shape2);//留存的部分 |
|
if (!tempGX_ZB.Shape2.IsEmpty) |
|
{ |
|
List<IGeometry> subGX_Items = FeatureAPI.DissolveGeometryByRing(tempGX_ZB.Shape2); |
|
foreach (var item in subGX_Items) |
|
{ |
|
if (subGX_Items.IndexOf(item) == 0) |
|
{ |
|
tempGX_ZB.Shape2 = item; |
|
tempGX_ZB.InheritOID = gxItem_ZB.OID; |
|
gxDataList.Add(tempGX_ZB); |
|
continue; |
|
} |
|
tempGX_ZB = new DLTBGXAttribute(gx_FieldsIndex); |
|
tempGX_ZB.SetAttribure(gxItem_ZB); |
|
tempGX_ZB.Shape2 = item; |
|
tempGX_ZB.IsAdd = true; |
|
gxDataList.Add(tempGX_ZB); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
gxDataList.Add(Save_GXData);//若是更新层没有数据 |
|
|
|
foreach (DLTBGXAttribute 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); |
|
} |
|
} |
|
} |
|
} |
|
|
|
List<DLTBGXAttribute> newGXDataList = new List<DLTBGXAttribute>(); |
|
//压盖到其他更新图斑,经过一系列操作,产生新的更新图斑(被动变更) |
|
foreach (DLTBGXAttribute 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)); |
|
} |
|
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 (DLTBGXAttribute 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.GCDataList.ForEach(f => |
|
{ |
|
f.BGHTBBH = item.TBBH; |
|
f.BGHTBBSM = item.BSM; |
|
f.BGXW = "2"; |
|
}); |
|
} |
|
} |
|
return result; |
|
} |
|
if (gxDataList.Count == 1) |
|
{ |
|
if (gxDataList[0].GCDataList.Count == 1) |
|
{ |
|
List<IFeature> jc_Features = new List<IFeature>(); |
|
jc_Features = FeatureAPI.Identify2(gxDataList[0].GCDataList[0].Shape, pJC_Layer); |
|
if (jc_Features.Count == 1) |
|
{ |
|
IRelationalOperator relational = gxDataList[0].GCDataList[0].Shape as IRelationalOperator; |
|
if (relational.Equals(jc_Features[0].ShapeCopy))//属性变化(过程数据与基础库数据图形相同) |
|
{ |
|
gxDataList[0].GCDataList[0].BGXW = "1"; |
|
gxDataList[0].BSM = jc_Features[0].Value[jc_Features[0].Fields.FindField("BSM")].ToTrim(); |
|
gxDataList[0].GCDataList[0].BGHTBBSM = gxDataList[0].BSM; |
|
gxDataList[0].TBBH = jc_Features[0].Value[jc_Features[0].Fields.FindField("TBBH")].ToTrim(); |
|
} |
|
else |
|
{ |
|
gxDataList[0].GCDataList[0].BGHTBBSM = gxDataList[0].BSM; |
|
gxDataList[0].GCDataList[0].BGXW = "2"; |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
gxDataList[0].GCDataList.ForEach(f => |
|
{ |
|
f.BGXW = "2"; |
|
f.BGHTBBSM = gxDataList[0].BSM; |
|
}); |
|
} |
|
} |
|
return gxDataList; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex.Message); |
|
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; |
|
} |
|
|
|
/// <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 (IFeature gxgcItem in gxgc_Features) |
|
{ |
|
if (result.FirstOrDefault(f => FeatureAPI.IsInterSect(f.Shape, gxgcItem.ShapeCopy)) != null) |
|
{ gxgcItem.Delete(); 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)) |
|
{//更新层与过程层图形是否相等/包含 |
|
List<IFeature> jc_Features = FeatureAPI.Identify2(pGXShape, pJC_Layer); |
|
if (jc_Features.Count == 1 && FeatureAPI.Difference(jc_Features[0].ShapeCopy, gxgcItem.ShapeCopy).IsEmpty) |
|
{ |
|
gxgc.BGHTBBSM = jc_Features[0].Value[jc_Features[0].Fields.FindField("BSM")].ToString(); |
|
gxgc.BGHTBBH = jc_Features[0].Value[jc_Features[0].Fields.FindField("TBBH")].ToString(); |
|
} |
|
result.Add(gxgc); |
|
} |
|
else if (FeatureAPI.IsContains(pGXShape, gxgcItem.ShapeCopy)) |
|
{ |
|
List<IFeature> jc_Features = FeatureAPI.Identify2(gxgcItem.ShapeCopy, pJC_Layer); |
|
IGeometry geomey = FeatureAPI.InterSect(jc_Features[0].ShapeCopy, pGXShape); |
|
if (jc_Features.Count == 1 && !FeatureAPI.Difference(geomey, gxgcItem.ShapeCopy).IsEmpty) |
|
{ |
|
gxgc.Shape = geomey; |
|
gxgc.BGMJ = pBGFeature.TBMJ; |
|
result.Add(gxgc); |
|
} |
|
else if (FeatureAPI.GetEqual(geomey, gxgcItem.ShapeCopy)) |
|
{ |
|
gxgc.BGMJ = pBGFeature.TBMJ; |
|
gxgc.BGHTBBSM = pBGFeature.BSM; |
|
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; |
|
bool IsUnion = false; |
|
foreach (DLTBGXGCAttribute itemGCNew in result) |
|
{ |
|
if (FeatureAPI.IsAdjacent(itemGCNew.Shape, gxgc2.Shape) && itemGCNew.FieldsValue["BGQTBBSM"] == gxgc2.FieldsValue["BGQTBBSM"]) |
|
{ |
|
itemGCNew.UnionDLTBGXGCAttr(gxgc2); |
|
IsUnion = true; |
|
break; |
|
} |
|
} |
|
if (IsUnion == false) |
|
result.Add(gxgc2); |
|
} |
|
else |
|
{ |
|
result.Add(gxgc2); |
|
continue; |
|
} |
|
} |
|
|
|
List<IFeature> jc_Features = FeatureAPI.Identify(gxgcItem.ShapeCopy, pJC_Layer); |
|
for (int j = 0; j < DiffShapes.Count; j++) |
|
{ |
|
IFeature GX_f = _curDLTBGX_FL.FeatureClass.GetFeature(SaveFeatureOID); |
|
IFeature JC_F = jc_Features.FirstOrDefault(x => x.Value[pJC_Layer.FeatureClass.FindField("BSM")].ToString() == gxgc.FieldsValue["BGQTBBSM"].ToString()); |
|
if (JC_F == null || GX_f.Value[_curDLTBGX_FL.FeatureClass.FindField("BSM")].ToString() != pBGFeature.BSM) continue; |
|
DLTBGXGCAttribute gxgc2 = new DLTBGXGCAttribute(gxgc_FieldsIndex); |
|
//额外增量数据赋值 |
|
gxgc2.Shape = DiffShapes[j].Shape; |
|
gxgc2.SetAttribure(gxgcItem, gxgc_FieldsIndex);//更新图斑外扩 |
|
if (gxgc.BGHTBBSM == pBGFeature.BSM)//更新图斑内缩 |
|
{ |
|
gxgc2.SetBGHAttribure(JC_F, jc_FieldsIndex); |
|
List<IFeature> gc_Features = FeatureAPI.Identify(gxgc2.Shape, _curDLTBGXGC_FL); |
|
bool isUnioned = false; |
|
for (int i = 0; i < gc_Features.Count; i++)//内缩被动变更操作 |
|
{ |
|
if (FeatureAPI.IsAdjacent(gxgc2.Shape, gc_Features[i].ShapeCopy) && !FeatureAPI.IsInterSect(gxgc2.Shape, gc_Features[i].ShapeCopy)) |
|
{ |
|
DLTBGXGCAttribute dLTBGXGC = new DLTBGXGCAttribute(gxgc_FieldsIndex); |
|
dLTBGXGC.SetAttribure(gc_Features[i], gxgc_FieldsIndex); |
|
dLTBGXGC.Shape = gc_Features[i].ShapeCopy; |
|
if (dLTBGXGC.BGHAttribureIsEqual(gxgc2)) |
|
{ |
|
int GCBGMJ = _curDLTBGXGC_FL.FeatureClass.FindField("TBBGMJ"); |
|
int GXBGMJ = _curDLTBGX_FL.FeatureClass.FindField("TBMJ"); |
|
int GXBSM = _curDLTBGX_FL.FeatureClass.FindField("BSM"); |
|
gc_Features[i].Value[GCBGMJ] = Convert.ToDouble(gc_Features[i].Value[GCBGMJ]) + DiffShapes[j].Area; |
|
List<IFeature> GX_Fs = FeatureAPI.Identify2(gc_Features[i].ShapeCopy, _curDLTBGX_FL); |
|
GX_Fs[0].Shape = FeatureAPI.Union(gxgc2.Shape, GX_Fs[0].ShapeCopy); |
|
if (GXBGMJ != -1) |
|
GX_Fs[0].Value[GXBGMJ] = Convert.ToDouble(GX_Fs[0].Value[GXBGMJ]) + DiffShapes[j].Area; |
|
GX_Fs[0].Store(); |
|
gc_Features[i].Shape = FeatureAPI.Union(gxgc2.Shape, gc_Features[i].ShapeCopy); |
|
gc_Features[i].Store(); |
|
isUnioned = true; |
|
} |
|
} |
|
} |
|
if (isUnioned == true) continue; |
|
} |
|
gxgc2.BGMJ = DiffShapes[j].Area; |
|
|
|
DLTBGXAttribute newGXData3 = new DLTBGXAttribute(gx_FieldsIndex, gxgc2) |
|
{ |
|
BSM = gxgc.BGHTBBSM, |
|
Shape2 = gxgc2.Shape |
|
}; |
|
newGXData3.GCDataList.Add(gxgc2); |
|
if (FeatureAPI.IsAdjacent(pGXShape, newGXData3.Shape) && pBGFeature.IsEqual(newGXData3)) |
|
{ |
|
result.Add(gxgc2); |
|
} |
|
else |
|
newGXData.Add(newGXData3); |
|
} |
|
} |
|
gxgcItem.Delete(); |
|
} |
|
return result; |
|
} |
|
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.Identify(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 || IntersectGeo.GetEllipseArea() <= 0.1) |
|
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更新数据 |
|
{ |
|
if (FeatureAPI.Identify2(DiffShapes[j].Shape, _curDLTBGX_FL).Count <= 0)//被动变更部分 |
|
{ //验证当前是切割的,还是被动变更部分 |
|
DLTBGXGCAttribute gxgc2 = new DLTBGXGCAttribute(gxgc_FieldsIndex); |
|
gxgc2.SetBGQAttribure(jc, jc_FieldsIndex); |
|
gxgc2.SetBGHAttribure(jc, jc_FieldsIndex); |
|
string bsmPrefix = MaxBSM.Substring(0, 10); |
|
int MaxNum = Convert.ToInt32(MaxBSM.Substring(9)); |
|
MaxBSM = bsmPrefix + (MaxNum + 1).ToString().PadLeft(8, '0'); |
|
gxgc2.BGHTBBSM = MaxBSM; |
|
gxgc2.Shape = DiffShapes[j].Shape; |
|
gxgc2.BGMJ = DiffShapes[j].Area; |
|
DLTBGXAttribute newGXData3 = new DLTBGXAttribute(gx_FieldsIndex, gxgc2); |
|
newGXData3.BSM = gxgc2.BGHTBBSM; |
|
//newGXData3.TBBH = gxgc.BGHTBBH; |
|
newGXData3.GCDataList.Add(gxgc2); |
|
newGXData.Add(newGXData3); |
|
} |
|
} |
|
} |
|
} |
|
return result; |
|
} |
|
/// <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; |
|
} |
|
} |
|
|
|
private void InitView() |
|
{ |
|
if (_Elements == null) |
|
_Elements = BundleRuntime.Instance.GetService<IElementInfo>(); |
|
if (_FeatureInfo == null && _Elements != null) |
|
_FeatureInfo = _Elements.FirstOrDefault(f => f.Title == "要素属性"); |
|
if ((_FeatureInfo as UserControl).Parent != null) |
|
((_FeatureInfo as UserControl).Parent as Grid).Children.Clear(); |
|
if (_FeatureInfo != null) |
|
TBInfo.Children.Add(_FeatureInfo as UIElement); |
|
} |
|
|
|
public void ShowPanel() |
|
{ |
|
Platform.Instance.OpenView(this, false); |
|
} |
|
|
|
public void ClosePanel() |
|
{ |
|
_FeatureInfo.BindData(null); |
|
_FeatureInfo = null; |
|
MapsManager.Instance.MapService.OnSelectionChanged -= MapService_OnSelectionChanged; |
|
Platform.Instance.CloseView(this); |
|
} |
|
|
|
public void ClosePanelInvoke() |
|
{ |
|
CloseViewHandler?.Invoke(this, null); |
|
} |
|
|
|
} |
|
}
|
|
|