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.
342 lines
15 KiB
342 lines
15 KiB
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using KGIS.Framework.DBOperator; |
|
using KGIS.Framework.Maps; |
|
using KGIS.Framework.Platform; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Helper; |
|
using KGIS.Framework.Views; |
|
using Kingo.Plugin.DLTB_IDG.EntiyModel; |
|
using Kingo.PluginServiceInterface; |
|
using Kingo.RuleCheck; |
|
using KUI.Windows; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.IO; |
|
using System.Linq; |
|
using System.Windows; |
|
using System.Windows.Controls; |
|
using UIShell.OSGi; |
|
|
|
namespace Kingo.Plugin.DLTB_IDG.View |
|
{ |
|
/// <summary> |
|
/// 国家质检错误信息列表 的交互逻辑 |
|
/// </summary> |
|
public partial class UCDataAnalysis : UserControl, IDockPanel3 |
|
{ |
|
private Dictionary<string, List<object>> fieldValueDict = null; |
|
public IFeatureClass ExternalFeatureClass { get; set; } |
|
public UCDataAnalysis() |
|
{ |
|
InitializeComponent(); |
|
DevExpress.Xpf.Core.ThemeManager.SetTheme(this, DevExpress.Xpf.Core.Theme.Office2013LightGray); |
|
DockAreas = DockStyle.DockRight | DockStyle.DockBottom | DockStyle.DockLeft; |
|
FloatSize = new System.Drawing.Size(1600, 660); |
|
DockHeight = 380; |
|
DefaultArea = DockStyle.DockBottom; |
|
ShowCloseButton = true; |
|
ShowAutoHideButton = false; |
|
Title = "定性图斑检查"; |
|
IsShowInMap = true; |
|
this.Loaded += LoadViewData; |
|
} |
|
private Dictionary<string, string> ErrItems = new Dictionary<string, string>(); |
|
|
|
private void LoadViewData(object sender, RoutedEventArgs e) |
|
{ |
|
List<string> groupName = new List<string>() { "CKSJ", "JCSJ" }; |
|
#region 获取年初数据与参考数据中的图层信息 |
|
IDataCatalogService _DataCatalog = null; |
|
_DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService<IDataCatalogService>(); |
|
LayerCfg GroupLayerInfo = null; |
|
List<RelatedLayer> layers = new List<RelatedLayer>(); |
|
if (_DataCatalog != null) |
|
{ |
|
foreach (var Name in groupName) |
|
{ |
|
ILayer layer = MapsManager.Instance.MapService.GetGroupLayer(Name); |
|
_DataCatalog.GetNodeByLayer(layer); |
|
LayerCfg rootLayer = _DataCatalog.CurrentLayers as LayerCfg; |
|
List<LayerCfg> AllLayers = rootLayer.GetAllItem(); |
|
GroupLayerInfo = AllLayers.FirstOrDefault(f => f.LayerName == layer.Name); |
|
if (GroupLayerInfo != null && GroupLayerInfo.Layers.Count > 0) |
|
{ |
|
foreach (var item in GroupLayerInfo.Layers) |
|
layers.Add(new RelatedLayer { FcName = item.FcName, FcPath = item.FcPath, Name = $"{layer.Name}---{item.LayerName}" }); |
|
|
|
} |
|
} |
|
} |
|
#endregion |
|
RelatedCombox.DisplayMember = "Name"; |
|
RelatedCombox.ItemsSource = layers; |
|
KGIS.Framework.DBOperator.IRDBHelper rdbHelper = null; |
|
ErrItems.Clear(); |
|
//rdbHelper = RDBFactory.CreateDbHelper($"{DbPath}", DatabaseType.SQLite); |
|
try |
|
{ |
|
//if (rdbHelper.TableIsExist("ErrorTC")) |
|
//{ |
|
// DataTable ErrorLayerdt = rdbHelper.ExecuteDatatable("ErrorTC", "SELECT DISTINCT ErrorLayer FROM ErrorTC WHERE ErrorLayer<>''", true); |
|
// if (ErrorLayerdt != null && ErrorLayerdt.Rows.Count > 0) |
|
// { |
|
// ErrItems.Add("ErrorTC", "错误图层"); |
|
// } |
|
//} |
|
//if (rdbHelper.TableIsExist("ErrorBGYLB")) |
|
//{ |
|
// DataTable ErrorLayerdt = rdbHelper.ExecuteDatatable("ErrorBGYLB", "SELECT DISTINCT ErrorType FROM ErrorBGYLB WHERE ErrorType<>''", true); |
|
// if (ErrorLayerdt != null && ErrorLayerdt.Rows.Count > 0) |
|
// { |
|
// ErrItems.Add("ErrorBGYLB", "一览表错误"); |
|
// } |
|
//} |
|
//if (rdbHelper.TableIsExist("ErrorBasic")) |
|
//{ |
|
// DataTable ErrorLayerdt = rdbHelper.ExecuteDatatable("ErrorBasic", "SELECT DISTINCT ErrorDescription FROM ErrorBasic WHERE ErrorDescription<>'' ORDER by ErrorDescription", true); |
|
// if (ErrorLayerdt != null && ErrorLayerdt.Rows.Count > 0) |
|
// { |
|
// ErrItems.Add("ErrorBasic", "基本错误"); |
|
// } |
|
//} |
|
//if (rdbHelper.TableIsExist("ErrorReport")) |
|
//{ |
|
// DataTable ErrorLayerdt = rdbHelper.ExecuteDatatable("ErrorReport", "SELECT DISTINCT StatisticalReport FROM ErrorReport WHERE StatisticalReport<>''", true); |
|
// if (ErrorLayerdt != null && ErrorLayerdt.Rows.Count > 0) |
|
// { |
|
// ErrItems.Add("ErrorReport", "错误报表"); |
|
// } |
|
//} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("国家质检绑定错误类型异常:" + ex); |
|
throw; |
|
} |
|
if (ErrItems.Count > 0) |
|
{ |
|
} |
|
} |
|
|
|
private Dictionary<string, string> ErrItem = new Dictionary<string, string>(); |
|
/// <summary> |
|
/// 错误报表选择事件 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void ErrBBComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) |
|
{ |
|
|
|
} |
|
|
|
private List<CheckErrorInfo> checkErrorInfos = new List<CheckErrorInfo>(); |
|
/// <summary> |
|
/// 错误类型选择事件 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void ErrLXComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) |
|
{ |
|
|
|
} |
|
|
|
#region IDockPanel接口属性 |
|
public event EventHandler CloseViewHandler; |
|
|
|
public bool IsDockToPanel { get; set; } |
|
public DockStyle DockToPanelStyle { get; set; } |
|
public bool IsShowInMap { 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; } |
|
#endregion |
|
|
|
/// <summary> |
|
/// 双击定位-仅为矢量可定位数据 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void TvAttr_RowDoubleClick(object sender, DevExpress.Xpf.Grid.RowDoubleClickEventArgs e) |
|
{ |
|
try |
|
{ |
|
//错误图层定位逻辑 |
|
if (dgTableMapping.SelectedItem is CheckErrorInfo checkErrorInfo && checkErrorInfo.CheckType.Equals("ErrorTC") && !string.IsNullOrWhiteSpace(checkErrorInfo.ErrorLayer)) |
|
{ |
|
IQueryFilter queryFilter = new QueryFilterClass() |
|
{ |
|
WhereClause = $"BSM='{checkErrorInfo.BSM}'" |
|
}; |
|
string ErrorLayerName = checkErrorInfo.ErrorLayer; |
|
switch (checkErrorInfo.ErrorLayer) |
|
{ |
|
case "城镇村等用地更新": |
|
ErrorLayerName = "城镇村更新"; |
|
break; |
|
case "城镇村等用地更新过程": |
|
ErrorLayerName = "城镇村更新过程"; |
|
break; |
|
} |
|
IFeatureLayer layer = KGIS.Framework.Maps.MapsManager.Instance.MapService.GetFeatureLayerByLayerName(ErrorLayerName); |
|
if (layer != null) |
|
{ |
|
IFeatureCursor featureCursor = layer.Search(queryFilter, true); |
|
IFeature feature = featureCursor.NextFeature(); |
|
if (feature != null) |
|
{ |
|
KGIS.Framework.Maps.MapsManager.Instance.MapService.SelectFeature(((IDataset)layer.FeatureClass).Name, feature.OID.ToString()); |
|
//根据错误编码执行质检库 |
|
List<RuleEntity> ruleEntities = RuleCheck.XJRuleCheck.RuleCheckOpertion_DTB.StartGJZJJGCheck(feature, new List<Tuple<string>>() { Tuple.Create(checkErrorInfo.ErrorCode) }); |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("错误图层定位逻辑" + ex.Message); |
|
} |
|
} |
|
|
|
public void ShowPanel() |
|
{ |
|
Platform.Instance.OpenView(this, false); |
|
} |
|
|
|
public void ClosePanel() |
|
{ |
|
Platform.Instance.CloseView(this); |
|
} |
|
|
|
public void ClosePanelInvoke() |
|
{ |
|
CloseViewHandler?.Invoke(null, null); |
|
} |
|
|
|
private void btnExternalData_Click(object sender, RoutedEventArgs e) |
|
{ |
|
//try |
|
//{ |
|
// OpenDataDialog pDialog = new OpenDataDialog(); |
|
// ISpatialDataObjectFilter pOFilter; |
|
// pOFilter = new FilterDatasetsAndLayers(); |
|
// pDialog.AddFilter(pOFilter, true); |
|
// pDialog.Title = "选择导入的数据"; |
|
// pDialog.AllowMultiSelect = false; |
|
// pDialog.RestoreLocation = true; |
|
// pDialog.StartLocation = pDialog.FinalLocation; |
|
// System.Windows.Forms.DialogResult dialogResult = pDialog.ShowDialog(); |
|
// if (dialogResult == System.Windows.Forms.DialogResult.OK && pDialog.Selection.Count != 0) |
|
// { |
|
// foreach (ISpatialDataObject distObj in pDialog.Selection) |
|
// { |
|
// if (distObj.DatasetType == esriDatasetType.esriDTFeatureClass) |
|
// { |
|
// ExternalFeatureClass = (distObj.DatasetName as IName).Open() as IFeatureClass; |
|
// externalDataPath.Text = distObj.FullName; |
|
// break; |
|
// } |
|
// } |
|
// } |
|
//} |
|
//catch (Exception ex) |
|
//{ |
|
// LogAPI.Debug("btnExternalData_Click异常:" + ex.Message); |
|
// LogAPI.Debug("btnExternalData_Click异常:" + ex.StackTrace); |
|
//} |
|
} |
|
|
|
private void btnAnalysis_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
ProjectInfo projectInfo = MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo; |
|
if (projectInfo == null) |
|
{ |
|
MessageHelper.ShowTips($"请先打开工程。"); |
|
return; |
|
} |
|
if (string.IsNullOrEmpty(projectInfo.ZLDatabase)) |
|
{ |
|
MessageHelper.ShowTips($"未找到增量数据,请先创建增量数据库"); |
|
return; |
|
} |
|
IFeatureClass featureClass = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBGX"); |
|
if (featureClass == null) |
|
{ |
|
MessageHelper.ShowTips($"未找到地类图斑更新图层,请检查图层是否存在"); |
|
return; |
|
} |
|
else if (featureClass.FeatureCount(null) == 0) |
|
{ |
|
MessageHelper.ShowTips($"地类图斑更新图层数据未空,无法进行对比分析"); |
|
return; |
|
} |
|
if (RelatedCombox.SelectedItems.Count == 0) |
|
{ |
|
MessageHelper.ShowTips($"请选择要对比分析的参考图层数据。"); |
|
return; |
|
} |
|
List<DataModel> RelDataList = new List<DataModel>(); |
|
foreach (RelatedLayer item in RelatedCombox.SelectedItems.ToList()) |
|
{ |
|
RelDataList.Add(new DataModel() { SFFX = true, SJLJ = item.FcPath, TCMC = item.FcName, XZQDM = projectInfo.CODE, ZD = "BSM", SX = "DLBM,DLMC,QSXZ,QSDWDM,QSDWMC,ZLDWDM,ZLDWMC,GDLX,GDPDJB,XZDWKD,TBXHDM,TBXHMC,ZZSXDM,ZZSXMC,GDDB,CZCSXM" }); |
|
} |
|
List<DataModel> TaskList = new List<DataModel>() |
|
{ |
|
new DataModel() { SFFX = true, SJLJ = projectInfo.ZLDatabase, TCMC="DLTBGX",XZQDM=projectInfo.CODE,ZD="BSM",SX="DLBM,DLMC,QSXZ,QSDWDM,QSDWMC,ZLDWDM,ZLDWMC,GDLX,GDPDJB,XZDWKD,TBXHDM,TBXHMC,ZZSXDM,ZZSXMC,GDDB,CZCSXM"} |
|
}; |
|
string OutDB = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "Temp", "Temp.sqlite"); |
|
if (File.Exists(OutDB)) |
|
{ |
|
File.Delete(OutDB); |
|
} |
|
File.Copy(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "Template", "Temp.sqlite"), OutDB); |
|
string insertDB = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "Temp", "InsertTemp.sqlite"); |
|
if (File.Exists(insertDB)) |
|
{ |
|
File.Delete(insertDB); |
|
} |
|
File.Copy(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "Template", "Temp.sqlite"), insertDB); |
|
BaseAnalysisData cfg = new BaseAnalysisData() |
|
{ |
|
OutDB = OutDB,//输出db文件路径 |
|
Code = projectInfo.CODE,//行政区代码 |
|
TaskList = TaskList.ToArray(), |
|
RelDataList = RelDataList.ToArray(), |
|
GDBInputDB = insertDB |
|
}; |
|
this.ShowLoading("正在进行数据分析......", 0, 0); |
|
ProcesHelper.Instance.MuitProcessAnalyssis(cfg); |
|
//ProcesHelper.Instance.MuitProcessAnalyssis_end(cfg); |
|
this.CloseLoading(); |
|
//KGIS.Framework.DBOperator.IRDBHelper dbHelper = null; |
|
//dbHelper = RDBFactory.CreateDbHelper(OutDB, DatabaseType.SQLite); |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
this.CloseLoading(); |
|
LogAPI.Debug("定性图斑检查分析错误:" + ex.Message); |
|
LogAPI.Debug("定性图斑检查分析错误:" + ex.StackTrace); |
|
throw ex; |
|
} |
|
finally |
|
{ |
|
|
|
} |
|
} |
|
} |
|
public class RelatedLayer |
|
{ |
|
public string Name { get; set; } |
|
public string FcName { get; set; } |
|
public string FcPath { get; set; } |
|
} |
|
}
|
|
|