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.
1152 lines
57 KiB
1152 lines
57 KiB
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.DataSourcesGDB; |
|
using ESRI.ArcGIS.esriSystem; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using ExcelDataReader; |
|
using KGIS.Framework.AE; |
|
using KGIS.Framework.AE.GPHelper; |
|
using KGIS.Framework.DBOperator; |
|
using KGIS.Framework.Maps; |
|
using KGIS.Framework.OpenData.Control; |
|
using KGIS.Framework.OpenData.Filter; |
|
using KGIS.Framework.OpenData.InterFace; |
|
using KGIS.Framework.Platform.Helper; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Dialog; |
|
using KGIS.Framework.Utils.ExtensionMethod; |
|
using KGIS.Framework.Utils.Helper; |
|
using Kingo.PluginServiceInterface; |
|
using System; |
|
using System.Collections.Concurrent; |
|
using System.Collections.Generic; |
|
using System.Data; |
|
using System.IO; |
|
using System.Runtime.InteropServices; |
|
using System.Threading.Tasks; |
|
using System.Windows; |
|
using IRDBHelper = KGIS.Framework.DBOperator.IRDBHelper; |
|
|
|
namespace Kingo.Plugin.LocationChange.View |
|
{ |
|
/// <summary> |
|
/// FrmLocationChange.xaml 的交互逻辑 |
|
/// </summary> |
|
public partial class FrmLocationChange : BaseWindow |
|
{ |
|
/// <summary> |
|
/// 选择范围的变更数据 |
|
/// </summary> |
|
private IFeatureLayer SelLocation_Layer = null; |
|
/// <summary> |
|
/// 视图数据表 |
|
/// </summary> |
|
DataTable DT = new DataTable(); |
|
private string dbPath = Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite"; |
|
public FrmLocationChange() |
|
{ |
|
InitializeComponent(); |
|
DT.Columns.Add(new DataColumn("变更前代码")); |
|
DT.Columns.Add(new DataColumn("变更前名称")); |
|
DT.Columns.Add(new DataColumn("变更后代码")); |
|
DT.Columns.Add(new DataColumn("变更后名称")); |
|
gvCtrl.ItemsSource = DT; |
|
tvAttr2.AddNewRow(); |
|
} |
|
|
|
/// <summary> |
|
/// 得到要素类集合 |
|
/// </summary> |
|
/// <param name="title"></param> |
|
/// <param name="paths">路径集合</param> |
|
public static IFeatureClass GetFeatureClass(string title, ref string paths) |
|
{ |
|
IFeatureClass result = null; |
|
try |
|
{ |
|
// 获取源数据 |
|
OpenDataDialog pDialog = new OpenDataDialog(); |
|
ISpatialDataObjectFilter pOFilter; |
|
pOFilter = new FilterFeatureDatasetsAndFeatureClasses(); |
|
pDialog.AddFilter(pOFilter, true); |
|
if (!string.IsNullOrWhiteSpace(title)) |
|
pDialog.Title = title; |
|
else |
|
pDialog.Title = "选择数据"; |
|
pDialog.AllowMultiSelect = false; |
|
pDialog.RestoreLocation = true; |
|
pDialog.StartLocation = pDialog.FinalLocation; |
|
if (pDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK && pDialog.Selection.Count > 0) |
|
{ |
|
List<ISpatialDataObject> distObj = pDialog.Selection; |
|
foreach (var obj in distObj) |
|
{ |
|
if (obj.DatasetType == esriDatasetType.esriDTFeatureClass) |
|
{ |
|
IFeatureClass featureclass = (obj.DatasetName as IName).Open() as IFeatureClass; |
|
result = featureclass; |
|
//paths += obj.FullName;//展示完整路径 |
|
paths = featureclass.AliasName;//展示文件名 |
|
} |
|
} |
|
} |
|
return result; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("选择数据失败:" + ex.Message.ToString()); |
|
return result; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 打开文件 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void BtnOpenFile_Click(object sender, RoutedEventArgs e) |
|
{ |
|
string filePath = string.Empty; |
|
OpenFileDialog dialog = new OpenFileDialog(); |
|
dialog.DefaultExt = "xls"; |
|
dialog.Filter = "Excel文件|*.xls;*.xlsx"; |
|
if (dialog.ShowDialog()) |
|
{ |
|
filePath = dialog.FileName; |
|
using (var streamData = File.Open(filePath, FileMode.Open, FileAccess.Read)) |
|
{ |
|
using (var readerData = ExcelReaderFactory.CreateReader(streamData)) |
|
{ |
|
var result = readerData.AsDataSet(); |
|
DataTable tempDT = result.Tables[0]; |
|
tempDT.Columns[0].ColumnName = "变更前代码"; |
|
tempDT.Columns[1].ColumnName = "变更前名称"; |
|
tempDT.Columns[2].ColumnName = "变更后代码"; |
|
tempDT.Columns[3].ColumnName = "变更后名称"; |
|
tempDT.Rows.RemoveAt(0); |
|
DT = tempDT; |
|
gvCtrl.ItemsSource = DT; |
|
} |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 添加行 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void BtnAddRow_Click(object sender, RoutedEventArgs e) |
|
{ |
|
tvAttr2.AddNewRow(); |
|
} |
|
|
|
/// <summary> |
|
/// 删除选中 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void BtnDelRow_Click(object sender, RoutedEventArgs e) |
|
{ |
|
int[] rows = gvCtrl.GetSelectedRowHandles(); |
|
foreach (var item in rows) |
|
{ |
|
tvAttr2.DeleteRow(item); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 选择范围 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void BtnSelTB_Click(object sender, RoutedEventArgs e) |
|
{ |
|
string xzdltbPaths = ""; |
|
IFeatureClass dltbFc = GetFeatureClass("请选择新增的地类图斑数据", ref xzdltbPaths); |
|
if (dltbFc != null) |
|
{ |
|
btnNewData.Text = xzdltbPaths; |
|
SelLocation_Layer = GeoDBAPI.CreateFeatureLayerInmemeory("SelLocation", "选择范围图斑数据", (dltbFc as IGeoDataset).SpatialReference, dltbFc.ShapeType, dltbFc.Fields); |
|
(SelLocation_Layer.FeatureClass as ITable).DeleteSearchedRows(null); |
|
InsertDataToMemeoryLayer(dltbFc, SelLocation_Layer.FeatureClass, null); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 更新坐落信息 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void BtnOK_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
ProgressHelper.ShowProcessBar("正在进行数据处理......"); |
|
bool isSucceed = false; |
|
//给定图斑进行变更 |
|
if (SelLocation_Layer != null && SelLocation_Layer.FeatureClass.FeatureCount(null) != 0) |
|
{ |
|
SelTBZLBG(); |
|
isSucceed = true; |
|
} |
|
//给定坐落信息进行变更 |
|
if (DT.Rows.Count != 0) |
|
{ |
|
bool isXDM = false; |
|
foreach (DataRow dr in DT.Rows) |
|
{ |
|
if (string.IsNullOrWhiteSpace(dr["变更前代码"].ToTrim()) || string.IsNullOrWhiteSpace(dr["变更后代码"].ToTrim())) continue; |
|
if (dr["变更前代码"].ToTrim().Length == 6 && dr["变更后代码"].ToTrim().Length == 6) |
|
{ |
|
isXDM = true; |
|
} |
|
ExeUpZLInfo(dr["变更前代码"].ToTrim(), dr["变更前名称"].ToTrim(), dr["变更后代码"].ToTrim(), dr["变更后名称"].ToTrim()); |
|
} |
|
if (isXDM)//县代码发生改变 |
|
{ |
|
IFeatureClass fc = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC"); |
|
IRDBHelper dbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); |
|
dbHelper.ExecuteSQL("UPDATE BHXXB set XZQTZLX='5' where XZQTZLX='0'"); |
|
(fc as FeatureClass).Workspace.ExecuteSQL("UPDATE DLTBGXGC set XZQTZLX='5' where XZQTZLX='0'"); |
|
} |
|
isSucceed = true; |
|
} |
|
ProgressHelper.CloseProcessBar(); |
|
if (isSucceed) MessageHelper.Show("变更完成。"); |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.ShowError("变更失败:" + ex.Message); |
|
LogAPI.Debug("坐落变更失败:" + ex); |
|
} |
|
finally |
|
{ |
|
ProgressHelper.CloseProcessBar(); |
|
if (SelLocation_Layer != null) SelLocation_Layer = null; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 选择图斑进行坐落变更 |
|
/// </summary> |
|
private void SelTBZLBG() |
|
{ |
|
//获取左侧新加载的图层 |
|
IFeatureLayer JC_Fc = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("地类图斑"); |
|
IFeatureLayer DLTBGX_FL = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBGX"); |
|
IFeatureClass DLTBGX_Fc = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX"); |
|
IFeatureCursor featureSelTB = SelLocation_Layer.FeatureClass.Search(null, true); |
|
IFeature Sel_F = null; |
|
//基础库图斑字段 |
|
int BGQZLDM_JC = JC_Fc.FeatureClass.FindField("ZLDWDM"); |
|
int BGQZLMC_JC = JC_Fc.FeatureClass.FindField("ZLDWMC"); |
|
int JC_BSM = JC_Fc.FeatureClass.FindField("BSM"); |
|
int JC_TBBH_Index = JC_Fc.FeatureClass.FindField("TBBH"); |
|
//更新层图斑字段 |
|
int GX_BSM = DLTBGX_Fc.FindField("BSM"); |
|
int GX_ZLDWMC = DLTBGX_Fc.FindField("ZLDWDM"); |
|
int GX_ZLDWDM = DLTBGX_Fc.FindField("ZLDWMC"); |
|
int GX_TBBH_Index = DLTBGX_Fc.FindField("TBBH"); |
|
//获取选择范围图斑字段 |
|
int BGHZLDM_Sel = SelLocation_Layer.FeatureClass.FindField("ZLDWDM"); |
|
int BGHZLMC_Sel = SelLocation_Layer.FeatureClass.FindField("ZLDWMC"); |
|
string BGQZLDWDM = string.Empty; |
|
string BGQZLDWMC = string.Empty; |
|
string BGHZLDWMC = string.Empty; |
|
string BGHZLDWDM = string.Empty; |
|
string UpDataGXBSM = string.Empty; |
|
string UpDataJCBSM = string.Empty; |
|
string JC_TBBH = string.Empty; |
|
string GX_TBBH = string.Empty; |
|
while ((Sel_F = featureSelTB.NextFeature()) != null) |
|
{ |
|
BGHZLDWDM = Sel_F.Value[BGHZLDM_Sel].ToString();//要改变的坐落信息 |
|
BGHZLDWMC = Sel_F.Value[BGHZLMC_Sel].ToString(); |
|
//压盖基础基础库 |
|
List<IFeature> JC_fs = FeatureAPI.Identify2(Sel_F.ShapeCopy, JC_Fc); |
|
foreach (IFeature item_JC in JC_fs)//压盖到的基础库图斑 |
|
{ |
|
if (FeatureAPI.IsContains(Sel_F.ShapeCopy, item_JC.ShapeCopy)) |
|
{ |
|
List<IFeature> DLTBGX_fs = FeatureAPI.Identify2(item_JC.ShapeCopy, DLTBGX_FL); |
|
foreach (IFeature item_GX in DLTBGX_fs) |
|
{ |
|
if (FeatureAPI.IsContains(item_JC.ShapeCopy, item_GX.ShapeCopy)) |
|
{ |
|
JC_TBBH = item_JC.Value[JC_TBBH_Index].ToTrim(); |
|
GX_TBBH = item_GX.Value[GX_TBBH_Index].ToTrim(); |
|
UpDataJCBSM = item_JC.Value[JC_BSM].ToString(); |
|
UpDataGXBSM = item_GX.Value[GX_BSM].ToString(); |
|
BGQZLDWDM = item_GX.Value[GX_ZLDWDM].ToString();//改变前的坐落信息 |
|
BGQZLDWMC = item_GX.Value[GX_ZLDWMC].ToString(); |
|
SelUpdateZLInfo(BGQZLDWDM, BGQZLDWMC, UpDataJCBSM, UpDataGXBSM, JC_TBBH, GX_TBBH, item_GX.OID); |
|
} |
|
else |
|
{ |
|
MessageHelper.ShowError("该图斑与地类图斑更新层图斑范围不套合,已记录日志!"); |
|
LogAPI.Debug("不套合图斑OID:" + Sel_F.OID); |
|
} |
|
} |
|
if (DLTBGX_fs.Count == 0)//指定图斑只在基础图斑范围内 |
|
{ |
|
BGQZLDWDM = item_JC.Value[BGQZLDM_JC].ToString(); |
|
BGQZLDWMC = item_JC.Value[BGQZLMC_JC].ToString(); |
|
UpDataJCBSM = item_JC.Value[JC_BSM].ToString(); |
|
XZZLInfoBySelTB(BGHZLDWDM, BGHZLDWMC, BGQZLDWDM, BGQZLDWMC, UpDataJCBSM); |
|
} |
|
} |
|
else |
|
{ |
|
MessageHelper.ShowError("该图斑与基础库图斑范围不套合,已记录日志!"); |
|
LogAPI.Debug("不套合图斑OID:" + Sel_F.OID); |
|
} |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 根据选择图斑数据新增坐落信息至BHXXB |
|
/// </summary> |
|
/// <param name="BGHZLDWDM"></param> |
|
/// <param name="BGHZLDWMC"></param> |
|
/// <param name="BGQZLDWDM"></param> |
|
/// <param name="BGQZLDWMC"></param> |
|
/// <param name="UpDataGXBSM">指定图斑BSM是否新增坐落信息</param> |
|
private void XZZLInfoBySelTB(string BGHZLDWDM, string BGHZLDWMC, string BGQZLDWDM, string BGQZLDWMC, string UpDataJCBSM = "") |
|
{ |
|
IRDBHelper dbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); |
|
if (!dbHelper.TableIsExist("BHXXB")) |
|
{ |
|
dbHelper.ExecuteSQL(" Create TABLE BHXXB ( BGQTBBSM text(100),BGHTBBSM text(100),BGQTBBH text(100),BGHTBBH text(100),BGQZLDWDM text(100),BGHZLDWDM text(100)," + |
|
"BGQZLDWMC text(100),BGHZLDWMC text(100),BGQQSDWDM text(100),BGHQSDWDM text(100),BGQQSDWMC text(100),BGHQSDWMC text(100),BGQQSXZ text(100),BGHQSXZ text(100)," + |
|
"BGQDLBM text(100),BGHDLBM text(100),BGQKCDLBM text(100),BGHKCDLBM text(100),BGQKCXS text(100),BGHKCXS text(100),BGQKCMJ NUMERIC,BGHKCMJ NUMERIC,BGQGDLX text(100),BGHGDLX text(100),BGQGDPDJB text(100),BGHGDPDJB text(100),BGQCZCSXM text(100),BGHCZCSXM text(100)," + |
|
"BGQTBXHDM text(100),BGHTBXHDM text(100),BGQZZSXDM text(100),BGHZZSXDM text(100),BGQMSSM text(100),BGHMSSM text(100),BGQGDDB text(100),BGHGDDB text(100)," + |
|
"BGMJ NUMERIC,XZQTZLX text(100),BZ text(10),BGXW text(10) ) "); |
|
} |
|
IQueryFilter filter = new QueryFilterClass(); |
|
//范围内基础图斑(新增坐落信息UpDataJCBSM-基础BSM) |
|
filter.WhereClause = string.Format("ZLDWDM like '{0}%' AND BSM = '{1}'", BGQZLDWDM.ToTrim(), UpDataJCBSM);//定位唯一的一个图斑 |
|
IFeatureClass fc = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("地类图斑").FeatureClass as IFeatureClass; |
|
IFeatureClass fc2 = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX"); |
|
ITable itb = fc as ITable; |
|
ICursor cur = itb.Search(filter, true); |
|
IRow row = null; |
|
int bsmIdx = itb.FindField("BSM"); |
|
int zldmIdx = itb.FindField("ZLDWDM"); |
|
int zlmcIdx = itb.FindField("ZLDWMC"); |
|
int qsdmIdx = itb.FindField("QSDWDM"); |
|
int qsmcIdx = itb.FindField("QSDWMC"); |
|
string bhxxbField = "BGQTBBSM,BGHTBBSM,BGQTBBH,BGHTBBH,BGQZLDWDM,BGHZLDWDM,BGQZLDWMC,BGHZLDWMC,BGQQSDWDM,BGHQSDWDM,BGQQSDWMC,BGHQSDWMC,BGQQSXZ,BGHQSXZ,BGQDLBM,BGHDLBM,BGQKCDLBM,BGHKCDLBM,BGQKCXS,BGHKCXS,BGQKCMJ,BGHKCMJ,BGQGDLX,BGHGDLX,BGQGDPDJB,BGHGDPDJB,BGQCZCSXM,BGHCZCSXM,BGQTBXHDM,BGHTBXHDM,BGQZZSXDM,BGHZZSXDM,BGQMSSM,BGHMSSM,BGQGDDB,BGHGDDB,BGMJ,XZQTZLX,BZ,BGXW"; |
|
string[] bhxxbfieldArr = bhxxbField.Split(','); |
|
Dictionary<string, int> dicTBBH = new Dictionary<string, int>(); |
|
GetMaxTBBH(fc, ref dicTBBH); |
|
GetMaxTBBH(fc2, ref dicTBBH); |
|
|
|
DataTable bhxxDt = dbHelper.ExecuteDatatable("BHXXB", string.Format("select * from BHXXB"), true); |
|
List<string> bgqbsmList = new List<string>(); |
|
if (bhxxDt != null) |
|
{ |
|
foreach (DataRow dr in bhxxDt.Rows) |
|
{ |
|
string strBGQBSM = dr["BGQTBBSM"].ToTrim(); |
|
if (!bgqbsmList.Contains(strBGQBSM)) |
|
bgqbsmList.Add(strBGQBSM);//获取变化信息表中变更前BSM |
|
|
|
string strBGHZLDWDM = dr["BGHZLDWDM"].ToTrim(); |
|
if (!dicTBBH.ContainsKey(strBGHZLDWDM)) |
|
{ |
|
dicTBBH.Add(strBGHZLDWDM, dr["BGHTBBH"].ToInt());//变更后坐落单位代码及变更后图斑编号 |
|
} |
|
else |
|
{ |
|
int bghtbbh = dr["BGHTBBH"].ToInt(); |
|
if (dicTBBH[strBGHZLDWDM] < bghtbbh) |
|
dicTBBH[strBGHZLDWDM] = bghtbbh;//获取相同变更后坐落单位代码下的最大变更后图版编号 |
|
} |
|
} |
|
} |
|
|
|
List<string> strSQL = new List<string>(); |
|
int count = itb.RowCount(filter); |
|
int num = 0; |
|
while ((row = cur.NextRow()) != null)//JC_DLTB |
|
{ |
|
num++; |
|
string bhxxbValue = string.Empty; |
|
if (zldmIdx == -1) break; |
|
string bsm = row.Value[bsmIdx].ToTrim(); |
|
if (bgqbsmList.Contains(bsm)) continue;//过滤掉变化信息表中已存在的 |
|
string zldm = row.Value[zldmIdx].ToTrim();//坐落代码 |
|
string zlmc = string.Empty; |
|
string qsdm = row.Value[qsdmIdx].ToTrim();//权属代码 |
|
string qsmc = string.Empty; |
|
if (qsmcIdx != -1) |
|
qsmc = row.Value[qsmcIdx].ToTrim(); |
|
|
|
if (zlmcIdx != -1) |
|
zlmc = row.Value[zlmcIdx].ToTrim();//坐落名称 |
|
string bghzldm = zldm.Replace(BGQZLDWDM.ToTrim(), BGHZLDWDM.ToTrim()); |
|
string bghzlmc = zlmc; |
|
if (!string.IsNullOrWhiteSpace(BGHZLDWMC.ToTrim())) |
|
bghzlmc = zlmc.Replace(BGQZLDWMC.ToTrim(), BGHZLDWMC.ToTrim());//改变后坐落名称 |
|
|
|
string bghqsdm = qsdm.Replace(BGQZLDWDM.ToTrim(), BGHZLDWDM.ToTrim()); |
|
string bghqsmc = qsmc; |
|
if (!string.IsNullOrWhiteSpace(BGHZLDWMC.ToTrim())) |
|
bghqsmc = qsmc.Replace(BGQZLDWMC.ToTrim(), BGHZLDWMC.ToTrim());//改变后权属名称 |
|
//填充属性和属性赋值 |
|
foreach (var item in bhxxbfieldArr) |
|
{ |
|
string name = item.ToTrim().Replace("BGQ", "").Replace("BGH", ""); |
|
if (name == "TBBSM") |
|
name = "BSM"; |
|
if (item == "BGMJ") |
|
name = "TBMJ"; |
|
if (item == "BZ") |
|
name = "Temp_BZ"; |
|
int idx = row.Fields.FindField(name); |
|
if (idx != -1) |
|
{ |
|
if (item == "BGHTBBSM") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", row.Value[idx]); |
|
} |
|
else if (item == "BGHTBBH") |
|
{ |
|
string bghTBBH = string.Empty; |
|
if (dicTBBH.ContainsKey(bghzldm)) |
|
{ |
|
dicTBBH[bghzldm] = dicTBBH[bghzldm] + 1;//最大图斑编号-去最新值 |
|
bghTBBH = dicTBBH[bghzldm].ToTrim(); |
|
} |
|
else |
|
{ //(变化信息表中的新增村落)新增村 |
|
dicTBBH.Add(bghzldm, 1);//图斑编号从一开始 |
|
bghTBBH = dicTBBH[bghzldm].ToTrim(); |
|
} |
|
bhxxbValue += string.Format("'{0}',", bghTBBH); |
|
} |
|
else if (item == "BGHZLDWDM") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", bghzldm); |
|
} |
|
else if (item == "BGHZLDWMC") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", bghzlmc); |
|
} |
|
else if (item == "BGHQSDWDM") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", bghqsdm); |
|
} |
|
else if (item == "BGHQSDWMC") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", bghqsmc); |
|
} |
|
else if (item.EndsWith("MJ")) |
|
{ |
|
bhxxbValue += string.Format("{0},", row.Value[idx]); |
|
} |
|
else |
|
{ |
|
bhxxbValue += string.Format("'{0}',", row.Value[idx]); |
|
} |
|
} |
|
else if (item == "BZ") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", "ZLBG"); |
|
} |
|
else if (item == "XZQTZLX") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", "0"); |
|
} |
|
else if (item == "BGXW") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", "1"); |
|
} |
|
} |
|
bhxxbValue = bhxxbValue.TrimEnd(','); |
|
string strSQLTemp = string.Format("Insert into BHXXB ({0}) values ({1})", bhxxbField, bhxxbValue); |
|
strSQL.Add(strSQLTemp); |
|
Marshal.ReleaseComObject(row); |
|
} |
|
InsertDB(strSQL, dbPath); |
|
strSQL.Clear(); |
|
} |
|
|
|
/// <summary> |
|
/// 处理同属性图斑合并 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void BtnOK2_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
UnionDLTBGX(); |
|
IFeatureClass fc = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC"); |
|
IFeatureClass fc2 = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX"); |
|
IRDBHelper dbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); |
|
DataTable dtbhxx = dbHelper.ExecuteDatatable("BHXXB", "select * from bhxxb", true); |
|
DataTable dtZL = dbHelper.ExecuteDatatable("ZLGroup", "select BGHZLDWDM from bhxxb group by BGHZLDWDM", true); |
|
try |
|
{ |
|
dbHelper.BeginTransaction(); |
|
foreach (DataRow dr in dtZL.Rows) |
|
{ |
|
DataRow[] drs = dtbhxx.Select(string.Format(" BGHZLDWDM='{0}'", dr["BGHZLDWDM"])); |
|
Dictionary<string, int> temp = new Dictionary<string, int>(); |
|
Dictionary<string, int> temp3 = new Dictionary<string, int>(); |
|
List<int> tbbhs = new List<int>(); |
|
int maxTBBH = 0; |
|
foreach (DataRow subdr in drs) |
|
{ |
|
int bghtbbh = subdr["BGHTBBH"].ToInt(); |
|
if (maxTBBH < bghtbbh) |
|
maxTBBH = bghtbbh; |
|
} |
|
foreach (DataRow subdr in drs) |
|
{ |
|
string bghtbbsm = subdr["BGHTBBSM"].ToTrim(); |
|
int bghtbbh = subdr["BGHTBBH"].ToInt(); |
|
if (!temp.ContainsKey(bghtbbsm)) |
|
{ |
|
temp.Add(bghtbbsm, bghtbbh); |
|
if (!tbbhs.Contains(bghtbbh)) |
|
{ |
|
tbbhs.Add(bghtbbh); |
|
} |
|
else |
|
{ |
|
maxTBBH++; |
|
temp3.Add(bghtbbsm, maxTBBH); |
|
} |
|
} |
|
} |
|
foreach (var key in temp3.Keys) |
|
{ |
|
dbHelper.ExecuteSQL(string.Format("update bhxxb set bghtbbh='{0}' where bghtbbsm='{1}'", temp3[key], key)); |
|
IQueryFilter filter = new QueryFilterClass(); |
|
filter.WhereClause = string.Format("BGHTBBSM='{0}'", key); |
|
IFeatureCursor cursor = fc.Update(filter, true); |
|
IFeature f = null; |
|
int idx = fc.FindField("BGHTBBH"); |
|
while ((f = cursor.NextFeature()) != null) |
|
{ |
|
f.Value[idx] = temp3[key].ToTrim(); |
|
cursor.UpdateFeature(f); |
|
} |
|
cursor.Flush(); |
|
filter.WhereClause = string.Format("BSM='{0}'", key); |
|
cursor = fc2.Update(filter, true); |
|
f = null; |
|
idx = fc2.FindField("TBBH"); |
|
while ((f = cursor.NextFeature()) != null) |
|
{ |
|
f.Value[idx] = temp3[key].ToTrim(); |
|
cursor.UpdateFeature(f); |
|
} |
|
cursor.Flush(); |
|
} |
|
} |
|
dbHelper.Commit(); |
|
} |
|
catch (Exception) |
|
{ |
|
dbHelper.Rollback(); |
|
} |
|
MessageHelper.ShowTips("变更完成!"); |
|
} |
|
catch (Exception ex) |
|
{ |
|
ProgressHelper.CloseProcessBar(); |
|
MessageHelper.Show("坐落信息变更失败,请查看系统日志!"); |
|
LogAPI.Debug("坐落信息变更时发生异常,异常信息如下:"); |
|
LogAPI.Debug(ex); |
|
} |
|
finally |
|
{ |
|
loading.Visibility = Visibility.Collapsed; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 取消按钮 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void BtnCancel_Click(object sender, RoutedEventArgs e) |
|
{ |
|
this.Close(); |
|
} |
|
|
|
/// <summary> |
|
/// 每一条坐落变更信息 |
|
/// </summary> |
|
/// <param name="pBGQDM"></param> |
|
/// <param name="pBGQMC"></param> |
|
/// <param name="pBGHDM"></param> |
|
/// <param name="pBGHMC"></param> |
|
private void ExeUpZLInfo(string pBGQDM, string pBGQMC, string pBGHDM, string pBGHMC) |
|
{ |
|
try |
|
{ |
|
IRDBHelper dbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); |
|
if (!dbHelper.TableIsExist("BHXXB")) |
|
{ |
|
dbHelper.ExecuteSQL(" Create TABLE BHXXB ( BGQTBBSM text(100),BGHTBBSM text(100),BGQTBBH text(100),BGHTBBH text(100),BGQZLDWDM text(100),BGHZLDWDM text(100)," + |
|
"BGQZLDWMC text(100),BGHZLDWMC text(100),BGQQSDWDM text(100),BGHQSDWDM text(100),BGQQSDWMC text(100),BGHQSDWMC text(100),BGQQSXZ text(100),BGHQSXZ text(100)," + |
|
"BGQDLBM text(100),BGHDLBM text(100),BGQKCDLBM text(100),BGHKCDLBM text(100),BGQKCXS text(100),BGHKCXS text(100),BGQKCMJ NUMERIC,BGHKCMJ NUMERIC,BGQGDLX text(100),BGHGDLX text(100),BGQGDPDJB text(100),BGHGDPDJB text(100),BGQCZCSXM text(100),BGHCZCSXM text(100)," + |
|
"BGQTBXHDM text(100),BGHTBXHDM text(100),BGQZZSXDM text(100),BGHZZSXDM text(100),BGQMSSM text(100),BGHMSSM text(100),BGQGDDB text(100),BGHGDDB text(100)," + |
|
"BGMJ NUMERIC,XZQTZLX text(100),BZ text(10),BGXW text(10) ) "); |
|
} |
|
IQueryFilter filter = new QueryFilterClass(); |
|
filter.WhereClause = string.Format("ZLDWDM like '{0}%'", pBGQDM.ToTrim()); |
|
IFeatureClass JC_fc = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("地类图斑").FeatureClass as IFeatureClass; |
|
IFeatureClass fc2 = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX"); |
|
ITable itb = JC_fc as ITable; |
|
ICursor JC_cur = itb.Search(filter, true);//过滤输入坐落代码改变的部分 |
|
IRow row = null; |
|
int bsmIdx = itb.FindField("BSM"); |
|
int zldmIdx = itb.FindField("ZLDWDM"); |
|
int zlmcIdx = itb.FindField("ZLDWMC"); |
|
int qsdmIdx = itb.FindField("QSDWDM"); |
|
int qsmcIdx = itb.FindField("QSDWMC"); |
|
string bhxxbField = "BGQTBBSM,BGHTBBSM,BGQTBBH,BGHTBBH,BGQZLDWDM,BGHZLDWDM,BGQZLDWMC,BGHZLDWMC,BGQQSDWDM,BGHQSDWDM,BGQQSDWMC,BGHQSDWMC,BGQQSXZ,BGHQSXZ,BGQDLBM,BGHDLBM,BGQKCDLBM,BGHKCDLBM,BGQKCXS,BGHKCXS,BGQKCMJ,BGHKCMJ,BGQGDLX,BGHGDLX,BGQGDPDJB,BGHGDPDJB,BGQCZCSXM,BGHCZCSXM,BGQTBXHDM,BGHTBXHDM,BGQZZSXDM,BGHZZSXDM,BGQMSSM,BGHMSSM,BGQGDDB,BGHGDDB,BGMJ,XZQTZLX,BZ,BGXW"; |
|
string[] bhxxbfieldArr = bhxxbField.Split(','); |
|
Dictionary<string, int> dicTBBH = new Dictionary<string, int>(); |
|
GetMaxTBBH(JC_fc, ref dicTBBH); |
|
GetMaxTBBH(fc2, ref dicTBBH); |
|
|
|
DataTable bhxxDt = dbHelper.ExecuteDatatable("BHXXB", string.Format("select * from BHXXB"), true); |
|
List<string> bgqbsmList = new List<string>(); |
|
if (bhxxDt != null) |
|
{ |
|
foreach (DataRow dr in bhxxDt.Rows) |
|
{ |
|
string strBGQBSM = dr["BGQTBBSM"].ToTrim(); |
|
if (!bgqbsmList.Contains(strBGQBSM)) |
|
bgqbsmList.Add(strBGQBSM);//存储变更前标识码 |
|
|
|
string strBGHZLDWDM = dr["BGHZLDWDM"].ToTrim(); |
|
if (!dicTBBH.ContainsKey(strBGHZLDWDM)) |
|
{ |
|
dicTBBH.Add(strBGHZLDWDM, dr["BGHTBBH"].ToInt()); |
|
} |
|
else |
|
{ |
|
int bghtbbh = dr["BGHTBBH"].ToInt(); |
|
if (dicTBBH[strBGHZLDWDM] < bghtbbh) |
|
dicTBBH[strBGHZLDWDM] = bghtbbh; |
|
} |
|
} |
|
} |
|
|
|
List<string> strSQL = new List<string>(); |
|
int count = itb.RowCount(filter); |
|
ProgressHelper.CountProgress = count; |
|
int num = 0; |
|
while ((row = JC_cur.NextRow()) != null)//JC_DLTB |
|
{ |
|
num++; |
|
string bhxxbValue = string.Empty; |
|
if (zldmIdx == -1) break; |
|
string bsm = row.Value[bsmIdx].ToTrim(); |
|
if (bgqbsmList.Contains(bsm)) continue; |
|
string zldm = row.Value[zldmIdx].ToTrim(); |
|
string zlmc = string.Empty; |
|
string qsdm = row.Value[qsdmIdx].ToTrim(); |
|
string qsmc = string.Empty; |
|
if (qsmcIdx != -1) |
|
qsmc = row.Value[qsmcIdx].ToTrim(); |
|
|
|
if (zlmcIdx != -1) |
|
zlmc = row.Value[zlmcIdx].ToTrim(); |
|
string bghzldm = zldm.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim()); |
|
string bghzlmc = zlmc; |
|
if (!string.IsNullOrWhiteSpace(pBGHMC.ToTrim())) |
|
bghzlmc = zlmc.Replace(pBGQMC.ToTrim(), pBGHMC.ToTrim()); |
|
|
|
string bghqsdm = qsdm.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim()); |
|
string bghqsmc = qsmc; |
|
if (!string.IsNullOrWhiteSpace(pBGHMC.ToTrim())) |
|
bghqsmc = qsmc.Replace(pBGQMC.ToTrim(), pBGHMC.ToTrim()); |
|
|
|
foreach (var item in bhxxbfieldArr) |
|
{ |
|
string name = item.ToTrim().Replace("BGQ", "").Replace("BGH", ""); |
|
if (name == "TBBSM") |
|
name = "BSM"; |
|
if (item == "BGMJ") |
|
name = "TBMJ"; |
|
if (item == "BZ") |
|
name = "Temp_BZ"; |
|
int idx = row.Fields.FindField(name); |
|
if (idx != -1) |
|
{ |
|
if (item == "BGHTBBSM") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", row.Value[idx]); |
|
} |
|
else if (item == "BGHTBBH") |
|
{ |
|
string bghTBBH = string.Empty; |
|
if (dicTBBH.ContainsKey(bghzldm)) |
|
{ |
|
dicTBBH[bghzldm] = dicTBBH[bghzldm] + 1; |
|
bghTBBH = dicTBBH[bghzldm].ToTrim(); |
|
} |
|
else |
|
{//新增村 |
|
dicTBBH.Add(bghzldm, 1); |
|
bghTBBH = dicTBBH[bghzldm].ToTrim(); |
|
} |
|
bhxxbValue += string.Format("'{0}',", bghTBBH); |
|
} |
|
else if (item == "BGHZLDWDM") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", bghzldm); |
|
} |
|
else if (item == "BGHZLDWMC") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", bghzlmc); |
|
} |
|
else if (item == "BGHQSDWDM") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", bghqsdm); |
|
} |
|
else if (item == "BGHQSDWMC") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", bghqsmc); |
|
} |
|
else if (item.EndsWith("MJ")) |
|
{ |
|
bhxxbValue += string.Format("{0},", row.Value[idx]); |
|
} |
|
else |
|
{ |
|
bhxxbValue += string.Format("'{0}',", row.Value[idx]); |
|
} |
|
} |
|
else if (item == "BZ") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", "ZLBG"); |
|
} |
|
else if (item == "XZQTZLX") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", "0"); |
|
} |
|
else if (item == "BGXW") |
|
{ |
|
bhxxbValue += string.Format("'{0}',", "1"); |
|
} |
|
} |
|
bhxxbValue = bhxxbValue.TrimEnd(','); |
|
string strSQLTemp = string.Format("Insert into BHXXB ({0}) values ({1})", bhxxbField, bhxxbValue); |
|
strSQL.Add(strSQLTemp); |
|
Marshal.ReleaseComObject(row); |
|
if (num % 500 == 0 || num == count) |
|
{ |
|
InsertDB(strSQL, dbPath); |
|
strSQL.Clear(); |
|
ProgressHelper.CurrentProgress = num; |
|
} |
|
} |
|
if (strSQL.Count != 0) |
|
InsertDB(strSQL, dbPath); |
|
strSQL.Clear(); |
|
#region 更新坐落单位代码 名称 |
|
BGHZLExecute(pBGQDM, pBGQMC, pBGHDM, pBGHMC); |
|
#endregion |
|
} |
|
catch (Exception ex) |
|
{ |
|
ProgressHelper.CloseProcessBar(); |
|
MessageHelper.Show("坐落信息变更失败,请查看系统日志!"); |
|
LogAPI.Debug("坐落信息变更时发生异常,异常信息如下:"); |
|
LogAPI.Debug(ex); |
|
} |
|
finally |
|
{ |
|
loading.Visibility = Visibility.Collapsed; |
|
} |
|
} |
|
private void UnionDLTBGX() |
|
{ |
|
try |
|
{ |
|
string gdbFolder = Directory.GetCurrentDirectory() + "\\Temp\\GXGC"; |
|
if (!Directory.Exists(gdbFolder)) |
|
{ |
|
Directory.CreateDirectory(gdbFolder); |
|
} |
|
try |
|
{ |
|
BGHelper.DelectDir(gdbFolder);//能删除就删除 删除报错不处理 |
|
} |
|
catch |
|
{ } |
|
IWorkspaceFactory pFtWsFct = null; |
|
IWorkspaceName workspaceName = null; |
|
pFtWsFct = new FileGDBWorkspaceFactory(); |
|
|
|
string gdbFileName = Guid.NewGuid().ToString() + ".gdb"; |
|
string path = Path.Combine(gdbFolder, gdbFileName); |
|
workspaceName = pFtWsFct.Create(gdbFolder, gdbFileName, null, 0); |
|
|
|
IFeatureClass _GxFc = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX"); |
|
IFeatureLayer memeory_dltbgx1 = GeoDBAPI.CreateFeatureLayerInmemeory("mem_PDTGX", "坡度图更新", (_GxFc as IGeoDataset).SpatialReference, _GxFc.ShapeType, _GxFc.Fields); |
|
IQueryFilter filter2 = new QueryFilterClass(); |
|
filter2.WhereClause = " DLBM ='1003' or DLBM='1004' or DLBM ='1006' or DLBM='1101' or DLBM='1107' or DLBM='1107A'"; |
|
InsertDataToMemeoryLayer(_GxFc, memeory_dltbgx1.FeatureClass, filter2); |
|
|
|
(_GxFc as ITable).DeleteSearchedRows(new QueryFilterClass() { WhereClause = " DLBM ='1003' or DLBM='1004' or DLBM ='1006' or DLBM='1101' or DLBM='1107' or DLBM='1107A'" }); |
|
|
|
IFeatureLayer tempLayer = null; |
|
GPParamClass gPParamClass = new GPParamClass(); |
|
gPParamClass = new GPParamClass(); |
|
gPParamClass.FirstFeatureClass = _GxFc; |
|
gPParamClass.OutFeatureClassPath = path + "\\" + "DLTBGX_Diss"; |
|
gPParamClass.ListDissolveFiledName = new List<string>() { "DLBM", "DLMC", "QSXZ", "QSDWDM", "QSDWMC", "ZLDWDM", "ZLDWMC", "KCDLBM", "KCXS", "GDLX", "GDPDJB", "XZDWKD", "TBXHDM", "TBXHMC", "ZZSXDM", "ZZSXMC", "GDDB", "FRDBS", "CZCSXM", "MSSM", "HDMC", "XZQTZLX" };// |
|
gPParamClass.IsGetOutPutFeature = true; |
|
GeoprocessorHelper.DissolveAnalysis(gPParamClass, ref tempLayer); |
|
|
|
(_GxFc as ITable).DeleteSearchedRows(null); |
|
InsertDataToMemeoryLayer(memeory_dltbgx1.FeatureClass, _GxFc); |
|
InsertDataToMemeoryLayer(tempLayer.FeatureClass, _GxFc); |
|
IFeatureCursor gxCursor = _GxFc.Update(null, true); |
|
int kcdlbmIndex = _GxFc.FindField("GXSJ"); |
|
IFeature gxFeature = null; |
|
while ((gxFeature = gxCursor.NextFeature()) != null) |
|
{ |
|
gxFeature.Value[kcdlbmIndex] = new DateTime(DateTime.Now.Year - 1, 12, 31); |
|
gxCursor.UpdateFeature(gxFeature); |
|
} |
|
gxCursor.Flush(); |
|
BGHelper.GenerateGxgcData(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex.Message); |
|
throw; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 指定图斑修改坐落信息变更 |
|
/// </summary> |
|
private void SelUpdateZLInfo(string pBGHDM, string pBGHMC, string BGQBSM, string BGHBSM, string BGQTBBH, string BGHTBBH, int GXOID) |
|
{ |
|
IRDBHelper rdbHelper = null; |
|
string sql = string.Empty; |
|
IQueryFilter filter = new QueryFilterClass(); |
|
try |
|
{ |
|
IFeatureClass gxfc = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX"); |
|
int QSDWDMIndex = gxfc.FindField("QSDWDM"); |
|
int QSDWMCIndex = gxfc.FindField("QSDWMC"); |
|
string sqdwdm = gxfc.GetFeature(GXOID).Value[QSDWDMIndex].ToString(); |
|
string sqdwmc = gxfc.GetFeature(GXOID).Value[QSDWMCIndex].ToString(); |
|
//(不用区分村级与行政区)不区分县区村 |
|
IFeatureClass DLTBGCFC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX"); |
|
if (DLTBGCFC != null) |
|
{ |
|
//更新层BSM作为唯一条件 |
|
sql = $"UPDATE DLTBGX SET ZLDWDM ='{pBGHDM.ToTrim()}',ZLDWMC='{pBGHMC.ToTrim()}',QSDWDM ='{sqdwdm.ToTrim()}',QSDWMC='{sqdwmc.ToTrim()}' WHERE BSM='{BGHBSM}'"; |
|
(DLTBGCFC as FeatureClass).Workspace.ExecuteSQL(sql); |
|
} |
|
IFeatureClass TempGXGC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC"); |
|
if (TempGXGC != null) |
|
{ |
|
//变更后BSM作为唯一条件 |
|
sql = $"UPDATE DLTBGXGC SET BGHZLDWDM='{pBGHDM.ToTrim()}',BGHZLDWMC='{pBGHMC.ToTrim()}',BGHQSDWDM='{sqdwdm.ToTrim()}',BGHQSDWMC='{sqdwmc.ToTrim()}' WHERE BGHTBBSM='{BGHBSM}' "; |
|
(TempGXGC as FeatureClass).Workspace.ExecuteSQL(sql); |
|
} |
|
rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); |
|
if (rdbHelper.TableIsExist("BHXXB")) |
|
{ |
|
//单图斑坐落信息变更确认修改变化信息表数据根据(变更前后BSM,变更前后TBBH)来确定当前唯一数据 |
|
sql = $"UPDATE BHXXB SET BGHZLDWDM='{pBGHDM.ToTrim()}',BGHZLDWMC='{pBGHMC.ToTrim()}',BGHQSDWDM='{sqdwdm.ToTrim()}',BGHQSDWMC='{sqdwmc.ToTrim()}' WHERE BGQTBBSM='{BGQBSM}' and BGHTBBSM='{BGHBSM}' and BGQTBBH='{BGQTBBH}' and BGHTBBH='{BGHTBBH}' "; |
|
rdbHelper.ExecuteNonQuery(sql); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
ProgressHelper.CloseProcessBar(); |
|
LogAPI.Debug("坐落属性赋值失败:" + ex.Message); |
|
MessageHelper.ShowError("坐落属性赋值失败:" + ex.Message); |
|
} |
|
finally |
|
{ |
|
if (rdbHelper != null) |
|
{ |
|
rdbHelper.DisConnect(); |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 更新坐落单位代码 名称 |
|
/// </summary> |
|
/// <param name="pBGQDM"></param> |
|
/// <param name="pBGQMC"></param> |
|
/// <param name="pBGHDM"></param> |
|
/// <param name="pBGHMC"></param> |
|
public void BGHZLExecute(string pBGQDM, string pBGQMC, string pBGHDM, string pBGHMC) |
|
{ |
|
//IWorkspaceAPI wsAPI = null; |
|
//IWorkspace pWorkspace = null; |
|
IRDBHelper rdbHelper = null; |
|
string sql = string.Empty; |
|
IQueryFilter filter = new QueryFilterClass(); |
|
IRow row = null; |
|
try |
|
{ |
|
//string gdbpath = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetSchemeDBPath(); |
|
//wsAPI = new WorkspaceAPI(gdbpath, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile); |
|
//pWorkspace = wsAPI.CurrentWorkspace; |
|
IFeatureClass DlTBGXFC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX"); |
|
if (DlTBGXFC != null) |
|
{ |
|
ProgressHelper.Message = string.Format("【地类图斑更新层】正在进行坐落属性赋值,请稍后..."); |
|
if (rbtCJ.IsChecked.Value)//村级调查区 |
|
{ |
|
sql = $"UPDATE DLTBGX SET ZLDWDM ='{pBGHDM.ToTrim()}',ZLDWMC='{pBGHMC.ToTrim()}' WHERE ZLDWDM='{pBGQDM.ToTrim()}' and ZLDWMC='{pBGQMC.Trim()}' "; |
|
(DlTBGXFC as FeatureClass).Workspace.ExecuteSQL(sql); |
|
sql = $"UPDATE DLTBGX SET QSDWDM ='{pBGHDM.ToTrim()}',QSDWMC='{pBGHMC.ToTrim()}' WHERE QSDWDM='{pBGQDM.ToTrim()}' and QSDWMC='{pBGQMC.Trim()}' "; |
|
(DlTBGXFC as FeatureClass).Workspace.ExecuteSQL(sql); |
|
} |
|
else//行政区(镇级) |
|
{ |
|
filter.WhereClause = string.Format("ZLDWDM like '{0}%'", pBGQDM.ToTrim()); |
|
filter.SubFields = "OBJECTID,BSM,ZLDWDM,QSDWDM"; |
|
IFeatureClass fc = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX"); |
|
ITable itb = fc as ITable; |
|
ICursor cur = itb.Search(filter, true); |
|
Dictionary<int, string> keyValuePairs = new Dictionary<int, string>(); |
|
int iBSM = itb.FindField("BSM"); |
|
int iZLDWDM = itb.FindField("ZLDWDM"); |
|
int iQSDWDM = itb.FindField("QSDWDM"); |
|
while ((row = cur.NextRow()) != null) |
|
{ |
|
keyValuePairs.Add(row.OID, $"{row.Value[iZLDWDM]},{row.Value[iQSDWDM]},{row.Value[iBSM]}");//C# 6.0字符串拼接 |
|
} |
|
foreach (var item in keyValuePairs) |
|
{ |
|
var ZLDWDM = item.Value.Split(',')[0]; |
|
var QSDWDM = item.Value.Split(',')[1]; |
|
var BSM = item.Value.Split(',')[2]; |
|
|
|
if (pBGQDM.Length == 6 && pBGHDM.Length == 6) |
|
{ |
|
sql = $"UPDATE DLTBGX SET BSM='{BSM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}',ZLDWDM='{ZLDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}',QSDWDM='{QSDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}' WHERE OBJECTID={item.Key} "; |
|
} |
|
else |
|
{ |
|
sql = $"UPDATE DLTBGX SET ZLDWDM='{ZLDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}',QSDWDM='{QSDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}' WHERE OBJECTID={item.Key} "; |
|
} |
|
(DlTBGXFC as FeatureClass).Workspace.ExecuteSQL(sql); |
|
} |
|
} |
|
} |
|
IFeatureClass DlTBGXGCFC = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC"); |
|
if (DlTBGXGCFC != null) |
|
{ |
|
ProgressHelper.Message = string.Format("【地类图斑更新过程层】正在进行坐落属性赋值,请稍后..."); |
|
if (rbtCJ.IsChecked.Value) |
|
{ |
|
sql = $"UPDATE DLTBGXGC SET BGHZLDWDM='{pBGHDM.ToTrim()}',BGHZLDWMC='{pBGHMC.ToTrim()}' WHERE BGQZLDWDM='{pBGQDM.ToTrim()}' and BGQZLDWMC='{pBGQMC.Trim()}' "; |
|
(DlTBGXGCFC as FeatureClass).Workspace.ExecuteSQL(sql); |
|
sql = $"UPDATE DLTBGXGC SET BGHQSDWDM='{pBGHDM.ToTrim()}',BGHQSDWMC='{pBGHMC.ToTrim()}' WHERE BGQQSDWDM='{pBGQDM.ToTrim()}' and BGQQSDWMC='{pBGQMC.Trim()}' "; |
|
(DlTBGXGCFC as FeatureClass).Workspace.ExecuteSQL(sql); |
|
} |
|
else |
|
{ |
|
filter.WhereClause = string.Format("BGQZLDWDM like '{0}%'", pBGQDM.ToTrim()); |
|
filter.SubFields = "OBJECTID,BGHTBBSM,BGHZLDWDM,BGHQSDWDM"; |
|
IFeatureClass fc = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGXGC"); |
|
ITable itb = fc as ITable; |
|
ICursor cur = itb.Search(filter, true); |
|
Dictionary<int, string> keyValuePairs = new Dictionary<int, string>(); |
|
int iBGHTBBSM = itb.FindField("BGHTBBSM"); |
|
int iBGHZLDWDM = itb.FindField("BGHZLDWDM"); |
|
int iBGHQSDWDM = itb.FindField("BGHQSDWDM"); |
|
while ((row = cur.NextRow()) != null) |
|
{ |
|
keyValuePairs.Add(row.OID, $"{row.Value[iBGHZLDWDM]},{row.Value[iBGHQSDWDM]},{row.Value[iBGHTBBSM]}"); |
|
} |
|
foreach (var item in keyValuePairs) |
|
{ |
|
var BGHZLDWDM = item.Value.Split(',')[0]; |
|
var BGHQSDWDM = item.Value.Split(',')[1]; |
|
var BGHTBBSM = item.Value.Split(',')[2]; |
|
if (pBGQDM.Length == 6 && pBGHDM.Length == 6) |
|
{ |
|
sql = $"UPDATE DLTBGXGC SET BGHTBBSM='{BGHTBBSM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}',BGHZLDWDM='{BGHZLDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}',BGHQSDWDM='{BGHQSDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}' WHERE OBJECTID={item.Key} "; |
|
} |
|
else |
|
{ |
|
sql = $"UPDATE DLTBGXGC SET BGHZLDWDM='{BGHZLDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}',BGHQSDWDM='{BGHQSDWDM.Replace(pBGQDM.ToTrim(), pBGHDM.ToTrim())}' WHERE OBJECTID={item.Key} "; |
|
} |
|
(DlTBGXGCFC as FeatureClass).Workspace.ExecuteSQL(sql); |
|
} |
|
} |
|
} |
|
rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); |
|
if (rdbHelper.TableIsExist("BHXXB")) |
|
{ |
|
ProgressHelper.Message = string.Format("【变化信息表】正在进行坐落属性赋值,请稍后..."); |
|
if (rbtCJ.IsChecked.Value) |
|
{ |
|
sql = $"UPDATE BHXXB SET BGHZLDWDM='{pBGHDM.ToTrim()}',BGHZLDWMC='{pBGHMC.ToTrim()}' WHERE BGQZLDWDM='{pBGQDM.ToTrim()}' and BGQZLDWMC='{pBGQMC.Trim()}' "; |
|
rdbHelper.ExecuteNonQuery(sql); |
|
sql = $"UPDATE BHXXB SET BGHQSDWDM='{pBGHDM.ToTrim()}',BGHQSDWMC='{pBGHMC.ToTrim()}' WHERE BGQQSDWDM='{pBGQDM.ToTrim()}' and BGQQSDWMC='{pBGQMC.Trim()}' "; |
|
rdbHelper.ExecuteNonQuery(sql); |
|
} |
|
else |
|
{ |
|
if (pBGQDM.Length == 6 && pBGHDM.Length == 6) |
|
{ |
|
sql = $"UPDATE BHXXB SET BGHTBBSM=replace(BGHTBBSM,'{pBGQDM.ToTrim()}','{pBGHDM.ToTrim()}'),BGHZLDWDM=replace(BGHZLDWDM,'{pBGQDM.ToTrim()}','{pBGHDM.ToTrim()}'),BGHQSDWDM=replace(BGHQSDWDM,'{pBGQDM.ToTrim()}','{pBGHDM.ToTrim()}') "; |
|
} |
|
else |
|
{ |
|
sql = $"UPDATE BHXXB SET BGHZLDWDM=replace(BGHZLDWDM,'{pBGQDM.ToTrim()}','{pBGHDM.ToTrim()}'),BGHQSDWDM=replace(BGHQSDWDM,'{pBGQDM.ToTrim()}','{pBGHDM.ToTrim()}') WHERE BGHZLDWDM like '{pBGQDM.ToTrim()}%' "; |
|
} |
|
rdbHelper.ExecuteNonQuery(sql); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
ProgressHelper.CloseProcessBar(); |
|
LogAPI.Debug("坐落属性赋值失败:" + ex.Message); |
|
MessageHelper.ShowError("坐落属性赋值失败:" + ex.Message); |
|
} |
|
finally |
|
{ |
|
if (rdbHelper != null) |
|
{ |
|
rdbHelper.DisConnect(); |
|
} |
|
} |
|
} |
|
/// <summary> |
|
/// 多线程插入数据到db中 |
|
/// </summary> |
|
/// <param name="listSQL"></param> |
|
/// <param name="dbPath"></param> |
|
private void InsertDB(List<string> listSQL, string dbPath) |
|
{ |
|
try |
|
{ |
|
using (BlockingCollection<string> blockingCollection = new BlockingCollection<string>()) |
|
{ |
|
listSQL.ForEach(x => blockingCollection.Add(x)); |
|
blockingCollection.CompleteAdding(); |
|
int taskNum = 5; |
|
Task[] tasks = new Task[taskNum]; |
|
for (int i = 0; i < taskNum; i++) |
|
{ |
|
tasks[i] = Task.Factory.StartNew(() => |
|
{ |
|
ExcuteThead(blockingCollection, dbPath); |
|
}); |
|
} |
|
Task.WaitAll(tasks); |
|
for (int i = 0; i < taskNum; i++) |
|
{ |
|
tasks[i].Dispose(); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
} |
|
private void ExcuteThead(BlockingCollection<string> blockingCollection, string dbPath) |
|
{ |
|
IRDBHelper rdbHelper = null; |
|
string sqlDe = string.Empty; |
|
try |
|
{ |
|
rdbHelper = RDBFactory.CreateDbHelper(string.Format("Data Source={0};Initial Catalog=sqlite;Integrated Security=True;Max Pool Size=10;", dbPath), DatabaseType.SQLite); |
|
if (rdbHelper == null) |
|
{ |
|
throw new Exception("执行成果接收时打开数据库连接字符串失败!"); |
|
} |
|
rdbHelper.BeginTransaction(); |
|
foreach (string sql in blockingCollection.GetConsumingEnumerable()) |
|
{ |
|
sqlDe = sql; |
|
rdbHelper.ExecuteNonQueryWithException(sql, CommandType.Text); |
|
} |
|
rdbHelper.Commit(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
if (rdbHelper != null) |
|
rdbHelper.Rollback(); |
|
LogAPI.Debug(ex); |
|
throw ex; |
|
} |
|
finally |
|
{ |
|
if (rdbHelper != null) |
|
rdbHelper.DisConnect(); |
|
} |
|
} |
|
|
|
private void InsertDataToMemeoryLayer(IFeatureClass pSource, IFeatureClass pTarget, IQueryFilter pFilter = null) |
|
{ |
|
try |
|
{ |
|
if (pSource == null || pTarget == null) return; |
|
IFeatureClassAPI fcAPI = new FeatureClassAPI(pSource); |
|
if (pTarget != null) |
|
fcAPI.FcToFc(pTarget, pFilter, false); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("插入数据失败:"); |
|
LogAPI.Debug(ex); |
|
} |
|
} |
|
|
|
private static void GetMaxTBBH(IFeatureClass fc, ref Dictionary<string, int> result) |
|
{ |
|
try |
|
{ |
|
ICursor cursor = (fc as ITable).Search(new QueryFilterClass() { SubFields = "ZLDWDM,TBBH" }, true); |
|
IRow row = null; |
|
int zlIndex = fc.FindField("ZLDWDM"); |
|
int bhIndex = fc.FindField("TBBH"); |
|
while ((row = cursor.NextRow()) != null) |
|
{ |
|
if (zlIndex != -1 && bhIndex != -1) |
|
{ |
|
string zl = row.Value[zlIndex].ToTrim(); |
|
if (string.IsNullOrWhiteSpace(zl)) continue; |
|
zl = zl.Replace(zl.Substring(0, 6), (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).CODE); |
|
int tbbh = 0; |
|
int.TryParse(row.Value[bhIndex].ToString(), out tbbh); |
|
if (result.ContainsKey(zl)) |
|
{ |
|
if (result[zl] < tbbh) |
|
result[zl] = tbbh; |
|
} |
|
else |
|
{ |
|
result.Add(zl, tbbh); |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取图层图斑编号失败:" + ex.Message); |
|
throw; |
|
} |
|
} |
|
} |
|
}
|
|
|