年度变更建库软件5.0版本
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.
 
 

329 lines
13 KiB

using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using KGIS.Framework.Maps;
using KGIS.Framework.Utils;
using KGIS.Framework.Utils.Helper;
using Kingo.PluginServiceInterface;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Controls;
namespace Kingo.Plugin.SystemSetting.View.ViewSystemSetting
{
public partial class FrmWYInfoSetting : BaseWindow
{
private bool isADD { get; set; }
private List<WYZPCfg> wYZPCfgs = null;
private WYZPCfg layerInfo = null;
public Action Refresh;
public FrmWYInfoSetting(bool isADD, WYZPCfg layerInfo, List<WYZPCfg> wYZPCfgs)
{
InitializeComponent();
this.isADD = isADD;
this.layerInfo = layerInfo;
this.wYZPCfgs = wYZPCfgs;
GetLayerInfo();
}
private void GetLayerInfo()
{
try
{
List<LayerName> layerNameList = new List<LayerName>();
List<ILayer> pLayerList = MapsManager.Instance.MapService.GetAllLayerInMap<ILayer>();
if (pLayerList != null && pLayerList.Count != 0)
{
foreach (var pLayer in pLayerList)
{
if (pLayer is IGroupLayer || pLayer is IRasterLayer)
continue;
LayerName layer = new LayerName
{
Name = (pLayer as IDataset).BrowseName,
AliasName = pLayer.Name
};
layerNameList.Add(layer);
}
}
List<RelevantModel> modelList = new List<RelevantModel>();
string[] model = new string[] { "属性", "图形" };
for (int i = 0; i < model.Length; i++)
{
string name = model[i];
RelevantModel modelInfo = new RelevantModel
{
Name = name,
Index = i
};
modelList.Add(modelInfo);
}
this.cobLayerName.ItemsSource = layerNameList;
this.cobModel.ItemsSource = modelList;
if (this.isADD == false && this.layerInfo != null)
{
List<LayerName> nameList = layerNameList.FindAll(x => x.Name == this.layerInfo.LayerName);
if (nameList != null && nameList.Count != 0)
{
LayerName layerName = nameList[0];
this.cobLayerName.SelectedItem = layerName;
}
List<RelevantModel> list = modelList.FindAll(x => x.Name == this.layerInfo.RelevantModel);
if (list != null && list.Count != 0)
{
RelevantModel relevantModel = list[0];
this.cobModel.SelectedItem = relevantModel;
}
if (this.layerInfo.RelevantModel == "属性")
{
BindCobFields(this.layerInfo.LayerName);
this.cobFields.IsEditable = false;
}
else
{
this.cobFields.ItemsSource = null;
this.cobFields.IsEditable = true;
this.cobFields.Text = this.layerInfo.AreaScale;
}
}
}
catch (Exception ex)
{
LogAPI.Debug("获取外业信息图层配置失败:" + ex);
}
}
private void btnOK_Click(object sender, RoutedEventArgs e)
{
try
{
if (this.cobLayerName.SelectedItem == null)
{
MessageHelper.Show(string.Format("未选择图层名称!"));
return;
}
if (this.cobModel.SelectedItem == null)
{
MessageHelper.Show(string.Format("未选择关联方式!"));
return;
}
RelevantModel model = this.cobModel.SelectedItem as RelevantModel;
if (model.Name == "属性")
{
if (this.cobFields.SelectedItem == null)
{
MessageHelper.Show(string.Format("未选择属性字段!"));
return;
}
}
else
{
if (string.IsNullOrWhiteSpace(this.cobFields.Text))
{
MessageHelper.Show(string.Format("未输入面积占比!"));
return;
}
Regex rx = new Regex("^[0-9]*$");
if (rx.IsMatch(this.cobFields.Text) == false)
{
MessageHelper.Show(string.Format("面积占比输入不正确,请输入正整数!"));
return;
}
double areaScale = Convert.ToDouble(this.cobFields.Text);
if (areaScale > 100)
{
MessageHelper.Show(string.Format("面积占比输入不正确,不可超出100!"));
return;
}
}
if (this.isADD == true)
{
WYZPCfg layerInfo = new WYZPCfg();
layerInfo.IsCheck = true;
LayerName layer = this.cobLayerName.SelectedItem as LayerName;
List<WYZPCfg> WyInfoList = wYZPCfgs.FindAll(x => x.LayerName == layer.Name);
if (WyInfoList != null && WyInfoList.Count != 0)
{
MessageHelper.Show(string.Format("{0}图层在配置文件中已存在,不在进行添加,请选择其他图层!", layer.AliasName));
return;
}
layerInfo.LayerName = layer.Name;
layerInfo.LayerAliasName = layer.AliasName;
layerInfo.RelevantModel = model.Name;
if (layerInfo.RelevantModel == "属性")
{
LayerField field = this.cobFields.SelectedItem as LayerField;
layerInfo.AttributeField = field.Name;
layerInfo.AreaScale = null;
}
else
{
layerInfo.AreaScale = this.cobFields.Text;
layerInfo.AttributeField = null;
}
wYZPCfgs.Add(layerInfo);
MessageHelper.Show("外业信息图层添加成功!");
Refresh?.Invoke();
this.Close();
}
else
{
if (this.layerInfo != null)
{
LayerName layer = this.cobLayerName.SelectedItem as LayerName;
foreach (WYZPCfg item in wYZPCfgs)
{
if (item.LayerName == this.layerInfo.LayerName)
{
item.LayerName = layer.Name;
item.LayerAliasName = layer.AliasName;
item.RelevantModel = model.Name;
if (item.RelevantModel == "属性")
{
LayerField field = this.cobFields.SelectedItem as LayerField;
item.AttributeField = field.Name;
item.AreaScale = string.Empty;
}
else
{
item.AreaScale = this.cobFields.Text;
item.AttributeField = string.Empty;
}
}
}
}
MessageHelper.Show("外业信息图层修改成功!");
Refresh?.Invoke();
this.Close();
}
}
catch (Exception ex)
{
if (this.isADD)
{
LogAPI.Debug("外业信息图层添加失败:" + ex);
MessageHelper.Show("外业信息图层添加失败:" + ex);
}
else
{
LogAPI.Debug("外业信息图层修改失败:" + ex);
MessageHelper.Show("外业信息图层修改失败:" + ex);
}
}
}
private void CobLayerName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems != null && e.AddedItems.Count != 0)
{
LayerName layerName = e.AddedItems[0] as LayerName;
if (this.cobModel.SelectedItem != null)
{
RelevantModel model = this.cobModel.SelectedItem as RelevantModel;
if (model.Name == "属性")
{
BindCobFields(layerName.Name);
}
}
}
}
private void CobModel_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems != null && e.AddedItems.Count != 0)
{
RelevantModel model = e.AddedItems[0] as RelevantModel;
if (model.Name == "属性")
{
if (this.cobLayerName.SelectedItem == null)
{
MessageHelper.Show(string.Format("请先选择图层名称,才能获取属性字段!"));
return;
}
LayerName layerName = this.cobLayerName.SelectedItem as LayerName;
BindCobFields(layerName.Name);
this.cobFields.IsEditable = false;
}
else
{
this.cobFields.ItemsSource = null;
this.cobFields.IsEditable = true;
}
}
}
private void BindCobFields(string layerName)
{
try
{
List<LayerField> fieldList = new List<LayerField>();
IFeatureLayer layer = MapsManager.Instance.MapService.GetFeatureLayerByName(layerName);
IFields fields = layer.FeatureClass.Fields;
for (int i = 0; i < fields.FieldCount; i++)
{
IField field = fields.Field[i];
string fieldName = field.Name;
if (field.Name.ToUpper().Contains("SHAPE"))
continue;
LayerField fieldInfo = new LayerField();
fieldInfo.Name = fieldName;
fieldInfo.AliasName = field.AliasName;
fieldInfo.Index = i;
fieldList.Add(fieldInfo);
}
this.cobFields.ItemsSource = fieldList;
if (this.isADD == false && this.layerInfo != null)
{
List<LayerField> list = fieldList.FindAll(x => x.Name == this.layerInfo.AttributeField);
if (list != null && list.Count != 0)
{
LayerField layerField = list[0];
this.cobFields.SelectedItem = layerField;
}
}
}
catch (Exception ex)
{
LogAPI.Debug("获取属性字段失败:" + ex);
}
}
private void btnCancel_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
public class LayerName
{
public int Index { get; set; }
public string Name { get; set; }
public string AliasName { get; set; }
}
public class RelevantModel
{
public int Index { get; set; }
public string Name { get; set; }
}
public class LayerField
{
public int Index { get; set; }
public string Name { get; set; }
public string AliasName { get; set; }
}
}
}