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.
1300 lines
68 KiB
1300 lines
68 KiB
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.DataSourcesGDB; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using ESRI.ArcGIS.Geometry; |
|
using KGIS.Framework.AE; |
|
using KGIS.Framework.AE.ExtensionMethod; |
|
using KGIS.Framework.AE.GPHelper; |
|
using KGIS.Framework.DBOperator; |
|
using KGIS.Framework.Maps; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.ExtensionMethod; |
|
using KGIS.Framework.Utils.Helper; |
|
using Kingo.Plugin.YJJK.Config; |
|
using Kingo.Plugin.YJJK.ModelEntity; |
|
using Kingo.PluginServiceInterface; |
|
using KUI.Windows; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.ComponentModel; |
|
using System.ComponentModel.DataAnnotations; |
|
using System.Data; |
|
using System.IO; |
|
using System.Linq; |
|
using System.Runtime.InteropServices; |
|
using System.Xml.Linq; |
|
|
|
namespace Kingo.Plugin.YJJK.Helper |
|
{ |
|
public class SXWHHelper : IDataChange |
|
{ |
|
private List<GDEntity> GDEntitys; |
|
private List<TestData> list; |
|
public string IDataChangeName { get => "SXWHHelper"; } |
|
/// <summary> |
|
/// 图层属性数据源 |
|
/// </summary> |
|
public List<EllipsoidAreaTable> listEllipsoidAreaTable = null; |
|
/// <summary> |
|
/// 图层集合 |
|
/// </summary> |
|
private List<LayerEntity> layers; |
|
public List<RuleTableEntity> ysdmlistRuleTableEntity = null; |
|
|
|
public SXWHHelper(List<GDEntity> _GDEntitys = null, List<TestData> _list = null) |
|
{ |
|
GDEntitys = _GDEntitys; |
|
list = _list; |
|
} |
|
|
|
public void ExecuteDataChange(DataChangeParameter pParm) |
|
{ |
|
Implement(); |
|
} |
|
|
|
public void Implement() |
|
{ |
|
try |
|
{ |
|
for (int i = 0; i < list.Count; i++) |
|
{ |
|
if (list[i].IsChecked) |
|
{ |
|
//椭球面积计算 |
|
if (list[i].ItemType == "Area") |
|
{ |
|
this.UpdateMsg("正在进行椭球面积计算,请稍后 ..."); |
|
TQMJJSInit(); |
|
if (listEllipsoidAreaTable == null || listEllipsoidAreaTable.Count <= 0) |
|
{ |
|
MessageHelper.ShowTips("椭球面积计算失败,dataGrid数据源为空!"); |
|
return; |
|
} |
|
this.UpdateMsg("正在计算椭球面积..."); |
|
foreach (EllipsoidAreaTable item in listEllipsoidAreaTable) |
|
{ |
|
IFeatureLayer pFeatureLayer = MapsManager.Instance.MapService.GetFeatureLayerByName(item.TableName); |
|
if (pFeatureLayer == null || pFeatureLayer.FeatureClass == null) continue; |
|
if ((pFeatureLayer.FeatureClass as FeatureClass).BrowseName == item.TableName) |
|
{ |
|
if (pFeatureLayer == null || pFeatureLayer.FeatureClass == null) continue; |
|
//获取当前图层需要计算椭球面积要素的总数 |
|
this.UpdateMsg(string.Format("正在计算【{0}】椭球面积…", item.TableAliasName)); |
|
int fieldIndex = pFeatureLayer.FeatureClass.Fields.FindField(item.FieldName); |
|
if (fieldIndex > -1) |
|
{ |
|
SetFeatureEllipsoidArea(pFeatureLayer, fieldIndex); |
|
} |
|
} |
|
} |
|
} |
|
else if (list[i].ItemType == "BSM") |
|
{ |
|
this.UpdateMsg("正在进行标识码赋值,请稍候..."); |
|
LayerData(); |
|
BSMExecute(); |
|
} |
|
else if (list[i].ItemType == "YSDM") |
|
{ |
|
this.UpdateMsg("正在进行要素代码赋值,请稍后 ..."); |
|
YSDMInit(); |
|
YSDMExecute(); |
|
} |
|
else if (list[i].ItemType == "KCXS") |
|
{ |
|
this.UpdateMsg("正在进行扣除系数赋值,请稍后 ..."); |
|
KCDLXSExcute(); |
|
} |
|
else if (list[i].ItemType == "KCMJ") |
|
{ |
|
this.UpdateMsg("正在进行扣除面积赋值,请稍后 ..."); |
|
KCDLMJExecute(); |
|
} |
|
else if (list[i].ItemType == "GDPDJB_DLZL") |
|
{ |
|
this.UpdateMsg("正在进行耕地坡度级别赋值(单纯变化增量),请稍后 ..."); |
|
GDPDJBUpdate_DLZL(); |
|
} |
|
else if (list[i].ItemType == "KCXS_GDWBH") |
|
{ |
|
this.UpdateMsg("正在进行扣除系数赋值(耕地未变化),请稍后 ..."); |
|
KCXSUpdate_GDWBH(); |
|
KCDLXSExcute(); |
|
KCDLMJExecute(); |
|
} |
|
else if (list[i].ItemType == "TBXHDM_GD") |
|
{ |
|
TBXHDM_GD(); |
|
} |
|
else if (list[i].ItemType == "XMSX") |
|
{ |
|
this.UpdateMsg("正在进行项目属性赋值,请稍候..."); |
|
|
|
ProjectInfo projectInfo = MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo; |
|
SetGXField(projectInfo.ProjType, "DLTBGX"); |
|
SetGXField(projectInfo.ProjType, "DLTBGXGC"); |
|
|
|
//测试 |
|
//SetGXField(projectInfo.ProjType, "CZCDYDGX"); |
|
//SetGXField(projectInfo.ProjType, "CZCDYDGXGC"); |
|
} |
|
else |
|
{ |
|
MessageHelper.ShowError("请选择其中一项进行属性维护!"); |
|
return; |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
LogAPI.Debug("属性维护过程中失败:" + ex.Message); |
|
throw ex; |
|
} |
|
} |
|
private IWorkspace CreateDBWorkspace(string pDbPath) |
|
{ |
|
try |
|
{ |
|
if (!File.Exists(pDbPath)) |
|
{ |
|
Console.WriteLine(string.Format("指定的文件路径{0}不存在!", pDbPath)); |
|
return null; |
|
} |
|
IWorkspaceFactory pOutWorkFactory = null; |
|
pOutWorkFactory = new SqlWorkspaceFactoryClass(); |
|
IWorkspace pOutWork = pOutWorkFactory.OpenFromFile(pDbPath, 0); |
|
return pOutWork; |
|
} |
|
catch (Exception ex) |
|
{ |
|
Console.WriteLine($"Log:CreateDBWorkspace错误:{ex.Message}"); |
|
throw; |
|
} |
|
} |
|
|
|
private void GDPDJBUpdate_DLZL() |
|
{ |
|
IFeatureClass DLTBGXFC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX"); |
|
IFeatureClass DLTBGXGCFC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC"); |
|
try |
|
{ |
|
if (DLTBGXFC == null || DLTBGXGCFC == null) return; |
|
List<string> testDatas = new List<string>() { "0101", "0102", "0103" };//耕地 |
|
if (DLTBGXFC.FeatureCount(null) == 0 || DLTBGXGCFC.FeatureCount(null) == 0) return; |
|
ICursor pCur = null; |
|
IRow row = null; |
|
string UpDateGCZLOIDs = string.Empty; |
|
Dictionary<string, int> keyValuePairs = new Dictionary<string, int>(); |
|
Dictionary<string, int> keyValueReMove = new Dictionary<string, int>(); |
|
IQueryDef pQDef = ((DLTBGXGCFC as FeatureClass).Workspace as IFeatureWorkspace).CreateQueryDef(); |
|
pQDef.Tables = "DLTBGXGC"; |
|
//pQDef.WhereClause = " 1=1 AND BGQDLBM like '01%' AND BGHDLBM like '01%' AND BGXW='2'"; |
|
pQDef.WhereClause = " 1=1 "; |
|
pQDef.SubFields = "BGQTBBSM,BGHTBBSM,BGQDLBM,BGHDLBM"; |
|
pCur = pQDef.Evaluate(); |
|
while ((row = pCur.NextRow()) != null) |
|
{ |
|
string BGQDL = row.get_Value(2).ToTrim(); |
|
string BGHDL = row.get_Value(3).ToTrim(); |
|
if (!testDatas.Contains(row.get_Value(2).ToTrim()) || !testDatas.Contains(row.get_Value(3).ToTrim())) |
|
{ |
|
keyValueReMove[row.get_Value(0).ToTrim()] = 0; |
|
} |
|
//获取图形变更的 |
|
if (!keyValueReMove.ContainsKey(row.get_Value(0).ToTrim())) |
|
if (!keyValuePairs.ContainsKey(row.get_Value(0).ToString())) |
|
keyValuePairs[row.get_Value(0).ToString()] = 1; |
|
else |
|
keyValuePairs[row.get_Value(0).ToString()] = 2; |
|
else if (keyValuePairs.ContainsKey(row.get_Value(0).ToTrim())) |
|
keyValuePairs.Remove(row.get_Value(0).ToTrim()); |
|
} |
|
Dictionary<string, int> keyValueDCBG = new Dictionary<string, int>(); |
|
Dictionary<string, int> keyValueReDCBG = new Dictionary<string, int>(); |
|
pCur = pQDef.Evaluate(); |
|
while ((row = pCur.NextRow()) != null) |
|
{ |
|
string BGQBSMValue = row.get_Value(0).ToTrim(); |
|
string BGHBSMValue = row.get_Value(1).ToTrim(); |
|
if ((keyValuePairs.ContainsKey(BGQBSMValue) && keyValuePairs[BGQBSMValue] == 2) || keyValueDCBG.ContainsKey(BGHBSMValue)) |
|
{ |
|
if (!keyValueDCBG.ContainsKey(BGHBSMValue) && !keyValueReDCBG.ContainsKey(BGHBSMValue)) |
|
keyValueDCBG[BGHBSMValue] = 1; |
|
else |
|
keyValueDCBG[BGHBSMValue] = 2; |
|
} |
|
else |
|
keyValueReDCBG[BGHBSMValue] = 0; |
|
} |
|
string UpZLData = string.Empty; |
|
foreach (var item in keyValueDCBG) |
|
{ |
|
if (item.Value == 1) |
|
UpZLData += $"'{item.Key}',"; |
|
} |
|
if (string.IsNullOrEmpty(UpZLData)) return; |
|
|
|
row = null; |
|
int BGHGDPDJBIndex = DLTBGXGCFC.FindField("BGHGDPDJB"); |
|
int BGHGDLXIndex = DLTBGXGCFC.FindField("BGHGDLX"); |
|
int BGQGDPDJBIndex = DLTBGXGCFC.FindField("BGQGDPDJB"); |
|
int BGQGDLXIndex = DLTBGXGCFC.FindField("BGQGDLX"); |
|
int BGQKCXSIndex = DLTBGXGCFC.FindField("BGQKCXS"); |
|
int BGHKCXSIndex = DLTBGXGCFC.FindField("BGHKCXS"); |
|
int BGQKCDLBMIndex = DLTBGXGCFC.FindField("BGQKCDLBM"); |
|
int BGHKCDLBMIndex = DLTBGXGCFC.FindField("BGHKCDLBM"); |
|
int BGHTBBSMIndex = DLTBGXGCFC.FindField("BGHTBBSM"); |
|
int GCBSMIndex = DLTBGXGCFC.FindField("BSM"); |
|
|
|
Dictionary<string, string> keyValueGDJB = new Dictionary<string, string>(); |
|
IQueryFilter queryFilter = new QueryFilterClass() |
|
{ |
|
WhereClause = $"BGHTBBSM in({UpZLData.Trim(',')}) AND BGQDLBM like '01%' AND BGHDLBM like '01%' AND BGXW='2' AND BGQDLBM<>BGHDLBM" |
|
}; |
|
ICursor cursorZL = (DLTBGXGCFC as ITable).Update(queryFilter, true); |
|
while ((row = cursorZL.NextRow()) != null) |
|
{ |
|
row.Value[BGHGDPDJBIndex] = row.Value[BGQGDPDJBIndex]; |
|
row.Value[BGHGDLXIndex] = row.Value[BGQGDLXIndex]; |
|
row.Value[BGHKCXSIndex] = row.Value[BGQKCXSIndex]; |
|
row.Value[BGHKCDLBMIndex] = row.Value[BGQKCDLBMIndex]; |
|
keyValueGDJB[row.Value[BGHTBBSMIndex].ToString()] = row.Value[BGQGDPDJBIndex].ToString() + "_" + row.Value[BGQGDLXIndex].ToString() + "_" + row.Value[BGQKCXSIndex].ToString() + "_" + row.Value[BGQKCDLBMIndex].ToString(); |
|
cursorZL.UpdateRow(row); |
|
} |
|
cursorZL.Flush(); |
|
#region MyRegion |
|
row = null; |
|
int BSMIndex = DLTBGXFC.FindField("BSM"); |
|
int OBJECTIDIndex = DLTBGXFC.FindField("OBJECTID"); |
|
int GDPDJBIndex = DLTBGXFC.FindField("GDPDJB"); |
|
int GDLXIndex = DLTBGXFC.FindField("GDLX"); |
|
int KCXSIndex = DLTBGXFC.FindField("KCXS"); |
|
int KCDLBMIndex = DLTBGXFC.FindField("KCDLBM"); |
|
//int shapeIndex = DLTBGXFC.Fields.FindField("SHAPE"); |
|
queryFilter.WhereClause = $"BSM in({UpZLData.Trim(',')})"; |
|
cursorZL = (DLTBGXFC as ITable).Update(queryFilter, true); |
|
while ((row = cursorZL.NextRow()) != null) |
|
{ |
|
if (keyValueGDJB.ContainsKey(row.Value[BSMIndex].ToString())) |
|
{ |
|
row.Value[GDPDJBIndex] = keyValueGDJB[row.Value[BSMIndex].ToString()].Split('_')[0]; |
|
row.Value[GDLXIndex] = keyValueGDJB[row.Value[BSMIndex].ToString()].Split('_')[1]; |
|
row.Value[KCXSIndex] = keyValueGDJB[row.Value[BSMIndex].ToString()].Split('_')[2]; |
|
row.Value[KCDLBMIndex] = keyValueGDJB[row.Value[BSMIndex].ToString()].Split('_')[3]; |
|
cursorZL.UpdateRow(row); |
|
} |
|
} |
|
cursorZL.Flush(); |
|
#endregion |
|
|
|
#region 合并-待验证 |
|
string FieldsJH = "DLBM,DLMC,QSXZ,QSDWDM,QSDWMC,ZLDWDM,ZLDWMC,KCDLBM,KCXS,GDLX,GDPDJB,XZDWKD,TBXHDM,TBXHMC,ZZSXDM,ZZSXMC,GDDB,FRDBS,CZCSXM,MSSM,HDMC"; |
|
string DLNMValues = "0101,0102,0103"; |
|
IFeatureCursor featureCursor = DLTBGXFC.Update(queryFilter, true); |
|
IFeature feature = null; |
|
//int BSMIndex = DLTBGXFC.FindField("BSM"); |
|
int TBMJIndex = DLTBGXFC.FindField("TBMJ"); |
|
int DLBMIndex = DLTBGXFC.FindField("DLBM"); |
|
int TBBHIndex = DLTBGXFC.FindField("TBBH"); |
|
int BGHTBBHIndex = DLTBGXFC.FindField("BGHTBBH"); |
|
int BGHTBMJIndex = DLTBGXGCFC.FindField("TBBGMJ"); |
|
int BGQTBBSMIndex = DLTBGXGCFC.FindField("BGQTBBSM"); |
|
IFeatureLayer featureLayer = new FeatureLayer() { FeatureClass = DLTBGXFC }; |
|
while ((feature = featureCursor.NextFeature()) != null) |
|
{ |
|
List<IFeature> features = FeatureAPI.Identify(feature.ShapeCopy, featureLayer); |
|
if (features.Count >= 2) |
|
{ |
|
for (int i = 0; i < features.Count; i++) |
|
{ |
|
if (features[i].OID.Equals(feature.OID)) continue;//非本身 |
|
if (!DLNMValues.Contains(features[i].Value[DLBMIndex].ToTrim())) continue;//非耕地 |
|
var length = FeatureAPI.LengthOfSide(features[i].ShapeCopy, feature.ShapeCopy); |
|
if (length <= 0.0) continue;//非正相邻 |
|
bool IsHB = true; |
|
foreach (var item in FieldsJH.Split(',')) |
|
{ |
|
int tempIndex = DLTBGXFC.FindField(item); |
|
if (feature.Value[tempIndex].ToTrim() != features[i].Value[tempIndex].ToTrim()) |
|
IsHB = false; |
|
} |
|
if (!IsHB) continue; |
|
feature.Shape = FeatureAPI.Union(feature.Shape, features[i].Shape); |
|
feature.Value[TBMJIndex] = feature.Value[TBMJIndex].ToDouble() + features[i].Value[TBMJIndex].ToDouble(); |
|
featureCursor.UpdateFeature(feature); |
|
IFeatureCursor GCCueor = DLTBGXGCFC.Update(new QueryFilterClass() { WhereClause = $"BGHTBBSM='{feature.Value[BSMIndex].ToTrim()}'" }, true); |
|
IFeatureCursor GCCueorZB = DLTBGXGCFC.Update(new QueryFilterClass() { WhereClause = $"BGHTBBSM='{features[i].Value[BSMIndex].ToTrim()}'" }, true); |
|
IFeature GCFeature = GCCueor.NextFeature(); |
|
IFeature GCFeatureHB = GCCueorZB.NextFeature(); |
|
if (GCFeature != null && GCFeatureHB != null && GCFeature.Value[BGQTBBSMIndex].ToTrim() == GCFeatureHB.Value[BGQTBBSMIndex].ToTrim()) |
|
{ //变更前标识码一致,过程层图斑才能合并 |
|
GCFeature.Shape = FeatureAPI.Union(GCFeature.Shape, GCFeatureHB.Shape); |
|
GCFeature.Value[BGHTBMJIndex] = feature.Value[TBMJIndex].ToDouble(); |
|
GCCueor.UpdateFeature(GCFeature); |
|
GCCueor.Flush(); |
|
GCFeatureHB.Delete(); |
|
GCCueorZB.Flush(); |
|
} |
|
//(DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGXGC set BGHTBBH='{feature.Value[TBBHIndex].ToTrim()}' where BGHTBBSM='{features[i].Value[BSMIndex].ToTrim()}'"); |
|
//(DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGXGC set BGHTBBSM='{feature.Value[BSMIndex].ToTrim()}' where BGHTBBSM='{features[i].Value[BSMIndex].ToTrim()}'"); |
|
features[i].Delete(); |
|
} |
|
} |
|
else if (feature != null) Marshal.ReleaseComObject(feature); |
|
} |
|
featureCursor.Flush(); |
|
#endregion |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("耕地坡度级别赋值(单纯变化增量)异常:" + ex); |
|
} |
|
} |
|
|
|
public virtual string CreateTempDB(string pType, string pSubType = "") |
|
{ |
|
string result = string.Empty; |
|
try |
|
{ |
|
string dbPath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "Temp" + ".db"); |
|
string gdbFolder = Directory.GetCurrentDirectory() + "\\Temp\\" + pType; |
|
if (!Directory.Exists(gdbFolder)) |
|
Directory.CreateDirectory(gdbFolder); |
|
|
|
PluginServiceInterface.CommonHelper.DelectDir(gdbFolder); |
|
|
|
IWorkspaceFactory pFtWsFct = new FileGDBWorkspaceFactory(); |
|
string gdbFileName = DateTime.Now.ToString("yyyyMMddHHmmssfff");// Guid.NewGuid().ToString().Replace("-", ""); |
|
string path = System.IO.Path.Combine(gdbFolder, string.IsNullOrWhiteSpace(pSubType) ? gdbFileName : pSubType); |
|
pFtWsFct.Create(path, "TempGDB", null, 0); |
|
if (!Directory.Exists(path)) |
|
{ |
|
Directory.CreateDirectory(path); |
|
} |
|
if (File.Exists(dbPath)) |
|
{ |
|
File.Copy(dbPath, System.IO.Path.Combine(path, "Temp" + ".sqlite")); |
|
} |
|
else |
|
{ |
|
Console.WriteLine(string.Format("文件{0}不存在!", dbPath)); |
|
} |
|
result = path;// System.IO.Path.Combine(path, "TempGDB.gdb");//临时数据存放路径 |
|
} |
|
catch (Exception ex) |
|
{ |
|
Console.WriteLine("创建临时数据库失败!" + ex.Message); |
|
throw ex; |
|
} |
|
return result; |
|
} |
|
|
|
public bool TableToTable(IFeatureWorkspace pInWork, IWorkspace pOutWork, string tableName, IQueryFilter queryFilter = null) |
|
{ |
|
try |
|
{ |
|
if (pInWork == null || pOutWork == null || string.IsNullOrEmpty(tableName)) return false; |
|
IWorkspace2 workspace2 = pInWork as IWorkspace2; |
|
if (workspace2 != null) |
|
{ |
|
if (!workspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, tableName)) |
|
{ |
|
return false; |
|
} |
|
} |
|
ITable pInTable = pInWork.OpenTable(tableName); |
|
if (pInTable == null) return false; |
|
IDataset pIndataset = (IDataset)pInTable; |
|
IDatasetName pInDatasetName = (IDatasetName)pIndataset.FullName; |
|
IEnumDataset enumDataset = pOutWork.get_Datasets(esriDatasetType.esriDTTable); |
|
IDataset dataset; |
|
enumDataset.Reset(); |
|
while ((dataset = enumDataset.Next()) != null) |
|
{ |
|
string[] names = dataset.Name.Split('.'); |
|
if (string.Equals(names[names.Length - 1], tableName, StringComparison.CurrentCultureIgnoreCase)) |
|
{ |
|
dataset.Delete(); |
|
break; |
|
} |
|
} |
|
IDataset pOutDataset = (IDataset)pOutWork; |
|
IDatasetName pOutDatasetName = new TableNameClass(); |
|
pOutDatasetName.WorkspaceName = (IWorkspaceName)pOutDataset.FullName; |
|
pOutDatasetName.Name = tableName; |
|
IFieldChecker fieldChecker = new FieldCheckerClass(); |
|
IFields targetFeatureClassFields = pInTable.Fields; |
|
IFields sourceFeatureClassFields = pInTable.Fields; |
|
IEnumFieldError enumFieldError; |
|
fieldChecker.InputWorkspace = pInWork as IWorkspace; |
|
fieldChecker.ValidateWorkspace = pOutWork; |
|
fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError, out targetFeatureClassFields); |
|
IFeatureDataConverter one2another = new FeatureDataConverterClass(); |
|
try |
|
{ |
|
one2another.ConvertTable(pInDatasetName, queryFilter, pOutDatasetName, targetFeatureClassFields, "", 1000, 0); |
|
} |
|
finally |
|
{ |
|
Marshal.ReleaseComObject(one2another); |
|
} |
|
return true; |
|
} |
|
catch (Exception ex) |
|
{ |
|
//LogAPI.Debug(ex); |
|
throw ex; |
|
} |
|
} |
|
private void KCXSUpdate_GDWBH() |
|
{ |
|
IWorkspace pOutWork = null; |
|
try |
|
{ |
|
IFeatureClass DLTBGXGCFC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC"); |
|
string TempDir = CreateTempDB("KCXSUpdate"); |
|
string dbPath = TempDir + @"\Temp" + ".sqlite"; |
|
pOutWork = CreateDBWorkspace(dbPath); |
|
|
|
//CustomGPHelper.TableToTable(Temp_DLTBGXGC, dbPath, "DLTBGXGC"); |
|
|
|
IRDBHelper rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); |
|
rdbHelper.ExecuteSQL(" drop table DLTBGXGC "); |
|
TableToTable((DLTBGXGCFC as FeatureClass).Workspace as IFeatureWorkspace, pOutWork, "DLTBGXGC"); |
|
|
|
//DataTable dt = rdbHelper.ExecuteDatatable("dt", @"select bgqtbbsm,bghtbbsm,bgqgdpdjb,bghgdpdjb,bgqkcxs,bghkcxs from dltbgxgc where bgqtbbsm NOT in( |
|
//select bgqtbbsm from dltbgxgc where substr(bgqdlbm,1,2)='01' and substr(bghdlbm,1,2)!='01' |
|
//) and substr(bgqdlbm,1,2)='01' and substr(bghdlbm,1,2)='01' and bgxw='2' and bgqkcxs!=bghkcxs |
|
//", true); |
|
DataTable dt = rdbHelper.ExecuteDatatable("dt", @" select bgqtbbsm,bghtbbsm,bgqgdpdjb,bghgdpdjb,bgqkcxs,bghkcxs from dltbgxgc where substr(bgqdlbm,1,2)='01' and substr(bghdlbm,1,2)='01' and bgxw='2' and BGQGDPDJB<>BGHGDPDJB ", true); |
|
for (int i = 0; i < dt.Rows.Count; i++) |
|
{ |
|
(DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGXGC set BGHKCXS={dt.Rows[i]["BGQKCXS"]} where BGHTBBSM='{dt.Rows[i]["BGHTBBSM"]}'"); |
|
(DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGXGC set BGHGDPDJB='{dt.Rows[i]["BGQGDPDJB"]}' where BGHTBBSM='{dt.Rows[i]["BGHTBBSM"]}'"); |
|
|
|
(DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGX set KCXS={dt.Rows[i]["BGQKCXS"]} where BSM='{dt.Rows[i]["BGHTBBSM"]}'"); |
|
(DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGX set GDPDJB='{dt.Rows[i]["BGQGDPDJB"]}' where BSM='{dt.Rows[i]["BGHTBBSM"]}'"); |
|
} |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("扣除地类面积计算异常:" + ex.Message); |
|
MessageHelper.ShowError("扣除地类面积计算异常:" + ex.Message); |
|
} |
|
finally |
|
{ |
|
if (pOutWork != null) |
|
Marshal.ReleaseComObject(pOutWork); |
|
} |
|
} |
|
private void TBXHDM_GD() |
|
{ |
|
IWorkspace pOutWork = null; |
|
try |
|
{ |
|
IFeatureClass DLTBGXGCFC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC"); |
|
string TempDir = CreateTempDB("TBXHDM_GD"); |
|
string dbPath = TempDir + @"\Temp" + ".sqlite"; |
|
pOutWork = CreateDBWorkspace(dbPath); |
|
IRDBHelper rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); |
|
rdbHelper.ExecuteSQL(" drop table DLTBGXGC "); |
|
TableToTable((DLTBGXGCFC as FeatureClass).Workspace as IFeatureWorkspace, pOutWork, "DLTBGXGC"); |
|
DataTable dt = rdbHelper.ExecuteDatatable("dt", @"select bgqtbbsm,bghtbbsm,BGQTBXHDM,BGQTBXHMC,BGHTBXHDM,BGHTBXHMC from dltbgxgc |
|
where substr(bgqdlbm,1,2)='01' and substr(bghdlbm,1,2)='01' and BGQTBXHDM in('LQGD','MQGD','SHGD','SMGD') |
|
and |
|
( |
|
(BGQTBXHMC NOTNULL and BGHTBXHMC ISNULL) |
|
or |
|
(BGQTBXHDM NOTNULL and BGHTBXHDM ISNULL) |
|
or |
|
BGQTBXHDM<>BGHTBXHDM |
|
or |
|
BGQTBXHMC<>BGHTBXHMC |
|
) ", true); |
|
for (int i = 0; i < dt.Rows.Count; i++) |
|
{ |
|
(DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGXGC set BGHTBXHDM='{dt.Rows[i]["BGQTBXHDM"]}' where BGHTBBSM='{dt.Rows[i]["BGHTBBSM"]}'"); |
|
(DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGXGC set BGHTBXHMC='{dt.Rows[i]["BGQTBXHMC"]}' where BGHTBBSM='{dt.Rows[i]["BGHTBBSM"]}'"); |
|
|
|
(DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGX set TBXHDM='{dt.Rows[i]["BGQTBXHDM"]}' where BSM='{dt.Rows[i]["BGHTBBSM"]}'"); |
|
(DLTBGXGCFC as FeatureClass).Workspace.ExecuteSQL($"update DLTBGX set TBXHMC='{dt.Rows[i]["BGQTBXHMC"]}' where BSM='{dt.Rows[i]["BGHTBBSM"]}'"); |
|
} |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("扣除地类面积计算异常:" + ex.Message); |
|
MessageHelper.ShowError("扣除地类面积计算异常:" + ex.Message); |
|
} |
|
finally |
|
{ |
|
if (pOutWork != null) |
|
Marshal.ReleaseComObject(pOutWork); |
|
} |
|
} |
|
private void SetGXField(EnumProjType projType, string secondLayerName) |
|
{ |
|
try |
|
{ |
|
IFeatureLayer dltbbg_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBBG"); |
|
IFeatureLayer dltbgx_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName(secondLayerName); |
|
if (dltbbg_Layer == null || dltbgx_Layer == null) return; |
|
|
|
GPParamClass gPParamClassGX = new GPParamClass(); |
|
gPParamClassGX.FirstFeatureLayer = dltbbg_Layer; |
|
gPParamClassGX.GPType = EnumGPType.Union; |
|
gPParamClassGX.SecondFeatureLayer = dltbgx_Layer; |
|
gPParamClassGX.FcName = dltbbg_Layer.Name; |
|
gPParamClassGX.IsGetOutPutFeature = true; |
|
|
|
IFeatureLayer unionLayer = null; |
|
GeoprocessorHelper.UnionAnalysis(gPParamClassGX, ref unionLayer); |
|
if (unionLayer == null) return; |
|
int fid_DLTBBGIndex = unionLayer.FeatureClass.Fields.FindField("FID_DLTBBG"); |
|
int fid_DLTBGXIndex = unionLayer.FeatureClass.Fields.FindField("FID_" + secondLayerName); |
|
ITable nmkTable = unionLayer.FeatureClass as ITable; |
|
int rowCount = nmkTable.RowCount(null); |
|
if (rowCount <= 0) return; |
|
ICursor nmkCur = nmkTable.Update(null, true); |
|
IRow nmkRow = null; |
|
Dictionary<string, string> fieldKeyValues = new Dictionary<string, string>(); |
|
while ((nmkRow = nmkCur.NextRow()) != null) |
|
{ |
|
var bgValue = nmkRow.Value[fid_DLTBBGIndex]; |
|
var gxValue = nmkRow.Value[fid_DLTBGXIndex]; |
|
if (!string.IsNullOrEmpty(nmkRow.Value[fid_DLTBBGIndex].ToString()) && nmkRow.Value[fid_DLTBBGIndex].ToString() != "-1" && !string.IsNullOrEmpty(nmkRow.Value[fid_DLTBGXIndex].ToString()) && nmkRow.Value[fid_DLTBGXIndex].ToString() != "-1") |
|
{ |
|
if (projType == EnumProjType.RCBG_ZJG) |
|
{ |
|
fieldKeyValues.Clear(); |
|
fieldKeyValues.Add("XMMC", nmkRow.Value[unionLayer.FeatureClass.Fields.FindField("XMMC")].ToString()); |
|
fieldKeyValues.Add("XMQBH", nmkRow.Value[unionLayer.FeatureClass.Fields.FindField("XMQBH")].ToString()); |
|
fieldKeyValues.Add("DKBH", nmkRow.Value[unionLayer.FeatureClass.Fields.FindField("DKBH")].ToString()); |
|
|
|
AlterField(dltbgx_Layer, Convert.ToInt32(nmkRow.Value[fid_DLTBGXIndex]), fieldKeyValues); |
|
|
|
//string sqlGC = string.Format("UPDATE {0} SET XMMC='{1}', XMQBH='{2}', DKBH='{3}' WHERE OBJECTID='{4}'", |
|
// (dltbgx_Layer.FeatureClass as FeatureClass).BrowseName, |
|
// nmkRow.Value[unionLayer.FeatureClass.Fields.FindField("XMMC")].ToString(), |
|
// nmkRow.Value[unionLayer.FeatureClass.Fields.FindField("XMQBH")].ToString(), |
|
// nmkRow.Value[unionLayer.FeatureClass.Fields.FindField("DKBH")].ToString(), |
|
// nmkRow.Value[fid_DLTBGXIndex]); |
|
//(dltbgx_Layer.FeatureClass as FeatureClass).Workspace.ExecuteSQL(sqlGC); |
|
} |
|
else if (projType == EnumProjType.RCBG_BCGD) |
|
{ |
|
fieldKeyValues.Clear(); |
|
fieldKeyValues.Add("XMMC", nmkRow.Value[unionLayer.FeatureClass.Fields.FindField("XMMC")].ToString()); |
|
fieldKeyValues.Add("BCGDXMQBH", nmkRow.Value[unionLayer.FeatureClass.Fields.FindField("BCGDXMQBH")].ToString()); |
|
|
|
AlterField(dltbgx_Layer, Convert.ToInt32(nmkRow.Value[fid_DLTBGXIndex]), fieldKeyValues); |
|
|
|
//string sqlGC = string.Format("UPDATE {0} SET XMMC='{1}', BCGDXMQBH='{2}' WHERE OBJECTID='{3}'", |
|
// (dltbgx_Layer.FeatureClass as FeatureClass).BrowseName, |
|
// nmkRow.Value[unionLayer.FeatureClass.Fields.FindField("XMMC")].ToString(), |
|
// nmkRow.Value[unionLayer.FeatureClass.Fields.FindField("BCGDXMQBH")].ToString(), |
|
// nmkRow.Value[fid_DLTBGXIndex]); |
|
//(dltbgx_Layer.FeatureClass as FeatureClass).Workspace.ExecuteSQL(sqlGC); |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.ShowError("项目属性维护失败,可能的原因是:" + ex.Message); |
|
LogAPI.Debug("项目属性维护失败:" + ex.Message); |
|
return; |
|
} |
|
} |
|
|
|
private void AlterField(IFeatureLayer featureLayer, int objectID, Dictionary<string, string> fieldKeyValues) |
|
{ |
|
try |
|
{ |
|
IDataset dataset = (IDataset)featureLayer.FeatureClass; |
|
try |
|
{ |
|
IFeature pFeature = featureLayer.FeatureClass.GetFeature(objectID); |
|
foreach (var currentField in fieldKeyValues) |
|
{ |
|
pFeature.set_Value(featureLayer.FeatureClass.FindField(currentField.Key), currentField.Value); |
|
} |
|
pFeature.Store(); |
|
Marshal.ReleaseComObject(pFeature); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("当前获取要素失败(不处理):" + ex.Message); |
|
//throw new Exception(""); |
|
} |
|
} |
|
catch (Exception) |
|
{ |
|
return; |
|
} |
|
} |
|
|
|
#region TQMJJSInit |
|
/// <summary> |
|
/// 椭球面积计算-初始化 |
|
/// </summary> |
|
public void TQMJJSInit() |
|
{ |
|
try |
|
{ |
|
#region 初始化Grid数据 |
|
List<RuleTableEntity> listTable = DataCheckTableMappingConfig.BGGetListRuleTableEntity().FindAll(x => x.Columns != null && x.Columns.Count > 0 && x.Columns.FindAll(k => k.IsEllipsoidArea).Count() > 0); |
|
listEllipsoidAreaTable = new List<EllipsoidAreaTable>(); |
|
int featureID = 0; |
|
foreach (var ruleTable in listTable) |
|
{ |
|
EllipsoidAreaTable pEllipsoidArea = new EllipsoidAreaTable |
|
{ |
|
FeatureClassID = featureID, |
|
TableName = ruleTable.TableName, |
|
Workspace = "",//(MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetSchemeDBPath(), |
|
TableAliasName = ruleTable.TableAliasName, |
|
ListField = new List<AreaField>(), |
|
FieldName = ruleTable.Columns.FirstOrDefault(x => x.IsEllipsoidArea).ColumnName, |
|
FieldAliasName = ruleTable.Columns.FirstOrDefault(x => x.IsEllipsoidArea).AliasName |
|
}; |
|
if (ruleTable.TableAliasName == "生态保护红线更新") |
|
{ |
|
pEllipsoidArea.FieldAliasName += "(km²)"; |
|
} |
|
//else if (ruleTable.TableAliasName == "临时用地更新") |
|
//{ |
|
// pEllipsoidArea.FieldAliasName += "(公顷)"; |
|
//} |
|
pEllipsoidArea.IsChecked = true; |
|
listEllipsoidAreaTable.Add(pEllipsoidArea); |
|
featureID++; |
|
} |
|
#endregion |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.ShowError("椭球面积计算界面初始化异常:" + ex.Message); |
|
} |
|
} |
|
#endregion |
|
|
|
#region SetFeatureEllipsoidArea |
|
/// <summary> |
|
/// 计算赋值椭球面积字段 |
|
/// </summary> |
|
/// <param name="pFeatureClass">要素类</param> |
|
/// <param name="listFieldIndex">椭球面积字段Index</param> |
|
public void SetFeatureEllipsoidArea(IFeatureLayer pFeatureLayer, int fieldIndex) |
|
{ |
|
if (pFeatureLayer == null || pFeatureLayer.FeatureClass == null) |
|
return; |
|
string LayerName = pFeatureLayer.FeatureClass.AliasName; |
|
ICursor pCursor = null; |
|
IFeature pFeature = null; |
|
ISelectionSet pSelectionSet = null; |
|
try |
|
{ |
|
pCursor = (pFeatureLayer.FeatureClass as ITable).Update(null, true); |
|
int shapeIndex = pFeatureLayer.FeatureClass.Fields.FindField("SHAPE"); |
|
int GXSjIndex = pFeatureLayer.FeatureClass.Fields.FindField("GXSJ"); |
|
if (shapeIndex < 0) |
|
{ |
|
throw new Exception("未找到SHAPE字段"); |
|
} |
|
IRow pRow = null; |
|
while ((pRow = pCursor.NextRow()) != null) |
|
{ |
|
IPolygon pPolygon = pRow.get_Value(shapeIndex) as IPolygon; |
|
//数据库机制,先清空再赋值 |
|
pRow.set_Value(fieldIndex, null); |
|
if (pPolygon == null || pPolygon.IsEmpty) |
|
{ |
|
pRow.set_Value(fieldIndex, 0); |
|
pRow.set_Value(GXSjIndex, DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31)); |
|
} |
|
else |
|
{ |
|
double area = pPolygon.GetEllipseArea(); |
|
//图斑面积赋值(计算图斑椭球面积) |
|
if (LayerName == "生态保护红线更新") |
|
{ |
|
pRow.set_Value(fieldIndex, Math.Round(area * 0.000001D, 4)); |
|
pRow.set_Value(GXSjIndex, DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31)); |
|
} |
|
//else if (LayerName == "临时用地更新") |
|
//{ |
|
// pRow.set_Value(fieldIndex, Math.Round(area * 0.0001, 2)); |
|
// pRow.set_Value(GXSjIndex, DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31);); |
|
//} |
|
else |
|
{ |
|
pRow.set_Value(fieldIndex, area); |
|
pRow.set_Value(GXSjIndex, DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31)); |
|
} |
|
} |
|
pCursor.UpdateRow(pRow); |
|
} |
|
pCursor.Flush(); |
|
} |
|
catch |
|
{ |
|
throw; |
|
} |
|
finally |
|
{ |
|
if (pCursor != null) |
|
{ |
|
Marshal.ReleaseComObject(pCursor); |
|
} |
|
if (pFeature != null) |
|
{ |
|
Marshal.ReleaseComObject(pFeature); |
|
} |
|
if (pSelectionSet != null) |
|
{ |
|
Marshal.ReleaseComObject(pSelectionSet); |
|
} |
|
} |
|
} |
|
#endregion |
|
|
|
#region 标识码赋值 |
|
public void LayerData() |
|
{ |
|
try |
|
{ |
|
layers = new List<LayerEntity>(); |
|
XDocument xDoc = XDocument.Load(SysAppPath.BG_GetMappingConfigPath()); |
|
foreach (XElement item in xDoc.Descendants("Table")) |
|
{ |
|
if (item.Attributes("TableName") == null || item.Attributes("TableName").Single().Value.ToUpper().Equals("DLTBGX") || item.Attributes("TableName").Single().Value.ToUpper().Equals("XZQGX") || item.Attributes("TableName").Single().Value.ToUpper().Equals("CJDCQGX") || item.Attributes("TableName").Single().Value.ToUpper().Equals("CZCDYDGX") || item.Attributes("TableName").Single().Value.ToUpper().Equals("XZQJXGX") || item.Attributes("TableName").Single().Value.ToUpper().Equals("CJDCQJXGX")) |
|
{ |
|
continue; |
|
} |
|
if (item.Attributes("Visiable").SingleOrDefault() == null || item.Attributes("Visiable").SingleOrDefault().Value.Equals("True")) |
|
{ |
|
LayerEntity layer = new LayerEntity(); |
|
layer.LayerName = item.Attributes("TableName").Single().Value; |
|
layer.LayerAlias = item.Attributes("Name").Single().Value; |
|
layer.LayerCDM = item.Attributes("CDM").Single().Value; |
|
layers.Add(layer); |
|
} |
|
} |
|
this.layers.ForEach(x => x.Check = true); |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.ShowError("初始化图层失败,可能的原因是:" + ex.Message); |
|
LogAPI.Debug("初始化图层失败:" + ex.Message); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 标识码赋值 |
|
/// </summary> |
|
/// <returns></returns> |
|
public bool BSMExecute() |
|
{ |
|
bool result = false; |
|
IWorkspace pWorkspace = null; |
|
IFeatureWorkspace pFeatureWorkspace = null; |
|
IFeatureClass pFeatureClass = null; |
|
IQueryFilter pQueryFilter = null; |
|
IFeatureCursor pFeatureCursor = null; |
|
//判断是否存在BSM重复 |
|
IFeatureCursor pExitFeatureCursor = null; |
|
IQueryFilter filter = new QueryFilter(); |
|
try |
|
{ |
|
if (!string.IsNullOrEmpty((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE) && (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE.Length == 6) |
|
{ |
|
//pWorkspaceFactory = new FileGDBWorkspaceFactory(); |
|
if (layers.Where(p => p.Check == true) != null) |
|
{ |
|
if (layers.Where(p => p.Check == true).Count() == 0) |
|
{ |
|
result = false; |
|
} |
|
else |
|
{ |
|
foreach (LayerEntity layer in layers.Where(p => p.Check == true)) |
|
{ |
|
this.UpdateMsg("正在对" + layer.LayerName + "中的 BSM 赋值"); |
|
//判断图层是否存在 |
|
//bool isExist = (pWorkspace as IWorkspace2).get_NameExists(esriDatasetType.esriDTFeatureClass, layer.LayerName); |
|
pFeatureClass = MapsManager.Instance.MapService.GetFeatureClassByName(layer.LayerName); |
|
if (pFeatureClass == null) continue; |
|
pWorkspace = (pFeatureClass as FeatureClass).Workspace; |
|
//pFeatureWorkspace = pWorkspace as IFeatureWorkspace; |
|
//pFeatureClass = pFeatureWorkspace.OpenFeatureClass(layer.LayerName); |
|
int bsmIndexof = pFeatureClass.FindField("BSM"); |
|
int gxsjIndexof = pFeatureClass.FindField("GXSJ"); |
|
if (bsmIndexof == -1 || gxsjIndexof == -1) continue; |
|
int maxValue = 0; |
|
int count = 0; |
|
string firstEightChar = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE + layer.LayerCDM; |
|
|
|
pFeatureCursor = pFeatureClass.Update(null, true); |
|
pExitFeatureCursor = pFeatureClass.Update(null, true); |
|
count = pFeatureClass.FeatureCount(null); |
|
|
|
Dictionary<string, List<int>> dicList = new Dictionary<string, List<int>>(); |
|
IFeature pFeature = null; |
|
IQueryFilter queryFilter = new QueryFilterClass(); |
|
while ((pFeature = pFeatureCursor.NextFeature()) != null) |
|
{ |
|
string bsm = pFeature.get_Value(bsmIndexof).ToTrim(); |
|
if (bsm.StartsWith(firstEightChar)) |
|
{ |
|
int bsmNum = Convert.ToInt32(bsm.Replace(firstEightChar, "")); |
|
if (bsmNum > maxValue) |
|
{ |
|
maxValue = bsmNum; |
|
} |
|
} |
|
if (!dicList.ContainsKey(bsm)) |
|
{ |
|
dicList.Add(bsm, new List<int>() { pFeature.OID }); |
|
} |
|
else |
|
{ |
|
dicList[bsm].Add(pFeature.OID); |
|
} |
|
} |
|
foreach (var item in dicList.Keys) |
|
{ |
|
if (!item.StartsWith(firstEightChar)) |
|
{ |
|
foreach (var oid in dicList[item]) |
|
{ |
|
maxValue++; |
|
filter.WhereClause = string.Format("OBJECTID={0}", oid); |
|
pFeatureCursor = pFeatureClass.Update(filter, true); |
|
while ((pFeature = pFeatureCursor.NextFeature()) != null) |
|
{ |
|
pFeature.set_Value(bsmIndexof, firstEightChar + maxValue.ToString().PadLeft(8, '0')); |
|
if (gxsjIndexof != -1) |
|
pFeature.set_Value(gxsjIndexof, DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31)); |
|
pFeatureCursor.UpdateFeature(pFeature); |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
List<int> oids = dicList[item]; |
|
if (oids.Count > 1) |
|
{ |
|
for (int i = 1; i < oids.Count; i++) |
|
{ |
|
maxValue++; |
|
filter.WhereClause = string.Format("OBJECTID={0}", oids[i]); |
|
pFeatureCursor = pFeatureClass.Update(filter, true); |
|
while ((pFeature = pFeatureCursor.NextFeature()) != null) |
|
{ |
|
pFeature.set_Value(bsmIndexof, firstEightChar + maxValue.ToString().PadLeft(8, '0')); |
|
if (gxsjIndexof != -1) |
|
pFeature.set_Value(gxsjIndexof, DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31)); |
|
pFeatureCursor.UpdateFeature(pFeature); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
pFeatureCursor.Flush(); |
|
} |
|
result = true; |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
throw new Exception("当前工程的行政区代码不对,请前往工程属性重新设置!"); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("赋值出现错误,可能的原因是:" + ex.StackTrace); |
|
throw new Exception("赋值出现错误,可能的原因是:" + ex.Message); |
|
} |
|
finally |
|
{ |
|
if (pFeatureCursor != null) |
|
Marshal.ReleaseComObject(pFeatureCursor); |
|
if (pFeatureClass != null) |
|
Marshal.ReleaseComObject(pFeatureClass); |
|
if (pWorkspace != null) |
|
Marshal.ReleaseComObject(pWorkspace); |
|
if (pFeatureWorkspace != null) |
|
Marshal.ReleaseComObject(pFeatureWorkspace); |
|
if (pQueryFilter != null) |
|
Marshal.ReleaseComObject(pQueryFilter); |
|
} |
|
return result; |
|
} |
|
|
|
#endregion |
|
|
|
/// <summary> |
|
/// 扣除地类面积赋值 |
|
/// </summary> |
|
private void KCDLMJExecute() |
|
{ |
|
IWorkspace pWorkspace = null; |
|
IRDBHelper rdbHelper = null; |
|
try |
|
{ |
|
this.UpdateMsg("正在进行扣除地类面积计算,请稍候..."); |
|
IFeatureClass DLTBGXFC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX"); |
|
//地类图斑更新层扣除面积计算 |
|
if (DLTBGXFC != null) |
|
{ |
|
IFeatureClassAPI dltbgxAPI = new FeatureClassAPI(DLTBGXFC);// wsAPI.OpenFeatureClass("DLTBGX"); |
|
pWorkspace = (DLTBGXFC as FeatureClass).Workspace; |
|
//地类图斑更新层扣除地类系数赋值 |
|
int indexofKCXS = dltbgxAPI.FeatureClass.FindField("KCXS"); |
|
int indexofKCMJ = dltbgxAPI.FeatureClass.FindField("KCMJ"); |
|
int indexofTBMJ = dltbgxAPI.FeatureClass.FindField("TBMJ"); |
|
int indexofTBDLMJ = dltbgxAPI.FeatureClass.FindField("TBDLMJ"); |
|
int indexofKCDLBM = dltbgxAPI.FeatureClass.FindField("KCDLBM"); |
|
if (indexofKCXS == -1 || indexofKCMJ == -1 || indexofTBMJ == -1 || indexofTBDLMJ == -1 || indexofKCDLBM == -1) |
|
{ |
|
MessageHelper.Show("地类图斑更新层中KCXS字段或者KCMJ字段或者TBMJ字段或者TBDLMJ字段或者KCDLBM字段不存在!!"); |
|
return; |
|
} |
|
this.UpdateMsg("【地类图斑更新层】正在进行扣除地类面积计算,请稍后..."); |
|
string sql = string.Format("UPDATE DLTBGX SET KCMJ = 0 WHERE TBMJ IS NULL OR TBMJ <= 0 OR KCXS IS NULL OR KCXS <= 0"); |
|
(DLTBGXFC as FeatureClass).Workspace.ExecuteSQL(sql); |
|
|
|
sql = string.Format("UPDATE DLTBGX SET KCDLBM='',KCXS=0,KCMJ=0,GDLX='' WHERE GDPDJB='1'"); |
|
pWorkspace.ExecuteSQL(sql); |
|
|
|
sql = string.Format("UPDATE DLTBGX SET KCMJ = round(TBMJ*KCXS + 0.0000001,2)"); |
|
pWorkspace.ExecuteSQL(sql); |
|
|
|
sql = string.Format("UPDATE DLTBGX SET TBDLMJ = round(TBMJ-KCMJ,2)"); |
|
pWorkspace.ExecuteSQL(sql); |
|
|
|
sql = string.Format("UPDATE DLTBGX SET KCDLBM='1203' WHERE TBMJ> 0 AND KCXS > 0"); |
|
pWorkspace.ExecuteSQL(sql); |
|
} |
|
|
|
IFeatureClass DLTBGXGCFC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC"); |
|
//地类图斑更新过程层扣除面积计算 |
|
if (DLTBGXGCFC != null) |
|
{ |
|
IFeatureClassAPI dltbgxgcAPI = new FeatureClassAPI(DLTBGXGCFC); |
|
pWorkspace = (DLTBGXGCFC as FeatureClass).Workspace; |
|
int indexofBGHKCXS = dltbgxgcAPI.FeatureClass.FindField("BGHKCXS"); |
|
int indexofBGHKCMJ = dltbgxgcAPI.FeatureClass.FindField("BGHKCMJ"); |
|
int indexofTBBGMJ = dltbgxgcAPI.FeatureClass.FindField("TBBGMJ"); |
|
int indexofBGHTBDLMJ = dltbgxgcAPI.FeatureClass.FindField("BGHTBDLMJ"); |
|
int indexofBGHKCDLBM = dltbgxgcAPI.FeatureClass.FindField("BGHKCDLBM"); |
|
if (indexofBGHKCXS == -1 || indexofBGHKCMJ == -1 || indexofTBBGMJ == -1 || indexofBGHTBDLMJ == -1 || indexofBGHKCDLBM == -1) |
|
{ |
|
MessageHelper.Show("地类图斑更新过程层中BGHKCXS字段或者BGHKCMJ字段或者TBBGMJ字段或者BGHTBDLMJ字段或者BGHKCDLBM字段不存在!!"); |
|
return; |
|
} |
|
this.UpdateMsg("【地类图斑更新过程层】正在进行扣除地类面积计算,请稍后..."); |
|
string sql = string.Format("UPDATE DLTBGXGC SET BGHKCMJ = 0 WHERE TBBGMJ IS NULL OR TBBGMJ <= 0 OR BGHKCXS IS NULL OR BGHKCXS <= 0"); |
|
pWorkspace.ExecuteSQL(sql); |
|
|
|
sql = string.Format("UPDATE DLTBGXGC SET BGHKCDLBM='',BGHKCXS=0,BGHKCMJ=0,BGHGDLX='' WHERE BGHGDPDJB='1'"); |
|
pWorkspace.ExecuteSQL(sql); |
|
|
|
sql = string.Format("UPDATE DLTBGXGC SET BGHKCMJ = round(TBBGMJ*BGHKCXS + 0.0000001,2) WHERE BGXW<>'0' and XZQTZLX <> '2'"); |
|
pWorkspace.ExecuteSQL(sql); |
|
|
|
sql = string.Format("UPDATE DLTBGXGC SET BGHTBDLMJ = round(TBBGMJ-BGHKCMJ,2) WHERE BGXW<>'0' and XZQTZLX <> '2'"); |
|
pWorkspace.ExecuteSQL(sql); |
|
|
|
sql = string.Format("UPDATE DLTBGXGC SET BGHKCDLBM='1203' WHERE TBBGMJ> 0 AND BGHKCXS > 0"); |
|
pWorkspace.ExecuteSQL(sql); |
|
|
|
sql = string.Format("UPDATE DLTBGXGC SET BGHTBDLMJ=0 WHERE XZQTZLX = '2' or XZQTZLX = '4'"); |
|
pWorkspace.ExecuteSQL(sql); |
|
} |
|
|
|
////变化信息表扣除面积计算 |
|
//string dbPath = System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite"; |
|
//rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); |
|
//if (rdbHelper.TableIsExist("BHXXB")) |
|
//{ |
|
// this.UpdateMsg("【变化信息表】正在进行扣除地类面积计算,请稍后..."); |
|
// DataTable bhxxbDt = rdbHelper.ExecuteDatatable("BHXXB", "select * from BHXXB", true); |
|
// if (!bhxxbDt.Columns.Contains("BGHKCXS") || !bhxxbDt.Columns.Contains("BGHKCMJ") || !bhxxbDt.Columns.Contains("BGMJ") || !bhxxbDt.Columns.Contains("BGHKCDLBM")) |
|
// { |
|
// MessageHelper.Show("BHXXB中BGHKCXS字段或者BGHKCMJ字段或者BGMJ字段或者BGHKCDLBM字段不存在!!"); |
|
// return; |
|
// } |
|
// string sql = string.Format("UPDATE BHXXB SET BGHKCMJ = 0 WHERE BGMJ IS NULL OR BGMJ <= 0 OR BGHKCXS IS NULL OR BGHKCXS <= 0"); |
|
// rdbHelper.ExecuteNonQuery(sql); |
|
|
|
// sql = string.Format("UPDATE BHXXB SET BGHKCDLBM='',BGHKCXS=0,BGHKCMJ = 0 ,BGHGDLX='' WHERE BGHGDPDJB='1'"); |
|
// rdbHelper.ExecuteNonQuery(sql); |
|
|
|
// sql = string.Format("UPDATE BHXXB SET BGHKCMJ = round(BGMJ*BGHKCXS+ 0.0000001,2) WHERE BGXW<>'0'"); |
|
// rdbHelper.ExecuteNonQuery(sql); |
|
|
|
// sql = string.Format("UPDATE BHXXB SET BGHKCDLBM='1203' WHERE BGMJ> 0 AND BGHKCXS > 0"); |
|
// rdbHelper.ExecuteNonQuery(sql); |
|
//} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("扣除地类面积计算异常:" + ex); |
|
LogAPI.Debug("扣除地类面积计算异常:" + ex.Message); |
|
MessageHelper.ShowError("扣除地类面积计算异常:" + ex.Message); |
|
} |
|
finally |
|
{ |
|
if (pWorkspace != null) |
|
Marshal.ReleaseComObject(pWorkspace); |
|
if (rdbHelper != null) |
|
rdbHelper.DisConnect(); |
|
} |
|
} |
|
/// <summary> |
|
/// 扣除地类系数赋值 |
|
/// </summary> |
|
private void KCDLXSExcute() |
|
{ |
|
IWorkspace pWorkspace = null; |
|
IRDBHelper rdbHelper = null; |
|
try |
|
{ |
|
List<GDEntity> Entitys = GDEntitys.Where(p => p.Checked == true).ToList(); |
|
this.UpdateMsg("正在进行扣除地类系数赋值,请稍候..."); |
|
IFeatureClass DLTBGXFC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX"); |
|
if (DLTBGXFC != null) |
|
{ |
|
IFeatureClassAPI dltbgxAPI = new FeatureClassAPI(DLTBGXFC);// wsAPI.OpenFeatureClass("DLTBGX"); |
|
pWorkspace = (DLTBGXFC as FeatureClass).Workspace; |
|
//地类图斑更新层扣除地类系数赋值 |
|
int indexofKCXS = dltbgxAPI.FeatureClass.FindField("KCXS"); |
|
int indexofKCMJ = dltbgxAPI.FeatureClass.FindField("KCMJ"); |
|
int indexofGDLX = dltbgxAPI.FeatureClass.FindField("GDLX"); |
|
int indexofGDPDJB = dltbgxAPI.FeatureClass.FindField("GDPDJB"); |
|
if (indexofKCXS == -1 || indexofKCMJ == -1 || indexofGDLX == -1 || indexofGDPDJB == -1) |
|
{ |
|
MessageHelper.Show("地类图斑更新层中KCXS字段或者KCMJ字段或者GDLX字段或者GDPDJB字段不存在!!"); |
|
return; |
|
} |
|
int gxindex = 1; |
|
foreach (GDEntity model in Entitys) |
|
{ |
|
if (gxindex == 1) |
|
{ |
|
this.UpdateMsg("【地类图斑更新层】正在赋值" + model.GDPDJBMC + "系数,请稍候..."); |
|
gxindex++; |
|
} |
|
else |
|
{ |
|
this.UpdateMsg("【地类图斑更新层】正在赋值" + model.GDPDJBMC + "系数,请稍候..."); |
|
} |
|
string where = string.Empty; |
|
where += string.Format(" GDLX='{0}' AND GDPDJB='{1}' AND (KCXS=0 OR KCXS Is Null)", model.GDLX, model.GDPDJB); |
|
string sql = string.Format("update DLTBGX set KCXS={0} where {1}", model.KCDLXS, where); |
|
pWorkspace.ExecuteSQL(sql); |
|
if (model.KCDLXS == 0) |
|
{ |
|
sql = string.Format("update DLTBGX set KCMJ=0 where {0}", where); |
|
pWorkspace.ExecuteSQL(sql); |
|
} |
|
} |
|
} |
|
IFeatureClass DLTBGXGCFC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC"); |
|
//地类图斑更新过程层扣除地类系数赋值 |
|
if (DLTBGXGCFC != null) |
|
{ |
|
IFeatureClassAPI dltbgxgcAPI = new FeatureClassAPI(DLTBGXGCFC);// wsAPI.OpenFeatureClass("DLTBGXGC"); |
|
pWorkspace = (DLTBGXGCFC as FeatureClass).Workspace; |
|
int indexofBGHKCXS = dltbgxgcAPI.FeatureClass.FindField("BGHKCXS"); |
|
int indexofBGHKCMJ = dltbgxgcAPI.FeatureClass.FindField("BGHKCMJ"); |
|
int indexofBGHGDLX = dltbgxgcAPI.FeatureClass.FindField("BGHGDLX"); |
|
int indexofBGHGDPDJB = dltbgxgcAPI.FeatureClass.FindField("BGHGDPDJB"); |
|
if (indexofBGHKCXS == -1 || indexofBGHKCMJ == -1 || indexofBGHGDLX == -1 || indexofBGHGDPDJB == -1) |
|
{ |
|
MessageHelper.Show("地类图斑更新过程层中BGHKCXS字段或者BGHKCMJ字段或者BGHGDLX字段或者BGHGDPDJB字段不存在!!"); |
|
return; |
|
} |
|
int gxgcindex = 1; |
|
foreach (GDEntity model in Entitys) |
|
{ |
|
if (gxgcindex == 1) |
|
{ |
|
this.UpdateMsg("【地类图斑更新过程层】正在赋值" + model.GDPDJBMC + "系数,请稍候..."); |
|
gxgcindex++; |
|
} |
|
else |
|
{ |
|
this.UpdateMsg("【地类图斑更新过程层】正在赋值" + model.GDPDJBMC + "系数,请稍候..."); |
|
} |
|
string where = string.Empty; |
|
where += string.Format(" BGHGDLX='{0}' AND BGHGDPDJB='{1}' AND (BGHKCXS=0 OR BGHKCXS Is Null)", model.GDLX, model.GDPDJB); |
|
string sql = string.Format("update DLTBGXGC set BGHKCXS={0} where {1}", model.KCDLXS, where); |
|
pWorkspace.ExecuteSQL(sql); |
|
if (model.KCDLXS == 0) |
|
{ |
|
sql = string.Format("update DLTBGXGC set BGHKCMJ=0 where {0}", where); |
|
pWorkspace.ExecuteSQL(sql); |
|
} |
|
} |
|
} |
|
|
|
//变化信息表扣除地类系数赋值 |
|
string dbPath = System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite"; |
|
rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); |
|
DataTable bhxxbDt = new DataTable(); |
|
if (rdbHelper.TableIsExist("BHXXB")) |
|
{ |
|
bhxxbDt = rdbHelper.ExecuteDatatable("BHXXB", "select * from BHXXB", true); |
|
if (!bhxxbDt.Columns.Contains("BGHKCXS") || !bhxxbDt.Columns.Contains("BGHKCMJ") || !bhxxbDt.Columns.Contains("BGHGDLX") || !bhxxbDt.Columns.Contains("BGHGDPDJB")) |
|
{ |
|
MessageHelper.Show("BHXXB中BGHKCXS字段或者BGHKCMJ字段或者BGHGDLX字段或者BGHGDPDJB字段不存在!!"); |
|
return; |
|
} |
|
int bgxxbindex = 1; |
|
foreach (GDEntity model in Entitys) |
|
{ |
|
if (bgxxbindex == 1) |
|
{ |
|
this.UpdateMsg("【变化信息表】正在赋值" + model.GDPDJBMC + "系数,请稍候..."); |
|
bgxxbindex++; |
|
} |
|
else |
|
{ |
|
this.UpdateMsg("【变化信息表】正在赋值" + model.GDPDJBMC + "系数,请稍候..."); |
|
} |
|
string where = string.Empty; |
|
where += string.Format(" BGHGDLX='{0}' AND BGHGDPDJB='{1}' AND (BGHKCXS=0 OR BGHKCXS Is Null)", model.GDLX, model.GDPDJB); |
|
string sql = string.Format("update BHXXB set BGHKCXS={0} where {1}", model.KCDLXS, where); |
|
rdbHelper.ExecuteSQL(sql); |
|
if (model.KCDLXS == 0) |
|
{ |
|
sql = string.Format("update BHXXB set BGHKCMJ=0 where {0}", where); |
|
rdbHelper.ExecuteSQL(sql); |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("扣除地类系数赋值异常:" + ex.Message); |
|
MessageHelper.ShowError("扣除地类系数赋值异常:" + ex.Message); |
|
} |
|
finally |
|
{ |
|
if (pWorkspace != null) |
|
Marshal.ReleaseComObject(pWorkspace); |
|
if (rdbHelper != null) |
|
rdbHelper.DisConnect(); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 耕地实体 |
|
/// </summary> |
|
public class GDEntity |
|
{ |
|
public string GDLX { get; set; } |
|
public string GDPDJB { get; set; } |
|
public string GDPDJBMC { get; set; } |
|
private decimal _kcdlxs; |
|
[Range(typeof(Decimal), "0", "0.9999"), DataType(DataType.Currency)] |
|
public decimal KCDLXS |
|
{ |
|
get |
|
{ |
|
return Math.Round(_kcdlxs, 4, MidpointRounding.AwayFromZero); |
|
} |
|
set |
|
{ |
|
_kcdlxs = value; |
|
} |
|
} |
|
public bool Checked { get; set; } |
|
public string XMSX { get; set; } |
|
} |
|
#region 要素代码赋值 |
|
public void YSDMInit() |
|
{ |
|
try |
|
{ |
|
ysdmlistRuleTableEntity = DataCheckTableMappingConfig.BGGetListRuleTableEntity(); |
|
if (ysdmlistRuleTableEntity != null && ysdmlistRuleTableEntity.Count > 0) |
|
{ |
|
ysdmlistRuleTableEntity = ysdmlistRuleTableEntity.Where(x => !string.IsNullOrWhiteSpace(x.YSDM)).ToList(); |
|
ysdmlistRuleTableEntity.ForEach(x => x.IsChecked = true); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.ShowError("初始化列表失败,可能的原因是:" + ex.Message); |
|
} |
|
} |
|
|
|
public bool YSDMExecute() |
|
{ |
|
bool result = false; |
|
//string gdbpath = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetSchemeDBPath(); |
|
//IWorkspaceAPI wsAPI = new WorkspaceAPI(gdbpath, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile); |
|
IFeatureClass TempFC = null; |
|
IFeatureCursor pFeatureCursor = null; |
|
IFeature pFeature = null; |
|
foreach (RuleTableEntity item in ysdmlistRuleTableEntity.Where(p => p.IsChecked == true)) |
|
{ |
|
this.UpdateMsg("正在对【" + item.TableAliasName + "】中的 要素代码 赋值"); |
|
//判断当前表结构中是否包含YSDM字段 |
|
if (item.Columns.FirstOrDefault(x => x.ColumnName.ToUpper() == "YSDM") == null) continue; |
|
//检查表是否存在 |
|
TempFC = MapsManager.Instance.MapService.GetFeatureClassByName(item.TableName); |
|
if (TempFC == null) continue; |
|
int ysdmIndexof = TempFC.FindField("YSDM"); |
|
int gxsjIndexof = TempFC.FindField("GXSJ"); |
|
pFeatureCursor = TempFC.Update(null, true); |
|
while ((pFeature = pFeatureCursor.NextFeature()) != null) |
|
{ |
|
pFeature.set_Value(ysdmIndexof, item.YSDM); |
|
if (gxsjIndexof != -1) |
|
pFeature.set_Value(gxsjIndexof, DateTime.Now.Month >= 10 ? new DateTime(DateTime.Now.Year, 12, 31) : new DateTime(DateTime.Now.Year - 1, 12, 31)); |
|
pFeatureCursor.UpdateFeature(pFeature); |
|
} |
|
pFeatureCursor.Flush(); |
|
//执行sql语句修改YSDM |
|
//string sql = string.Format("UPDATE {0} SET YSDM='{1}'", item.TableName, item.YSDM); |
|
//(TempFC as FeatureClass).Workspace.ExecuteSQL(sql); |
|
result = true; |
|
} |
|
return result; |
|
} |
|
#endregion |
|
} |
|
/// <summary> |
|
/// 属性维护表数据实体 |
|
/// </summary> |
|
public class TestData : INotifyPropertyChanged |
|
{ |
|
private bool _IsChecked; |
|
public bool IsChecked |
|
{ |
|
get { return _IsChecked; } |
|
set |
|
{ |
|
_IsChecked = value; |
|
RaisePropertyChanged("IsChecked"); |
|
} |
|
} |
|
public string ItemType { get; set; } |
|
public string Descriction { get; set; } |
|
|
|
public event PropertyChangedEventHandler PropertyChanged; |
|
protected void RaisePropertyChanged(string propertyName) |
|
{ |
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); |
|
} |
|
} |
|
}
|
|
|