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

433 lines
18 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using KGIS.Framework.OpenData.Control;
using KGIS.Framework.OpenData.InterFace;
using KGIS.Framework.AE;
using KGIS.Framework.Utils;
using KGIS.Framework.Utils.Helper;
using KGIS.Framework.OpenData.Filter;
using System.Windows.Forms;
using Kingo.Plugin.MakeTaskPackage.Model;
using KGIS.Framework.Maps;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Display;
using KGIS.Framework.Platform;
using static Kingo.Plugin.MakeTaskPackage.Model.MakeTaskPackageModel;
namespace Kingo.Plugin.MakeTaskPackage.View
{
/// <summary>
/// FrmAddListLayer.xaml 的交互逻辑
/// </summary>
public partial class FrmAddListLayer : BaseWindow
{
public List<MakeTaskPackageModel> groupNameList = null;
public List<MakeTaskPackageModel> exportDataList = null;
public OutputPath outPutPathCfg = null;
public bool isWRJRWB { get; set; }//是否选择的是无人机任务包
public int selectedRWDCZTInx = 1;
public Action Refresh;
public FrmAddListLayer()
{
InitializeComponent();
}
private void FrmAddListLayer_Loaded(object sender, RoutedEventArgs e)
{
try
{
List<IFeatureLayer> layerList = MapsManager.Instance.MapService.GetAllLayerInMap<IFeatureLayer>();
if (layerList != null && layerList.Count != 0)
{
foreach (var item in layerList)
{
LayerDic layerDic = new LayerDic();
if (item.FeatureClass != null)
layerDic.CODE = (item.FeatureClass as IDataset).BrowseName;
layerDic.NAME = item.Name;
this.cobLayer.Items.Add(layerDic);
}
}
List<MakeTaskPackageModel> groupNameList = this.exportDataList.FindAll(x => x.IsLayerGroup == true);
if (groupNameList != null)
{
foreach (var item in groupNameList)
{
this.cobLayerGroup.Items.Add(item);
}
}
this.cobJZRW.Items.Add("是");
this.cobJZRW.Items.Add("否");
//this.cobJZRW.SelectedIndex = 1;//默认不是举证任务
if (this.isWRJRWB == true)
{
this.cobJZRW.SelectedIndex = 0;
this.cobJZRW.IsEnabled = false;
}
else
{
this.cobJZRW.SelectedIndex = 1;
this.cobJZRW.IsEnabled = true;
}
}
catch (Exception ex)
{
LogAPI.Debug("获取图层数据或者分组数据失败:" + ex);
MessageHelper.Show("获取图层数据或者分组数据失败:" + ex);
}
}
/// <summary>
/// 选择图层路径
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSelectLayerPath_Click(object sender, RoutedEventArgs e)
{
try
{
OpenDataDialog pDialog = new OpenDataDialog();
ISpatialDataObjectFilter pOFilter;
pOFilter = new FilterDatasetsAndLayers();
pDialog.AddFilter(pOFilter, true);
pDialog.Title = "选择添加的数据";
if (this.isWRJRWB)
pDialog.AllowMultiSelect = false;
else
pDialog.AllowMultiSelect = true;
pDialog.RestoreLocation = true;
pDialog.StartLocation = pDialog.FinalLocation;
DialogResult dialogResult = pDialog.ShowDialog();
if (dialogResult == System.Windows.Forms.DialogResult.OK && pDialog.Selection.Count != 0)
{
string layerPath = string.Empty;
string layerName = string.Empty;
foreach (ISpatialDataObject distObj in pDialog.Selection)
{
layerPath += distObj.FullName + ";";
layerName += distObj.Name + ";";
}
LayerDic dic = new LayerDic();
dic.CODE = layerName;
dic.NAME = layerPath;
dic.SpatialDataList = pDialog.Selection;
this.cobLayer.Items.Add(dic);
this.cobLayer.SelectedItem = dic;
}
}
catch (Exception ex)
{
LogAPI.Debug("选择图层失败:" + ex);
MessageHelper.Show("选择图层失败:" + ex);
}
}
/// <summary>
/// 确定
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOK_Click(object sender, RoutedEventArgs e)
{
try
{
if (this.cobLayer.SelectedItem == null)
{
MessageHelper.Show("请先选择图层路径!");
return;
}
MakeTaskPackageModel groupNameModel = null;
if (this.cobLayerGroup.SelectedItem != null)
{
groupNameModel = this.cobLayerGroup.SelectedItem as MakeTaskPackageModel;
}
MakeTaskPackageModel mobiledata = null;
if (groupNameModel != null)
{
mobiledata = new MakeTaskPackageModel();
mobiledata.IsCheck = groupNameModel.IsCheck;
mobiledata.IsSlice = groupNameModel.IsSlice;
mobiledata.FileName = groupNameModel.FileName;
mobiledata.FileAliasName = groupNameModel.FileAliasName;
mobiledata.Type = groupNameModel.Type;
mobiledata.Layer = groupNameModel.Layer;
mobiledata.LayerIndex = groupNameModel.LayerIndex;
mobiledata.ExcState = groupNameModel.ExcState;
mobiledata.ID = groupNameModel.ID;
mobiledata.PID = groupNameModel.PID;
mobiledata.IsLayerGroup = groupNameModel.IsLayerGroup;
}
LayerDic selectmodel = this.cobLayer.SelectedItem as LayerDic;
ILayer grouplayer = null;
List<IRasterLayer> rasterLayerList = new List<IRasterLayer>();
if (selectmodel != null)
{
if (selectmodel.NAME.Contains(";"))
{
string[] layerArr = selectmodel.NAME.Split(';');
for (int i = 0; i < layerArr.Length; i++)
{
string path = layerArr[i];
if (!string.IsNullOrWhiteSpace(path))
{
ISpatialDataObject distObj = selectmodel.SpatialDataList[i];
if (distObj == null)
continue;
//if (groupNameModel != null)
//{
// grouplayer = groupNameModel.Layer as ILayer;
//}
ILayerFactoryHelper m_LayerFactoryHelper = new LayerFactoryHelperClass();
//层厂帮手创建从名字对象层的正确类型返回枚举的层
IEnumLayer pEnumLayer = m_LayerFactoryHelper.CreateLayersFromName((distObj.DatasetName as IName));
ILayer pLayer;
pEnumLayer.Reset();
List<ILayer> layerList = new List<ILayer>();
//通过循环的枚举和添加的每个层
while ((pLayer = pEnumLayer.Next()) != null)
{
layerList.Add(pLayer);
if (pLayer is IRasterLayer)
rasterLayerList.Add(pLayer as IRasterLayer);
}
AddLayer(layerList, mobiledata, i, distObj.FullName);
}
}
if (mobiledata != null)
{
if (rasterLayerList != null && rasterLayerList.Count != 0 && layerArr.Length != 0 && rasterLayerList.Count == layerArr.Length - 1)
{
mobiledata.Type = "瓦片";
mobiledata.Make = "未制作";
mobiledata.Layer = rasterLayerList;
mobiledata.ExcState = ExcStateEnum.Loading;
if (outPutPathCfg != null)
{
mobiledata.OutPath = outPutPathCfg.RootDirectory;
mobiledata.TaskName = outPutPathCfg.TaskName;
mobiledata.CfgFileName = outPutPathCfg.ProfileName;
}
else
{
mobiledata.OutPath = @"Kingoit\phonemap_wydh\projects";
mobiledata.TaskName = "县级数据";
mobiledata.CfgFileName = "layerConfig.xml";
}
}
else
{
mobiledata.Type = "图层组";
mobiledata.Make = "";
mobiledata.ExcState = ExcStateEnum.NoImport;
}
}
if (groupNameModel != null)
this.exportDataList.Remove(groupNameModel);
if (mobiledata != null)
this.exportDataList.Add(mobiledata);
}
else
{
IFeatureLayer featureLayer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName(selectmodel.NAME);
if (featureLayer != null)
{
//if (groupNameModel != null)
//{
// grouplayer = groupNameModel.Layer as ILayer;
//}
List<ILayer> layerList = new List<ILayer>();
layerList.Add(featureLayer as ILayer);
AddLayer(layerList, mobiledata, 0, "");
}
}
}
Refresh?.Invoke();
this.Close();
}
catch (Exception ex)
{
LogAPI.Debug("添加图层失败:" + ex);
MessageHelper.Show("添加图层失败:" + ex);
}
}
private void AddLayer(List<ILayer> layerList, MakeTaskPackageModel groupNameModel, int index, string layerSource)
{
try
{
if (layerList.Count != 0)
{
int layerIndex = 0;
foreach (var item in layerList)
{
List<MakeTaskPackageModel> groupNameList = null;
if (groupNameModel != null)
groupNameList = this.exportDataList.FindAll(x => x.PID == groupNameModel.ID);
if (groupNameList != null && groupNameList.Count != 0)
{
layerIndex = groupNameList.Count;
}
else
{
layerIndex = index;
}
int pid = 0;
int mapGroupIndex = -1;
string mapGroupName = "其他";
if (groupNameModel != null)
{
mapGroupIndex = groupNameModel.LayerIndex;
mapGroupName = groupNameModel.FileAliasName;
pid = groupNameModel.ID;
}
var maxIdModel = 0;
if (this.exportDataList != null && this.exportDataList.Count > 0)
maxIdModel = this.exportDataList.Max(x => x.ID);
maxIdModel++;
MakeTaskPackageModel mobiledata = new MakeTaskPackageModel();
mobiledata.IsCheck = true;
mobiledata.IsSlice = false;
mobiledata.FileName = (item as IDataset).BrowseName;
mobiledata.FileAliasName = item.Name;
mobiledata.Make = "未制作";
mobiledata.LayerIndex = layerIndex;
if (item is IRasterLayer)
{
List<IRasterLayer> rasterList = new List<IRasterLayer>();
rasterList.Add(item as IRasterLayer);
mobiledata.Layer = rasterList;
mobiledata.Type = "瓦片";
}
else
{
mobiledata.Layer = item;
mobiledata.Type = "矢量";
}
mobiledata.MapGroupIndex = mapGroupIndex;
if (this.cobJZRW.SelectedItem.ToString() == "是")
{
mobiledata.Type = "举证任务";
if (mobiledata.FileName == "JCTB" || mobiledata.FileAliasName == "监测图斑")
{
string where = string.Empty;
int sfjzIndex = (item as IFeatureLayer).FeatureClass.FindField("SFJZ");
int rwdcztIndex = (item as IFeatureLayer).FeatureClass.FindField("RWDCZT");
if (sfjzIndex != -1)
{
where = string.Format("SFJZ='1'");
}
if (this.selectedRWDCZTInx == 0 && rwdcztIndex != -1)
where = string.Format("({0} and RWDCZT='已制作')", where);
else if (this.selectedRWDCZTInx == 1 && rwdcztIndex != -1)
where = string.Format("({0} and (RWDCZT is null or RWDCZT=''))", where);
mobiledata.FilterWhere = where;
}
}
if (outPutPathCfg != null)
{
mobiledata.OutPath = outPutPathCfg.RootDirectory;
mobiledata.TaskName = outPutPathCfg.TaskName;
mobiledata.CfgFileName = outPutPathCfg.ProfileName;
}
else
{
mobiledata.OutPath = @"Kingoit\phonemap_wydh\projects";
mobiledata.TaskName = "县级数据";
mobiledata.CfgFileName = "layerConfig.xml";
}
mobiledata.MapGroupName = mapGroupName;
mobiledata.ID = maxIdModel;
mobiledata.PID = pid;
mobiledata.LayerSource = layerSource;
this.exportDataList.Add(mobiledata);
}
}
}
catch (Exception ex)
{
LogAPI.Debug("添加图层失败:" + ex);
MessageHelper.Show("添加图层失败:" + ex);
}
}
/// <summary>
/// 取消
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCancel_Click(object sender, RoutedEventArgs e)
{
try
{
this.Close();
}
catch (Exception ex)
{
LogAPI.Debug("关闭添加列表图层界面失败:" + ex);
MessageHelper.Show("关闭添加列表图层界面失败:" + ex);
}
}
public class LayerDic
{
public string CODE { get; set; }
public string NAME { get; set; }
public List<ISpatialDataObject> SpatialDataList { get; set; }
}
}
}