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 wYZPCfgs = null; private WYZPCfg layerInfo = null; public Action Refresh; public FrmWYInfoSetting(bool isADD, WYZPCfg layerInfo, List wYZPCfgs) { InitializeComponent(); this.isADD = isADD; this.layerInfo = layerInfo; this.wYZPCfgs = wYZPCfgs; GetLayerInfo(); } private void GetLayerInfo() { try { List layerNameList = new List(); List pLayerList = MapsManager.Instance.MapService.GetAllLayerInMap(); 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 modelList = new List(); 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 nameList = layerNameList.FindAll(x => x.Name == this.layerInfo.LayerName); if (nameList != null && nameList.Count != 0) { LayerName layerName = nameList[0]; this.cobLayerName.SelectedItem = layerName; } List 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 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 fieldList = new List(); 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 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; } } } }