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.
3652 lines
156 KiB
3652 lines
156 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.Utils; |
|
using KGIS.Framework.Utils.Helper; |
|
using Kingo.Mobile.Shape2KOTool.KoDataBase; |
|
using Kingo.Mobile.Shape2KOTool.XSDClass; |
|
using Kingo.Plugin.MakeTaskPackage.Entity; |
|
using Kingo.Plugin.MakeTaskPackage.Common; |
|
using KGIS.Framework.Maps; |
|
using KGIS.Framework.Utils.Dialog; |
|
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using ESRI.ArcGIS.Geometry; |
|
using Kingo.Plugin.MakeTaskPackage.Model; |
|
using System.Threading; |
|
using System.Windows.Forms; |
|
using System.Data.SQLite; |
|
using System.Data; |
|
using System.Data.OleDb; |
|
using System.IO; |
|
using KGIS.Framework.OpenData.Control; |
|
using KGIS.Framework.OpenData.Filter; |
|
using KGIS.Framework.OpenData.InterFace; |
|
using ESRI.ArcGIS.esriSystem; |
|
using System.Xml; |
|
using Raster2KOTiles; |
|
using System.Diagnostics; |
|
using Kingo.PluginServiceInterface; |
|
using UIShell.OSGi; |
|
using KGIS.Framework.DBOperator; |
|
using KGIS.Framework.Utils.Utility; |
|
using KGIS.Framework.Platform; |
|
using DevExpress.Xpf.Grid; |
|
using DevExpress.Data.TreeList; |
|
using static Kingo.Plugin.MakeTaskPackage.Model.MakeTaskPackageModel; |
|
using ESRI.ArcGIS.DataSourcesFile; |
|
using ESRI.ArcGIS.DataSourcesGDB; |
|
using ESRI.ArcGIS.DataSourcesRaster; |
|
using System.Web.Script.Serialization; |
|
using Newtonsoft.Json; |
|
using System.Runtime.InteropServices; |
|
using KGIS.Framework.ThreadManager; |
|
using System.ComponentModel; |
|
|
|
namespace Kingo.Plugin.MakeTaskPackage.View |
|
{ |
|
/// <summary> |
|
/// FrmMakeTaskPackage.xaml 的交互逻辑 |
|
/// </summary> |
|
public partial class FrmMakeTaskPackage : BaseWindow |
|
{ |
|
|
|
private IFeatureClass pCustomFC = null; |
|
private bool isCustom = false; |
|
private List<string> selectedXzq = new List<string>(); |
|
private int koIndex = 0; |
|
private int createCount = 0; |
|
private List<KODBFeatureLayer> lstPLayers = null; |
|
private List<MakeTaskPackageModel> exportDataList = null; |
|
private List<MakeTaskPackageModel> rasterDataList = null; |
|
private string exportFolder = string.Empty; |
|
private int currentIndex = 0; |
|
private string keyField { get; set; } |
|
private string WhereStr { get; set; } |
|
private double maxDis = 0; |
|
private string tilesType = "png"; |
|
private int tileSize = 512; |
|
private int sectionlevel = 7; |
|
private int threadNum = 3; |
|
private bool convertWebMercator = false; |
|
|
|
List<Thread> openThreads = new List<Thread>(); |
|
|
|
private LayerConfig cfg_JZRW = new LayerConfig(); |
|
private LayerConfig cfg_OneMap = new LayerConfig(); |
|
|
|
private bool exportSuccess = true; |
|
|
|
private string errorMsg = string.Empty; |
|
|
|
private string customLayerPath = string.Empty; |
|
|
|
private string customLayerName = string.Empty; |
|
|
|
private Dictionary<string, OSGeo.OGR.Geometry> geometrys = new Dictionary<string, OSGeo.OGR.Geometry>(); |
|
|
|
private double distance = 100.0; |
|
|
|
private OSGeo.OGR.Layer toplayer = null; |
|
|
|
private List<MakeTaskPackageModel> delModelList = null; |
|
|
|
private IBundle bundle = null; |
|
|
|
private TaskPackagePathConfig taskPackagePathConfig = null; |
|
|
|
private OutputPath outputPathCfg = null; |
|
private FrmXZQSelected frmXZQSelected = null; |
|
|
|
private int selectedRWDCZTIndex = 1; |
|
public FrmMakeTaskPackage() |
|
{ |
|
InitializeComponent(); |
|
|
|
this.Closing += FrmMobileDataExport_Closing; |
|
} |
|
|
|
|
|
private void btnCancel_Click(object sender, RoutedEventArgs e) |
|
{ |
|
this.Close(); |
|
} |
|
|
|
private void rdoAll_Click(object sender, RoutedEventArgs e) |
|
{ |
|
this.txtExtentData.Text = string.Empty; |
|
this.txtExtentData.IsEnabled = false; |
|
this.btnSelectExtentData.IsEnabled = false; |
|
} |
|
|
|
private void RdoCustom_Click(object sender, RoutedEventArgs e) |
|
{ |
|
this.txtExtentData.IsEnabled = true; |
|
this.btnSelectExtentData.IsEnabled = true; |
|
} |
|
|
|
private void BtnExport_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
if (this.exportDataList == null || this.exportDataList.Count == 0) |
|
{ |
|
MessageHelper.Show("未查询到需要导出的数据,请检查数据是否存在!"); |
|
return; |
|
} |
|
|
|
if (string.IsNullOrWhiteSpace(this.txtExportPath.Text)) |
|
{ |
|
MessageHelper.Show("请先选择导出位置!"); |
|
return; |
|
} |
|
if (this.rdoCustom.IsChecked == true) |
|
{ |
|
if (selectedXzq == null || selectedXzq.Count <= 0) |
|
{ |
|
MessageHelper.Show("请导入范围或者选着全部"); |
|
return; |
|
} |
|
else |
|
isCustom = true; |
|
} |
|
else |
|
{ |
|
isCustom = false; |
|
} |
|
this.btnExport.IsEnabled = false; |
|
if (!Isint(this.txtTilesize.Text, out int titlesize)) |
|
{ |
|
MessageHelper.Show("瓦片尺寸必须为整数"); |
|
return; |
|
} |
|
if (!Isint(this.txtSectionlevel.Text, out int sectionlevel)) |
|
{ |
|
MessageHelper.Show("切片级别必须为整数"); |
|
return; |
|
} |
|
if (sectionlevel > 12) |
|
{ |
|
MessageHelper.Show("切片级别不能大于12"); |
|
return; |
|
} |
|
if (!Isint(this.txtThreadnum.Text, out int threadnum)) |
|
{ |
|
MessageHelper.Show("线程数必须为整数"); |
|
return; |
|
} |
|
if (threadnum > 10) |
|
{ |
|
MessageHelper.Show("线程数不能大于10"); |
|
return; |
|
} |
|
if (!double.TryParse(this.txtBufferdistance.Text, out double bufferdistance)) |
|
{ |
|
MessageHelper.Show("缓冲距离必须为数字"); |
|
return; |
|
} |
|
|
|
exportFolder = this.txtExportPath.Text + "\\" + DateTime.Now.ToString("yyyyMMddHHmmss"); |
|
if (!Directory.Exists(exportFolder)) |
|
Directory.CreateDirectory(exportFolder); |
|
|
|
if (this.comTieletype.SelectedValue != null) |
|
this.tilesType = this.comTieletype.SelectedValue.ToString().ToLower(); |
|
this.tileSize = titlesize; |
|
this.sectionlevel = sectionlevel; |
|
this.threadNum = threadnum; |
|
|
|
if (this.checkWebMercator.IsChecked == true) |
|
this.convertWebMercator = true; |
|
|
|
this.selectedRWDCZTIndex = this.comRWDCZT.SelectedIndex; |
|
|
|
string msg = CheckFieldValue(); |
|
if (!string.IsNullOrWhiteSpace(msg)) |
|
{ |
|
MessageHelper.Show(msg); |
|
this.btnExport.IsEnabled = true; |
|
return; |
|
} |
|
|
|
ExportDataByGeometry(); |
|
if (this.rdoWYDHRWB.IsChecked == true) |
|
ExportQueryDB(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("数据导出失败:" + ex); |
|
MessageHelper.Show("数据导出失败:" + ex); |
|
} |
|
} |
|
|
|
|
|
private bool Isint(string str, out int result) |
|
{ |
|
return int.TryParse(str, out result); |
|
} |
|
|
|
public void ExportKO() |
|
{ |
|
try |
|
{ |
|
lstPLayers = new List<KODBFeatureLayer>(); |
|
List<MakeTaskPackageModel> exportDatalist = this.rwzzTreeList.ItemsSource as List<MakeTaskPackageModel>; |
|
|
|
for (int i = 0; i < exportDatalist.Count; i++) |
|
{ |
|
if (exportDatalist[i].Type == "图层组") |
|
{ |
|
continue; |
|
} |
|
|
|
if (!exportDatalist[i].IsCheck) |
|
{ |
|
continue; |
|
} |
|
if (exportDatalist[i].Layer is List<IRasterLayer>) |
|
{ |
|
List<IRasterLayer> imgsList = exportDatalist[i].Layer as List<IRasterLayer>; |
|
if (imgsList == null || imgsList.Count <= 0) |
|
continue; |
|
|
|
MakeTaskPackageModel rasterDataExportModel = exportDatalist[i] as MakeTaskPackageModel; |
|
|
|
if (isCustom && geometrys != null && geometrys.Count != 0) |
|
{ |
|
for (int j = 0; j < geometrys.Count; j++) |
|
{ |
|
string packName = geometrys.ElementAt(j).Key; |
|
rasterDataExportModel.CustomPackName = packName; |
|
// rasterDataExportModel.CurrentIndex = 0; |
|
//ThreadPool.QueueUserWorkItem(new WaitCallback(CreateKotilesImg), rasterDataExportModel); |
|
ThreadManager.Instance.QueueUserWorkItem(new WaitCallback(CreateKotilesImg), rasterDataExportModel); |
|
createCount++; |
|
|
|
} |
|
} |
|
else |
|
{ |
|
|
|
//rasterDataExportModel.CurrentIndex = 0; |
|
//ThreadPool.QueueUserWorkItem(new WaitCallback(CreateKotilesImg), rasterDataExportModel); |
|
ThreadManager.Instance.QueueUserWorkItem(new WaitCallback(CreateKotilesImg), rasterDataExportModel); |
|
createCount++; |
|
} |
|
} |
|
else |
|
{ |
|
MakeTaskPackageModel shpDataExportModel = exportDatalist[i] as MakeTaskPackageModel; |
|
if (shpDataExportModel == null) continue; |
|
if (shpDataExportModel.Type == "瓦片") |
|
{ |
|
shpDataExportModel.GridRowIndex = i; |
|
mxdIndex = 0; |
|
MxdParameters mxdParameters = new MxdParameters() |
|
{ |
|
SaveFileName = shpDataExportModel.FileName, |
|
ThreadNum = 3, |
|
TileSize = Convert.ToInt32(this.txtTilesize.Text), |
|
MinLevel = Convert.ToInt32(this.txtSectionlevel.Text), |
|
MaxScale = Convert.ToInt32(this.txtMaxScale.Text), |
|
MinScale = Convert.ToInt32(this.comMinScale.SelectedItem) |
|
}; |
|
shpDataExportModel.MxdCutParameters = mxdParameters; |
|
Thread threadKotiles = new Thread(new ParameterizedThreadStart(ExportKotilesParame)); |
|
threadKotiles.SetApartmentState(ApartmentState.STA); |
|
threadKotiles.IsBackground = true; |
|
threadKotiles.Start(shpDataExportModel); |
|
createCount++; |
|
} |
|
else |
|
{ |
|
|
|
if (isCustom && selectedXzq != null && selectedXzq.Count != 0) |
|
{ |
|
for (int j = 0; j < selectedXzq.Count; j++) |
|
{ |
|
shpDataExportModel.CustomPackName = selectedXzq[j]; |
|
ThreadManager.Instance.QueueUserWorkItem(new WaitCallback(ExportVectorKoThread), shpDataExportModel); |
|
createCount++; |
|
} |
|
} |
|
else |
|
{ |
|
ThreadManager.Instance.QueueUserWorkItem(new WaitCallback(ExportVectorKoThread), shpDataExportModel); |
|
createCount++; |
|
} |
|
|
|
} |
|
} |
|
|
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("数据导出失败:" + ex); |
|
} |
|
} |
|
|
|
private void ExportDataByGeometry() |
|
{ |
|
try |
|
{ |
|
if (this.rdoWYDHRWB.IsChecked == true) |
|
ExportKO(); |
|
else |
|
{ |
|
List<MakeTaskPackageModel> exportDatalist = this.rwzzTreeList.ItemsSource as List<MakeTaskPackageModel>; |
|
for (int i = 0; i < exportDatalist.Count; i++) |
|
{ |
|
if (exportDatalist[i].Type == "图层组") |
|
{ |
|
continue; |
|
} |
|
|
|
if (!exportDatalist[i].IsCheck) |
|
{ |
|
continue; |
|
} |
|
|
|
MakeTaskPackageModel shpDataExportModel = exportDatalist[i] as MakeTaskPackageModel; |
|
ExportWRJ(shpDataExportModel); |
|
} |
|
} |
|
if (createCount == 0) |
|
{ |
|
MessageHelper.Show("导出成功"); |
|
this.btnExport.IsEnabled = true; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("数据导出失败:" + ex); |
|
} |
|
} |
|
|
|
public ILayer FindLayer(string mxdPath, string layerName) |
|
{ |
|
IMapDocument pMapDocument = null; |
|
try |
|
{ |
|
if (!File.Exists(mxdPath)) return null; |
|
pMapDocument = new MapDocumentClass(); |
|
pMapDocument.Open(mxdPath); |
|
IMap map = pMapDocument.get_Map(0); |
|
if (map == null || map.LayerCount == 0) return null; |
|
ILayer layer = null; |
|
for (int i = 0; i < map.LayerCount; i++) |
|
{ |
|
layer = GetLayer(map.get_Layer(i), layerName); |
|
if (layer != null) |
|
|
|
break; |
|
|
|
} |
|
return layer; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
return null; |
|
} |
|
finally |
|
{ |
|
if (pMapDocument != null) |
|
pMapDocument.Close(); |
|
} |
|
} |
|
|
|
private ILayer GetLayer(ILayer layer, string layername) |
|
{ |
|
try |
|
{ |
|
if (layer is IGroupLayer) |
|
{ |
|
IGroupLayer group = layer as IGroupLayer; |
|
ILayerGeneralProperties lp = group as ILayerGeneralProperties; |
|
ICompositeLayer pComLayer = layer as ICompositeLayer; |
|
for (int j = 0; j < pComLayer.Count; j++) |
|
{ |
|
ILayer lay = GetLayer(pComLayer.get_Layer(j), layername); |
|
if (lay != null) |
|
return lay; |
|
} |
|
} |
|
|
|
if (layer.Name.ToUpper().Equals(layername.ToUpper())) |
|
return layer; |
|
return null; |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
} |
|
|
|
private void ExportVectorKoThread(object obj) |
|
{ |
|
string layerName = string.Empty; |
|
try |
|
{ |
|
MakeTaskPackageModel model = obj as MakeTaskPackageModel; |
|
|
|
if (model.Type == "图层组") |
|
return; |
|
string newFilePath = System.IO.Path.Combine(exportFolder, model.OutPath); |
|
string packName = "Data"; |
|
if (!string.IsNullOrWhiteSpace(model.TaskName)) |
|
{ |
|
packName = model.TaskName; |
|
} |
|
if (isCustom) |
|
{ |
|
if (!Directory.Exists(newFilePath)) |
|
Directory.CreateDirectory(newFilePath); |
|
packName = model.CustomPackName; |
|
} |
|
newFilePath = System.IO.Path.Combine(newFilePath, packName, "Source"); |
|
|
|
if (!System.IO.Directory.Exists(newFilePath)) |
|
System.IO.Directory.CreateDirectory(newFilePath); |
|
|
|
int layerIndex = exportDataList.IndexOf(model); |
|
if (layerIndex == -1) return; |
|
|
|
CreateConfig(((model.Layer as IFeatureLayer) as IGeoDataset).SpatialReference.FactoryCode); |
|
string strLayerPath = string.Format("\"" + model.LayerSource + "\""); |
|
string strLayerName = string.Format("\"" + model.FileName + "\""); |
|
string strOutputPath = string.Format("\"" + newFilePath + "\""); |
|
string strWhere = string.Format("\"" + model.FilterWhere + "\""); |
|
|
|
string customLayerPath = string.Format("\"" + this.customLayerPath + "\""); |
|
string customLayerName = string.Format("\"" + this.customLayerName + "\""); |
|
string customstrWhere = string.Format("\"" + this.WhereStr + "\""); |
|
string customKeyValue = string.Format("\"" + packName + "\""); |
|
|
|
var psi = new ProcessStartInfo("Kingo.Plugin.ShapeToKOApp.exe", string.Format("{0} {1} {2} {3} {4} {5} {6} {7} ", strLayerPath, strLayerName, strOutputPath, strWhere, customLayerPath, customLayerName, customstrWhere, customKeyValue)); |
|
|
|
string a = psi.Arguments; |
|
psi.UseShellExecute = false; |
|
psi.CreateNoWindow = true; |
|
psi.RedirectStandardError = true; |
|
psi.RedirectStandardInput = true; |
|
psi.RedirectStandardOutput = true; |
|
|
|
|
|
var pes = Process.Start(psi); |
|
|
|
var sout = pes.StandardOutput; |
|
while (!sout.EndOfStream) |
|
{ |
|
var line = sout.ReadLine(); |
|
if (string.IsNullOrEmpty(line)) continue; |
|
|
|
if (line.ToString().Contains(";")) |
|
{ |
|
string[] strArr = line.ToString().Split(';'); |
|
if (strArr.Length == 2) |
|
{ |
|
this.exportDataList[layerIndex].CurrNum = Convert.ToInt32(strArr[0]); |
|
this.exportDataList[layerIndex].FcCount = Convert.ToInt32(strArr[1]); |
|
|
|
} |
|
else if (strArr.Length == 3) |
|
{ |
|
this.exportDataList[layerIndex].Make = strArr[0]; |
|
this.exportDataList[layerIndex].CurrNum = Convert.ToInt32(strArr[1]); |
|
this.exportDataList[layerIndex].FcCount = Convert.ToInt32(strArr[2]); |
|
} |
|
else |
|
{ |
|
this.exportDataList[layerIndex].FcCount = 100; |
|
this.exportDataList[layerIndex].CurrNum = 100; |
|
} |
|
} |
|
else |
|
{ |
|
this.exportDataList[layerIndex].Make = line.ToString(); |
|
} |
|
} |
|
|
|
pes.WaitForExit(); |
|
pes.Close(); |
|
|
|
this.Dispatcher.Invoke(new MethodInvoker(() => |
|
{ |
|
this.exportDataList[layerIndex].OutFilePath = System.IO.Path.Combine(model.OutPath, packName, "Source", model.FileName + ".kotiles"); |
|
createCount--; |
|
if (createCount == 0) |
|
{ |
|
|
|
FunctionOutXml outxml = new FunctionOutXml(); |
|
outxml.SaveConfig(exportDataList, isCustom, exportFolder, selectedXzq); |
|
if (this.exportSuccess == true) |
|
{ |
|
List<MakeTaskPackageModel> jzrwModelList = exportDataList.FindAll(x => x.Type.Contains("举证任务") && (x.FileName == "JCTB" || x.FileName == "监测图斑")); |
|
|
|
if (jzrwModelList != null && jzrwModelList.Count != 0) |
|
{ |
|
IQueryFilter pQuery = new QueryFilterClass(); |
|
foreach (MakeTaskPackageModel item in jzrwModelList) |
|
{ |
|
|
|
if (!item.Make.Contains("完成")) |
|
continue; |
|
|
|
IFeatureLayer featureLayer = item.Layer as IFeatureLayer; |
|
if (featureLayer != null && featureLayer.FeatureClass != null && !string.IsNullOrWhiteSpace(item.FilterWhere)) |
|
{ |
|
pQuery.WhereClause = item.FilterWhere; |
|
|
|
IFeatureCursor featureCursor = featureLayer.FeatureClass.Update(pQuery, true); |
|
IFeature feature = null; |
|
int dcztIdx = featureLayer.FeatureClass.FindField("RWDCZT");//任务导出状态,数据导出成功后,更新导出状态为已制作 |
|
int wyzzsjIdx = featureLayer.FeatureClass.FindField("WYZZSJ");//外业制作时间 |
|
DateTime dateTime = DateTime.Now; |
|
|
|
while ((feature = featureCursor.NextFeature()) != null) |
|
{ |
|
if (dcztIdx != -1) |
|
feature.Value[dcztIdx] = "已制作"; |
|
if (wyzzsjIdx != -1) |
|
feature.Value[wyzzsjIdx] = dateTime; |
|
featureCursor.UpdateFeature(feature); |
|
} |
|
featureCursor.Flush(); |
|
Thread.Sleep(3000); |
|
} |
|
} |
|
} |
|
|
|
MessageHelper.Show("导出成功"); |
|
|
|
} |
|
else |
|
{ |
|
MessageHelper.Show("导出失败:\r\n" + errorMsg); |
|
} |
|
this.btnExport.IsEnabled = true; |
|
} |
|
})); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("矢量数据导入KO失败:" + ex); |
|
this.exportSuccess = false; |
|
errorMsg += string.Format("{0}矢量数据导入KO失败:{1}\r\n", layerName, ex.Message); |
|
createCount--; |
|
} |
|
|
|
} |
|
|
|
private void ExportVectorKoThread1(object obj) |
|
{ |
|
string layerName = string.Empty; |
|
IWorkspaceFactory pWSFactory = null; |
|
try |
|
{ |
|
MakeTaskPackageModel model = obj as MakeTaskPackageModel; |
|
IGeometry geometryNow = null; |
|
|
|
if (model.Type == "图层组") |
|
return; |
|
string newFilePath = System.IO.Path.Combine(exportFolder, model.OutPath); |
|
string packName = "Data"; |
|
if (!string.IsNullOrWhiteSpace(model.TaskName)) |
|
{ |
|
packName = model.TaskName; |
|
} |
|
if (isCustom) |
|
{ |
|
packName = selectedXzq[model.CurrentIndex]; |
|
if (!Directory.Exists(newFilePath)) |
|
Directory.CreateDirectory(newFilePath); |
|
geometryNow = XzqGeometry(selectedXzq[model.CurrentIndex], keyField); |
|
} |
|
newFilePath = System.IO.Path.Combine(newFilePath, packName, "Source"); |
|
|
|
layerName = model.FileAliasName; |
|
if (!System.IO.Directory.Exists(newFilePath)) |
|
System.IO.Directory.CreateDirectory(newFilePath); |
|
|
|
int layerIndex = exportDataList.IndexOf(model); |
|
if (layerIndex == -1) return; |
|
|
|
|
|
KODBFeatureLayer pLayer = null; |
|
pLayer = new KODBFeatureLayer(); |
|
pLayer.LayerIndex = model.LayerIndex; |
|
ILayer featureLayer = null; |
|
|
|
if (!string.IsNullOrWhiteSpace(model.LayerSource)) |
|
{ |
|
string filename = System.IO.Path.GetDirectoryName(model.LayerSource); |
|
|
|
if (model.LayerSource.ToLower().Contains(".shp")) |
|
{ |
|
pWSFactory = new ShapefileWorkspaceFactoryClass(); |
|
} |
|
else if (model.LayerSource.ToLower().Contains(".gdb")) |
|
{ |
|
pWSFactory = new FileGDBWorkspaceFactory(); |
|
string fileExtension = System.IO.Path.GetExtension(filename); |
|
if (string.IsNullOrWhiteSpace(fileExtension)) |
|
{ |
|
filename = System.IO.Path.GetDirectoryName(filename); |
|
} |
|
} |
|
else if (model.LayerSource.ToLower().Contains(".mdb")) |
|
{ |
|
pWSFactory = new AccessWorkspaceFactory(); |
|
string fileExtension = System.IO.Path.GetExtension(filename); |
|
if (string.IsNullOrWhiteSpace(fileExtension)) |
|
{ |
|
filename = System.IO.Path.GetDirectoryName(filename); |
|
} |
|
} |
|
|
|
if (model.LayerSource.ToLower().Contains(".mxd")) |
|
{ |
|
featureLayer = FindLayer(model.LayerSource, (model.Layer as ILayer).Name); |
|
} |
|
else if (model.LayerSource.ToLower().Contains(".tif") || model.LayerSource.ToLower().Contains(".tiff") || model.LayerSource.ToLower().Contains(".img")) |
|
{ |
|
string Path = System.IO.Path.GetDirectoryName(model.LayerSource); //获取文件路径 |
|
string strFileName = System.IO.Path.GetFileName(model.LayerSource); //获取栅格文件名 |
|
IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactory(); |
|
IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(Path, 0); |
|
IRasterWorkspace pRasterWorkspace = pWorkspace as IRasterWorkspace; |
|
IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(strFileName); |
|
IRaster pRaster = pRasterDataset.CreateDefaultRaster(); |
|
IRasterLayer pRasterLayer = new RasterLayer(); |
|
pRasterLayer.CreateFromRaster(pRaster); |
|
featureLayer = pRasterLayer as ILayer; |
|
} |
|
else |
|
{ |
|
|
|
IWorkspace pWorkspace = pWSFactory.OpenFromFile(filename, 0); |
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(pWSFactory); |
|
pWSFactory = null; |
|
IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; |
|
IFeatureClass pSourceFeatureClass = pFeatureWorkspace.OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(model.LayerSource)); |
|
if (pSourceFeatureClass != null) |
|
{ |
|
IFeatureLayer layer = new FeatureLayerClass(); |
|
layer.FeatureClass = pSourceFeatureClass; |
|
featureLayer = layer; |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
string path = ((model.Layer as IFeatureLayer).FeatureClass as FeatureClass).Workspace.PathName; |
|
KGIS.Framework.AE.IWorkspaceAPI wsAPI = new KGIS.Framework.AE.WorkspaceAPI(path, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile); |
|
KGIS.Framework.AE.IFeatureClassAPI fcAPI = wsAPI.OpenFeatureClass(((model.Layer as IFeatureLayer).FeatureClass as FeatureClass).BrowseName); |
|
featureLayer = new FeatureLayerClass() { FeatureClass = fcAPI.FeatureClass }; |
|
} |
|
|
|
if (featureLayer == null || (featureLayer as IFeatureLayer).FeatureClass == null) |
|
{ |
|
this.Dispatcher.Invoke(new MethodInvoker(() => |
|
{ |
|
this.exportDataList[layerIndex].Make = "生成KO文件失败,获取图层信息异常"; |
|
this.exportDataList[layerIndex].CurrNum = 0; |
|
})); |
|
return; |
|
} |
|
|
|
ISpatialDataSource pSpatialDataSource = new ArcFeatureDataSource(featureLayer as IFeatureLayer, geometryNow, model.FilterWhere); |
|
// pSpatialDataSource.DataSourcePath = model.LayerSource; |
|
pLayer.FieldInfos = pSpatialDataSource.Fields; |
|
|
|
//设置样式 |
|
pLayer.Render = SymbolConvert.Instance().GetRenderer((featureLayer as IGeoFeatureLayer).Renderer); |
|
pLayer.ItemInfoRender = SymbolConvert.Instance().GetItemInfoRenderer((featureLayer as IGeoFeatureLayer).Renderer); |
|
//最小比例尺 |
|
pLayer.MinScale = (int)featureLayer.MinimumScale; |
|
//最大比例尺 |
|
pLayer.MaxScale = (int)featureLayer.MaximumScale; |
|
|
|
IGeoFeatureLayer geolayer = featureLayer as IGeoFeatureLayer; |
|
if (geolayer != null) |
|
{ |
|
|
|
IElementCollection ec; |
|
IAnnotateLayerProperties pAnnoLayerProps; |
|
geolayer.AnnotationProperties.QueryItem(0, out pAnnoLayerProps, out ec, out ec); |
|
|
|
|
|
ILabelEngineLayerProperties pLabelEngineLayerProps = (ILabelEngineLayerProperties)pAnnoLayerProps; |
|
if (pLabelEngineLayerProps != null) |
|
{ |
|
if (!string.IsNullOrWhiteSpace(pLabelEngineLayerProps.Expression) && geolayer.DisplayAnnotation) |
|
{ |
|
pLayer.LayerLabelName = pLabelEngineLayerProps.Expression.Substring(1, pLabelEngineLayerProps.Expression.Length - 2); |
|
} |
|
else |
|
{ |
|
|
|
pLayer.LayerLabelName = ""; |
|
} |
|
} |
|
} |
|
|
|
//设置显示字段 |
|
pLayer.DisplayField = (featureLayer as IFeatureLayer).DisplayField; |
|
LabelStyleConvert styleConvert = new LabelStyleConvert(); |
|
List<LabelingInfo> labelInfo = styleConvert.EsriLabelToCustomLabels((featureLayer as IGeoFeatureLayer).AnnotationProperties); |
|
if (labelInfo != null && labelInfo.Count > 0) |
|
pLayer.LabelingInfo = labelInfo[0]; |
|
//设置labelinginfo |
|
pLayer.EncryptData = true; |
|
pLayer.WKID = (featureLayer as IGeoDataset).SpatialReference.FactoryCode; |
|
|
|
CreateConfig(pLayer.WKID); |
|
|
|
string fileName = (featureLayer as IDataset).BrowseName; |
|
pLayer.OutputFileName = newFilePath + "\\" + fileName + ".ko"; |
|
pLayer.SpatialDataSource = pSpatialDataSource; |
|
|
|
LayerComm layerComm = new LayerComm(); |
|
pLayer.ItemInfo = layerComm.FeatureLayerToEntity(featureLayer as IFeatureLayer); |
|
|
|
if (pLayer.Render is Kingo.Mobile.Shape2KOTool.XSDClass.SimpleRenderer) |
|
pLayer.FeatureSymbol = (pLayer.Render as Kingo.Mobile.Shape2KOTool.XSDClass.SimpleRenderer).Symbol; |
|
else if (pLayer.Render is Kingo.Mobile.Shape2KOTool.XSDClass.UniqueValueRenderer) |
|
{ |
|
Kingo.Mobile.Shape2KOTool.XSDClass.UniqueValueRenderer uniqueValueRander = pLayer.Render as Kingo.Mobile.Shape2KOTool.XSDClass.UniqueValueRenderer; |
|
if (uniqueValueRander != null) |
|
pLayer.FeatureSymbol = uniqueValueRander.DefaultSymbol; |
|
} |
|
pLayer.Tag = model; |
|
DateTime dt1 = DateTime.Now; |
|
pLayer.Report += (s, c) => |
|
{ |
|
if (pLayer == null) return; |
|
string start = string.Format("正在处理{0},共{1}条记录,", featureLayer.Name, pLayer.SpatialDataSource.RecordCount); |
|
this.Dispatcher.Invoke(new MethodInvoker(() => |
|
{ |
|
if (s == "插入数据完成!" || c == -1) |
|
{ |
|
DateTime dt3 = DateTime.Now; |
|
if (c == -1) |
|
{ |
|
this.exportDataList[layerIndex].Make = s; |
|
} |
|
else |
|
{ |
|
|
|
this.exportDataList[layerIndex].Make = "完成,共用时" + dt3.Subtract(dt1).TotalSeconds.ToString("0.0") + "秒"; |
|
} |
|
if (pLayer.SpatialDataSource.RecordCount == 0) |
|
{ |
|
this.exportDataList[layerIndex].FcCount = 100; |
|
this.exportDataList[layerIndex].CurrNum = 100; |
|
} |
|
else |
|
{ |
|
this.exportDataList[layerIndex].FcCount = pLayer.SpatialDataSource.RecordCount; |
|
this.exportDataList[layerIndex].CurrNum = pLayer.SpatialDataSource.RecordCount; |
|
} |
|
|
|
|
|
//bool isChecked = this.exportDataList[layerIndex].IsSlice; |
|
//if (isChecked) |
|
// ExportKotilesByKo(pLayer.Tag as MakeTaskPackageModel, layerIndex); |
|
string layerFileName = exportDataList[layerIndex].FileName; |
|
if (isCustom) |
|
{ |
|
if (s == "数据已全部加密成功!") |
|
{ |
|
koIndex++; |
|
} |
|
|
|
MakeTaskPackageModel customModel = pLayer.Tag as MakeTaskPackageModel; |
|
customModel.CurrentIndex = customModel.CurrentIndex + 1; |
|
|
|
if (customModel.CurrentIndex > selectedXzq.Count) return; |
|
if (customModel.CurrentIndex == selectedXzq.Count) |
|
{ |
|
exportDataList[layerIndex].OutFilePath = System.IO.Path.Combine(this.exportDataList[layerIndex].OutPath, packName, "Source", layerFileName + ".ko"); |
|
createCount--; |
|
|
|
if (createCount == 0) |
|
{ |
|
FunctionOutXml outxml = new FunctionOutXml(); |
|
outxml.SaveConfig(exportDataList, isCustom, exportFolder, selectedXzq); |
|
if (this.exportSuccess == true) |
|
{ |
|
MessageHelper.Show("导出成功"); |
|
} |
|
else |
|
{ |
|
MessageHelper.Show("导出失败:\r\n" + errorMsg); |
|
} |
|
this.btnExport.IsEnabled = true; |
|
} |
|
return; |
|
} |
|
// pLayer.Tag = customModel; |
|
ExportVectorKoThread(customModel); |
|
} |
|
else |
|
{ |
|
exportDataList[layerIndex].OutFilePath = System.IO.Path.Combine(this.exportDataList[layerIndex].OutPath, packName, "Source", layerFileName + ".ko"); |
|
createCount--; |
|
if (createCount == 0) |
|
{ |
|
FunctionOutXml outxml = new FunctionOutXml(); |
|
outxml.SaveConfig(exportDataList, isCustom, exportFolder, selectedXzq); |
|
if (this.exportSuccess == true) |
|
{ |
|
MessageHelper.Show("导出成功"); |
|
} |
|
else |
|
{ |
|
MessageHelper.Show("导出失败:\r\n" + errorMsg); |
|
} |
|
this.btnExport.IsEnabled = true; |
|
} |
|
} |
|
//AddTBMJFieldToKOFDT(pLayer); |
|
if (pLayer != null) |
|
pLayer.Dispose(); |
|
pLayer = null; |
|
GC.Collect(); |
|
} |
|
else |
|
{ |
|
this.exportDataList[layerIndex].Make = s; |
|
this.exportDataList[layerIndex].FcCount = pLayer.SpatialDataSource.RecordCount; |
|
this.exportDataList[layerIndex].CurrNum = c; |
|
} |
|
})); |
|
}; |
|
lstPLayers.Add(pLayer); |
|
pLayer.CreateLayerUdp(); |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("矢量数据导入KO失败:" + ex); |
|
this.exportSuccess = false; |
|
errorMsg += string.Format("{0}矢量数据导入KO失败:{1}\r\n", layerName, ex.Message); |
|
createCount--; |
|
} |
|
finally |
|
{ |
|
if(pWSFactory!=null) |
|
Marshal.ReleaseComObject(pWSFactory); |
|
} |
|
} |
|
|
|
int count = 0; |
|
private void ExportWRJ(MakeTaskPackageModel model) |
|
|
|
{ |
|
try |
|
{ |
|
IGeometry geometryNow = null; |
|
|
|
if (model.Type == "图层组" || model.Layer == null) |
|
return; |
|
|
|
int layerIndex = exportDataList.IndexOf(model); |
|
if (layerIndex == -1) return; |
|
|
|
IFeatureLayer pFeatureLayer = model.Layer as IFeatureLayer; |
|
if (pFeatureLayer == null || pFeatureLayer.FeatureClass == null) |
|
return; |
|
|
|
int featureCount = 0; |
|
Dictionary<string, IGeometry> geoDic = new Dictionary<string, IGeometry>(); |
|
if (isCustom) |
|
{ |
|
for (int i = 0; i < selectedXzq.Count; i++) |
|
{ |
|
string packName = selectedXzq[i]; |
|
geometryNow = XzqGeometry(selectedXzq[i], keyField); |
|
|
|
if (!geoDic.ContainsKey(packName) && geometryNow != null) |
|
{ |
|
geoDic.Add(packName, geometryNow); |
|
|
|
IQueryFilter pSpatialFilter = null; |
|
if (geometryNow != null) |
|
{ |
|
pSpatialFilter = new SpatialFilterClass() { Geometry = geometryNow, GeometryField = pFeatureLayer.FeatureClass.ShapeFieldName, SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects, WhereClause = (pFeatureLayer as IFeatureLayerDefinition).DefinitionExpression }; |
|
featureCount += pFeatureLayer.FeatureClass.FeatureCount(pSpatialFilter); |
|
} |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
featureCount = pFeatureLayer.FeatureClass.FeatureCount(null); |
|
} |
|
|
|
DateTime dt1 = DateTime.Now; |
|
if (geoDic.Count != 0) |
|
{ |
|
foreach (var item in geoDic) |
|
{ |
|
OutPutJson(model, pFeatureLayer, item.Value, featureCount, item.Key); |
|
} |
|
} |
|
else |
|
{ |
|
OutPutJson(model, pFeatureLayer, null, featureCount); |
|
} |
|
|
|
DateTime dt3 = DateTime.Now; |
|
this.exportDataList[layerIndex].Make = "导出完成,共用时" + dt3.Subtract(dt1).TotalSeconds.ToString("0.0") + "秒"; |
|
this.exportDataList[layerIndex].FcCount = featureCount; |
|
this.exportDataList[layerIndex].CurrNum = featureCount; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("导出无人机任务包失败:" + ex); |
|
} |
|
} |
|
|
|
private void OutPutJson(MakeTaskPackageModel model, IFeatureLayer pFeatureLayer, IGeometry geometry, int featureCount,string packName = "") |
|
{ |
|
try |
|
{ |
|
string newFilePath = exportFolder; |
|
if (!System.IO.Directory.Exists(newFilePath)) |
|
{ |
|
System.IO.Directory.CreateDirectory(newFilePath); |
|
} |
|
|
|
|
|
string fileName = "uavTask.uts"; |
|
if (geometry != null) |
|
fileName = string.Format("uavTask{0}.uts", packName); |
|
|
|
newFilePath = System.IO.Path.Combine(newFilePath, fileName); |
|
|
|
if (!System.IO.File.Exists(newFilePath)) |
|
{ |
|
System.IO.File.Create(newFilePath).Dispose(); |
|
} |
|
int layerIndex = exportDataList.IndexOf(model); |
|
if (layerIndex == -1) return; |
|
|
|
|
|
this.Dispatcher.Invoke(new MethodInvoker(() => |
|
{ |
|
|
|
WRJTask wrjTask = new WRJTask(); |
|
wrjTask.createTime = DateTime.Now.ToString(); |
|
wrjTask.id = ""; |
|
wrjTask.taskName = "无人机举证图斑"; |
|
wrjTask.taskType = 1; |
|
wrjTask.tblist = new List<GeometryInfo>(); |
|
|
|
IQueryFilter pSpatialFilter = null; |
|
if (geometry != null) |
|
{ |
|
pSpatialFilter = new SpatialFilterClass() { Geometry = geometry, GeometryField = pFeatureLayer.FeatureClass.ShapeFieldName, SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects, WhereClause = "" }; |
|
} |
|
|
|
IFeatureCursor cursor = pFeatureLayer.FeatureClass.Search(pSpatialFilter, true); |
|
IFeature pFeature = cursor.NextFeature(); |
|
GeometryInfo info = null; |
|
DataTable dt = new DataTable(); |
|
if (pFeature != null) |
|
{ |
|
for (int i = 0; i < pFeature.Fields.FieldCount; i++) |
|
{ |
|
if (pFeature.Fields.get_Field(i).Name.ToLower().Contains("shape") || pFeature.Fields.get_Field(i).Name.ToLower() == "objectid") |
|
{ |
|
continue; |
|
} |
|
DataColumn col = new DataColumn(); |
|
|
|
col.ColumnName = pFeature.Fields.get_Field(i).Name; |
|
col.Caption = pFeature.Fields.get_Field(i).AliasName; |
|
dt.Columns.Add(col); |
|
} |
|
} |
|
while (pFeature != null) |
|
{ |
|
count++; |
|
DataRow dr = dt.NewRow(); |
|
for (int i = 0; i < pFeature.Fields.FieldCount; i++) |
|
{ |
|
string strColName = pFeature.Fields.get_Field(i).Name; |
|
if (strColName.ToLower().Contains("shape") || strColName.ToLower() == "objectid") |
|
{ |
|
continue; |
|
} |
|
dr[strColName] = pFeature.get_Value(i); |
|
} |
|
|
|
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); |
|
javaScriptSerializer.MaxJsonLength = Int32.MaxValue; |
|
|
|
|
|
List<Dictionary<string, object>> parentRow = new List<Dictionary<string, object>>(); |
|
DataTable newdt = new DataTable(); |
|
|
|
newdt.Columns.Add("name", typeof(string)); |
|
newdt.Columns.Add("alias", typeof(string)); |
|
newdt.Columns.Add("value", typeof(string)); |
|
foreach (DataColumn col in dt.Columns) |
|
{ |
|
DataRow newdr = newdt.NewRow(); |
|
newdr["name"] = col.ColumnName; |
|
newdr["alias"] = col.Caption; |
|
newdr["value"] = dr[col.ColumnName]; |
|
newdt.Rows.Add(newdr); |
|
} |
|
|
|
foreach (DataRow row in newdt.Rows) |
|
{ |
|
Dictionary<string, object> childRow = new Dictionary<string, object>(); |
|
foreach (DataColumn col in newdt.Columns) |
|
{ |
|
childRow.Add(col.ColumnName, row[col]); |
|
} |
|
parentRow.Add(childRow); |
|
|
|
} |
|
|
|
string arrribute = javaScriptSerializer.Serialize(parentRow); |
|
|
|
info = new GeometryInfo(); |
|
info.attributes = arrribute; |
|
|
|
int bsm = pFeature.Fields.FindField("TBBH"); |
|
if (bsm >= 0) |
|
{ |
|
info.tbbsm = pFeature.get_Value(bsm).ToString(); |
|
} |
|
else |
|
{ |
|
bsm = pFeature.Fields.FindField("JCBH"); |
|
if (bsm >= 0) |
|
{ |
|
info.tbbsm = pFeature.get_Value(bsm).ToString(); |
|
} |
|
} |
|
info.taskId = "无人机举证图斑"; |
|
IGeometry pgeo = pFeature.ShapeCopy; |
|
|
|
IClone pClone = pgeo as IClone; |
|
IGeometry geo = pClone.Clone() as IGeometry; |
|
|
|
if (geo.SpatialReference != null && false == geo.SpatialReference.Name.ToUpper().Equals("UNKNOWN")) |
|
{ |
|
ISpatialReference spatial = (geo.SpatialReference as IProjectedCoordinateSystem).GeographicCoordinateSystem; |
|
geo.Project(spatial); |
|
} |
|
else |
|
{ |
|
ISpatialReference spatial = ((pFeatureLayer.FeatureClass as IGeoDataset).SpatialReference as IProjectedCoordinateSystem).GeographicCoordinateSystem; |
|
geo.Project(spatial); |
|
} |
|
string shapeJson = ConvertWkt(geo); |
|
info.geometry = shapeJson; |
|
|
|
wrjTask.tblist.Add(info); |
|
|
|
pFeature = cursor.NextFeature(); |
|
|
|
this.exportDataList[layerIndex].FcCount = featureCount; |
|
this.exportDataList[layerIndex].CurrNum = count; |
|
} |
|
|
|
string Json = JsonConvert.SerializeObject(wrjTask); |
|
|
|
Json = Json.Insert(0, "["); |
|
Json = Json + "]"; |
|
|
|
System.IO.File.WriteAllText(newFilePath, Json); |
|
|
|
})); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("无人机json字符串写入文件失败:" + ex); |
|
MessageHelper.Show("无人机json字符串写入文件失败:" + ex); |
|
} |
|
} |
|
|
|
public string ConvertWkt(ESRI.ArcGIS.Geometry.IGeometry geometry) |
|
{ |
|
string wkt = string.Empty; |
|
try |
|
{ |
|
ESRI.ArcGIS.Geometry.IGeometryFactory3 factory = new ESRI.ArcGIS.Geometry.GeometryEnvironment() as ESRI.ArcGIS.Geometry.IGeometryFactory3; |
|
byte[] b = factory.CreateWkbVariantFromGeometry(geometry) as byte[]; |
|
OSGeo.OGR.Geometry gdalGeometry = OSGeo.OGR.Geometry.CreateFromWkb(b); |
|
gdalGeometry.ExportToWkt(out wkt); |
|
} |
|
catch (Exception ex) |
|
{ |
|
return wkt; |
|
} |
|
|
|
return wkt; |
|
} |
|
|
|
private void AddTBMJFieldToKOFDT(KODBFeatureLayer pLayer) |
|
{ |
|
if (pLayer == null) |
|
return; |
|
|
|
try |
|
{ |
|
SQLiteConnection sqlConnection = new SQLiteConnection(@"Data Source=" + pLayer.OutputFileName); |
|
sqlConnection.Open(); |
|
SQLiteCommand cmd = new SQLiteCommand(sqlConnection); |
|
SQLiteTransaction pTran = sqlConnection.BeginTransaction(); |
|
try |
|
{ |
|
//string sqltxt = string.Format("ALTER TABLE KOFDT ADD COLUMN {0} {1};", "TBMJ", "float64"); |
|
//cmd.CommandText = sqltxt; |
|
//int res = cmd.ExecuteNonQuery(); |
|
OSGeo.OGR.Geometry geo = null; |
|
double TBMJ = 0; |
|
string jcbh = string.Empty; |
|
pLayer.SpatialDataSource.Open(); |
|
if (!string.IsNullOrWhiteSpace(pLayer.SpatialDataSource.DataSourcePath)) |
|
{ |
|
while (!pLayer.SpatialDataSource.EOF) |
|
{ |
|
DataRow dr = pLayer.SpatialDataSource.GetNextRecord(); |
|
if (dr == null) return; |
|
|
|
if (null != dr["Shape"]) |
|
{ |
|
try |
|
{ |
|
geo = OSGeo.OGR.Geometry.CreateFromWkt(dr["Shape"].ToString()); |
|
|
|
|
|
if (dr.Table.Columns.Contains("JCBH")) |
|
{ |
|
jcbh = dr["JCBH"].ToString(); |
|
TBMJ = geo.GetArea(); |
|
|
|
string sql = string.Format("update KOFDT set TBMJ = {0} ,JCBH = '{1}' where rtrim(ltrim(JCBH)) ='{1}'", TBMJ, jcbh.Trim()); |
|
cmd.CommandText = sql; |
|
int ress = cmd.ExecuteNonQuery(); |
|
} |
|
else if (dr.Table.Columns.Contains("TBBH")) |
|
{ |
|
jcbh = dr["TBBH"].ToString(); |
|
TBMJ = geo.GetArea(); |
|
|
|
string sql = string.Format("update KOFDT set TBMJ = {0} ,TBBH = '{1}' where rtrim(ltrim(TBBH)) ='{1}'", TBMJ, jcbh.Trim()); |
|
cmd.CommandText = sql; |
|
int ress = cmd.ExecuteNonQuery(); |
|
} |
|
} |
|
catch (Exception) |
|
{ |
|
} |
|
} |
|
} |
|
|
|
} |
|
pTran.Commit(); |
|
pLayer.SpatialDataSource.Close(); |
|
} |
|
catch (Exception) |
|
{ |
|
LogAPI.Debug("获取TBMJ失败:" ); |
|
pTran.Rollback(); |
|
} |
|
finally |
|
{ |
|
pTran.Dispose(); |
|
} |
|
|
|
if (sqlConnection != null) |
|
{ |
|
sqlConnection.Close(); |
|
sqlConnection.Dispose(); |
|
sqlConnection = null; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("添加TBMJ字段失败:" + ex); |
|
} |
|
|
|
} |
|
|
|
private void CreateConfig(int wkid) |
|
{ |
|
var pConfig = new ParamConfig(); |
|
try |
|
{ |
|
pConfig.DelX = 0; |
|
pConfig.DelY = 0; |
|
pConfig.DelZ = 0; |
|
pConfig.RX = 0; |
|
pConfig.RY = 0; |
|
pConfig.RZ = 0; |
|
pConfig.K = 0; |
|
pConfig.OX = 0; |
|
pConfig.OY = 0; |
|
pConfig.ValidErrorTimes = 5; |
|
pConfig.IsAutoDeleteData = false; |
|
pConfig.IsDecryptData = true; |
|
pConfig.IsValidLic = true; |
|
pConfig.IsAutoDeleteNotUse = false; |
|
pConfig.IsAutoDeleteLicExpired = false; |
|
pConfig.NoUseDays = 100; |
|
pConfig.WKID = wkid; |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.Show("参数格式设置不正确!请检查"); |
|
LogAPI.Debug("coordparam文件参数格式设置不正确:"); |
|
LogAPI.Debug(ex); |
|
return; |
|
} |
|
string sJson = pConfig.ToJSON(); |
|
string sEnCode = DES.DESEnCode(sJson, DES.DES_Key); |
|
try |
|
{ |
|
string savepath = System.IO.Path.Combine(exportFolder, "Kingoit", "phonemap_wydh", "coordparam.kocfg"); |
|
if (outputPathCfg != null && !string.IsNullOrWhiteSpace(outputPathCfg.EncryFileDirectory) && !string.IsNullOrWhiteSpace(outputPathCfg.EncryFileName)) |
|
{ |
|
savepath = System.IO.Path.Combine(exportFolder, outputPathCfg.EncryFileDirectory, outputPathCfg.EncryFileName); |
|
} |
|
File.WriteAllText(savepath, sEnCode); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("导出coordparam.kocf文件失败:"); |
|
LogAPI.Debug(ex); |
|
} |
|
} |
|
|
|
private ESRI.ArcGIS.Geometry.IGeometry XzqGeometry(string keyValue, string keyName) |
|
{ |
|
if (pCustomFC == null) return null; |
|
ESRI.ArcGIS.Geodatabase.IFeatureCursor featureCursor = pCustomFC.Search(new ESRI.ArcGIS.Geodatabase.QueryFilterClass() { WhereClause = string.Format(WhereStr, keyValue) }, false); |
|
if (featureCursor == null) return null; |
|
ESRI.ArcGIS.Geodatabase.IFeature feature = featureCursor.NextFeature(); |
|
if (feature == null) return null; |
|
return feature.ShapeCopy; |
|
} |
|
|
|
#region 地名数据导入query文件 |
|
private void ExportQueryDB() |
|
{ |
|
if (string.IsNullOrEmpty(this.txtPlaceNameData.Text) || !System.IO.File.Exists(this.txtPlaceNameData.Text)) return; |
|
string filePath = exportFolder + @"\Kingoit\phonemap_landsurvey\projects"; |
|
string packName = "Data"; |
|
if (isCustom) |
|
{ |
|
for (int i = 0; i < selectedXzq.Count; i++) |
|
{ |
|
packName = selectedXzq[i]; |
|
string newFilePath = System.IO.Path.Combine(filePath, packName); |
|
|
|
if (!System.IO.Directory.Exists(newFilePath)) |
|
System.IO.Directory.CreateDirectory(newFilePath); |
|
CreateQueryDB(newFilePath); |
|
} |
|
} |
|
else |
|
{ |
|
string newFilePath = System.IO.Path.Combine(filePath, packName); |
|
|
|
if (!System.IO.Directory.Exists(newFilePath)) |
|
System.IO.Directory.CreateDirectory(newFilePath); |
|
CreateQueryDB(newFilePath); |
|
} |
|
} |
|
|
|
|
|
private void CreateQueryDB(string querySavePath) |
|
{ |
|
try |
|
{ |
|
string path = System.IO.Path.Combine(Activator.bundle.Location, "Resources", "query.db"); |
|
if (!File.Exists(path)) |
|
{ |
|
return; |
|
} |
|
|
|
querySavePath = System.IO.Path.Combine(querySavePath, "Query.db"); |
|
if (File.Exists(querySavePath)) |
|
File.Delete(querySavePath); |
|
|
|
File.Copy(path, querySavePath, true); |
|
SQLiteConnection sqlConnection = new SQLiteConnection(@"Data Source=" + querySavePath); |
|
sqlConnection.Open(); |
|
SQLiteTransaction pTran = sqlConnection.BeginTransaction(); |
|
try |
|
{ |
|
DataTable dt = ToDataTable(this.txtPlaceNameData.Text); |
|
if (dt == null || dt.Rows.Count < 1) return; |
|
|
|
SQLiteCommand cmd = new SQLiteCommand(sqlConnection); |
|
string insertSql = "insert into QUERY(行政区代码,名称,面积,县代码,县名称,R_DisplayField,R_SearchField,R_X,R_Y) values('{0}','{1}',{2},'{3}','{4}','{5}','{6}',{7},{8})"; |
|
for (int i = 0; i <= dt.Rows.Count - 1; i++) |
|
{ |
|
if (GetCellValue(dt.Rows[i][0]) == "行政区代码") continue; |
|
cmd.CommandText = string.Format(insertSql, GetCellValue(dt.Rows[i][0]), GetCellValue(dt.Rows[i][1]), GetCellValue(dt.Rows[i][2]), GetCellValue(dt.Rows[i][3]), GetCellValue(dt.Rows[i][4]), GetCellValue(dt.Rows[i][5]), GetCellValue(dt.Rows[i][6]), GetCellValue(dt.Rows[i][7]), GetCellValue(dt.Rows[i][8])); |
|
cmd.ExecuteNonQuery(); |
|
} |
|
pTran.Commit(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("地名数据导入失败:" + ex.Message); |
|
pTran.Rollback(); |
|
throw; |
|
} |
|
finally |
|
{ |
|
if (sqlConnection != null) |
|
{ |
|
sqlConnection.Close(); |
|
sqlConnection = null; |
|
GC.Collect(); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("地名数据导入失败:" + ex); |
|
} |
|
} |
|
|
|
|
|
|
|
private string GetCellValue(object obj) |
|
{ |
|
return toTrim(obj); |
|
} |
|
|
|
public string toTrim(object obj) |
|
{ |
|
if (obj == null) |
|
return string.Empty; |
|
return obj.ToString().Trim(); |
|
} |
|
|
|
/// <summary> |
|
/// 读取Excel文件到DataSet中 |
|
/// </summary> |
|
/// <param name="filePath">文件路径</param> |
|
/// <returns></returns> |
|
public DataTable ToDataTable(string filePath) |
|
{ |
|
string connStr = ""; |
|
string fileType = System.IO.Path.GetExtension(filePath); |
|
if (string.IsNullOrEmpty(fileType)) return null; |
|
|
|
if (fileType == ".xls") |
|
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\""; |
|
else |
|
connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\""; |
|
string sql_F = "Select * FROM [{0}]"; |
|
|
|
OleDbConnection conn = null; |
|
OleDbDataAdapter da = null; |
|
DataTable dtSheetName = null; |
|
|
|
DataSet ds = new DataSet(); |
|
try |
|
{ |
|
// 初始化连接,并打开 |
|
conn = new OleDbConnection(connStr); |
|
conn.Open(); |
|
|
|
// 获取数据源的表定义元数据 |
|
string SheetName = ""; |
|
dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); |
|
|
|
// 初始化适配器 |
|
da = new OleDbDataAdapter(); |
|
for (int i = 0; i < dtSheetName.Rows.Count; i++) |
|
{ |
|
SheetName = (string)dtSheetName.Rows[i]["TABLE_NAME"]; |
|
|
|
if (SheetName == null || SheetName.ToUpper().Contains("MACRO") || !SheetName.Replace("'", "").EndsWith("$")) |
|
{ |
|
continue; |
|
} |
|
|
|
da.SelectCommand = new OleDbCommand(String.Format(sql_F, SheetName), conn); |
|
System.Data.DataTable dt = new System.Data.DataTable(); |
|
da.Fill(dt); |
|
ds.Tables.Add(dt); |
|
} |
|
return ds.Tables[0]; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("地名数据Excel转DataTable失败:" + ex.Message); |
|
} |
|
finally |
|
{ |
|
// 关闭连接 |
|
if (conn.State == ConnectionState.Open) |
|
{ |
|
conn.Close(); |
|
da.Dispose(); |
|
conn.Dispose(); |
|
} |
|
} |
|
return null; |
|
} |
|
|
|
#endregion |
|
|
|
#region ko文件生成kotiles |
|
|
|
List<CutTiles> lstCutTiles = new List<CutTiles>(); |
|
List<UCMxdMultCut> openCut = new List<UCMxdMultCut>(); |
|
int nowMxdIndex = 0; |
|
int mxdIndex = 0; |
|
private void ExportKotilesByKo(MakeTaskPackageModel exportModel, int layerIndex) |
|
{ |
|
|
|
if (exportModel == null || exportModel.Type == "瓦片") return; |
|
MxdParameters mxdParameters = new MxdParameters() |
|
{ |
|
SaveFileName = exportModel.FileName, |
|
MaxScale = 8000 |
|
}; |
|
exportModel.MxdCutParameters = mxdParameters; |
|
exportModel.LayerSource = MapsManager.Instance.MapService.getAxMapControl().DocumentFilename; |
|
mxdIndex = 0; |
|
|
|
Thread threadKotiles = new Thread(new ParameterizedThreadStart(ExportKotilesParame)); |
|
threadKotiles.SetApartmentState(ApartmentState.STA); |
|
threadKotiles.IsBackground = true; |
|
threadKotiles.Start(exportModel); |
|
createCount++; |
|
} |
|
|
|
|
|
private void ExportKotilesParame(object obj) |
|
{ |
|
string layerName = string.Empty; |
|
try |
|
{ |
|
ESRI.ArcGIS.Geometry.IGeometry geometryNow = null; |
|
MakeTaskPackageModel model = obj as MakeTaskPackageModel; |
|
string newFilePath = System.IO.Path.Combine(exportFolder, model.OutPath); |
|
string packName = "Data"; |
|
if (isCustom) |
|
{ |
|
packName = selectedXzq[mxdIndex]; |
|
if (!Directory.Exists(newFilePath)) |
|
Directory.CreateDirectory(newFilePath); |
|
geometryNow = XzqGeometry(selectedXzq[mxdIndex], keyField); |
|
geometryNow = (geometryNow as IClone).Clone() as ESRI.ArcGIS.Geometry.IGeometry; |
|
} |
|
newFilePath = System.IO.Path.Combine(newFilePath, packName, "Source"); |
|
|
|
layerName = model.FileAliasName; |
|
if (!System.IO.Directory.Exists(newFilePath)) |
|
System.IO.Directory.CreateDirectory(newFilePath); |
|
|
|
int layerIndex = exportDataList.IndexOf(model); |
|
if (layerIndex == -1) return; |
|
|
|
UCMxdMultCut ucMxdCut = new UCMxdMultCut(); |
|
ucMxdCut.IsEncrypt = true; |
|
ucMxdCut.UseOutMapControl = true; |
|
ucMxdCut.OutMapControl = MapsManager.Instance.MapService.getAxMapControl(); |
|
ucMxdCut.SetMxdPath(model.LayerSource); |
|
ucMxdCut.SetSavePath(newFilePath + "\\" + model.FileName + ".kotiles"); |
|
ucMxdCut.CutIndex = layerIndex; |
|
if (geometryNow != null) |
|
{ |
|
model.MxdCutParameters.CutType = CUTAreaType.自定义; |
|
} |
|
else |
|
{ |
|
model.MxdCutParameters.CutType = CUTAreaType.全部; |
|
} |
|
|
|
ucMxdCut.BindParmas(model.MxdCutParameters); |
|
ucMxdCut.GeometryNow = geometryNow; |
|
ucMxdCut.selectedXzq = this.selectedXzq; |
|
ucMxdCut.pFC = this.pCustomFC; |
|
DateTime dt1 = DateTime.Now; |
|
ucMxdCut.LayerName = model.FileAliasName; |
|
ucMxdCut.CreatDown += (s) => |
|
{ |
|
nowMxdIndex++; |
|
DateTime dt3 = DateTime.Now; |
|
if (!this.IsDisposed) |
|
{ |
|
this.Dispatcher.Invoke(new MethodInvoker(() => |
|
{ |
|
this.exportDataList[layerIndex].Make = "完成,共用时" + dt3.Subtract(dt1).TotalSeconds.ToString("0.0") + "秒"; |
|
this.exportDataList[layerIndex].FcCount = 100; |
|
this.exportDataList[layerIndex].CurrNum = 100; |
|
this.exportDataList[layerIndex].OutFilePath = System.IO.Path.Combine(model.OutPath, packName, "Source", model.FileName + ".kotiles"); |
|
|
|
if (isCustom) |
|
{ |
|
mxdIndex++; |
|
if (mxdIndex == selectedXzq.Count) |
|
{ |
|
createCount--; |
|
if (createCount == 0) |
|
{ |
|
FunctionOutXml outxml = new FunctionOutXml(); |
|
outxml.SaveConfig(exportDataList, isCustom, exportFolder, selectedXzq); |
|
if (this.exportSuccess == true) |
|
{ |
|
MessageHelper.Show("导出成功"); |
|
} |
|
else |
|
{ |
|
MessageHelper.Show("导出失败:\r\n" + errorMsg); |
|
} |
|
this.btnExport.IsEnabled = true; |
|
} |
|
return; |
|
} |
|
ExportKotilesParame(obj); |
|
} |
|
else |
|
{ |
|
createCount--; |
|
if (createCount == 0) |
|
{ |
|
FunctionOutXml outxml = new FunctionOutXml(); |
|
outxml.SaveConfig(exportDataList, isCustom, exportFolder, selectedXzq); |
|
if (this.exportSuccess == true) |
|
{ |
|
MessageHelper.Show("导出成功"); |
|
} |
|
else |
|
{ |
|
MessageHelper.Show("导出失败:\r\n" + errorMsg); |
|
} |
|
this.btnExport.IsEnabled = true; |
|
} |
|
} |
|
|
|
GC.Collect(); |
|
})); |
|
} |
|
}; |
|
ucMxdCut.Report += (s, c, i) => |
|
{ |
|
if (!this.IsDisposed) |
|
{ |
|
this.Dispatcher.Invoke(new MethodInvoker(() => |
|
{ |
|
this.exportDataList[layerIndex].Make = string.Format("{0}/{1}", c, s); |
|
this.exportDataList[layerIndex].CurrNum = c; |
|
this.exportDataList[layerIndex].FcCount = s; |
|
})); |
|
} |
|
}; |
|
openCut.Add(ucMxdCut); |
|
ucMxdCut.btnOk_Click(null, null);//.CreateTiles(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("MXD切片失败:" + ex); |
|
MessageHelper.Show("MXD切片失败:" + ex); |
|
this.exportSuccess = false; |
|
errorMsg += string.Format("{0}矢量数据导入KO失败:{1}\r\n", layerName, ex.Message); |
|
createCount--; |
|
} |
|
} |
|
|
|
|
|
private double GetMaxDistance(string filePath) |
|
{ |
|
ProcessMXDClass pr = new ProcessMXDClass(); |
|
IEnvelope en = pr.GetMapEnvelope(filePath); |
|
IEnvelope extentMax = GetExtentSquare(en); |
|
return extentMax.XMax - extentMax.XMin; |
|
} |
|
|
|
|
|
/// <summary> |
|
/// 获取指定范围外正方形 |
|
/// </summary> |
|
/// <param name="e"></param> |
|
/// <returns></returns> |
|
private IEnvelope GetExtentSquare(IEnvelope e) |
|
{ |
|
IEnvelope extent = new EnvelopeClass() |
|
{ |
|
XMax = e.XMax, |
|
XMin = e.XMin, |
|
YMax = e.YMax, |
|
YMin = e.YMin |
|
}; |
|
double del = (extent.Width - extent.Height) / 2; |
|
if (del > 0) |
|
{ |
|
extent.YMax += del; |
|
extent.YMin -= del; |
|
} |
|
else |
|
{ |
|
extent.XMax -= del; |
|
extent.XMin += del; |
|
} |
|
extent.XMax += extent.Width / 8; |
|
extent.XMin -= extent.Width / 8; |
|
extent.YMax += extent.Width / 8; |
|
extent.YMin -= extent.Width / 8; |
|
return extent; |
|
} |
|
#endregion |
|
|
|
|
|
#region img影像切片 |
|
List<MultRaster2MBTiles> raster = new List<MultRaster2MBTiles>(); |
|
private void CreateKotilesImg(object obj) |
|
{ |
|
string layerName = string.Empty; |
|
try |
|
{ |
|
MakeTaskPackageModel model = obj as MakeTaskPackageModel; |
|
string newFilePath = System.IO.Path.Combine(exportFolder, model.OutPath); |
|
string packName = "Data"; |
|
if (!string.IsNullOrWhiteSpace(model.TaskName)) |
|
{ |
|
packName = model.TaskName; |
|
} |
|
if (isCustom) |
|
{ |
|
packName = model.CustomPackName; |
|
} |
|
|
|
newFilePath = System.IO.Path.Combine(newFilePath, packName, "Source"); |
|
|
|
if (!Directory.Exists(newFilePath)) |
|
Directory.CreateDirectory(newFilePath); |
|
|
|
layerName = model.FileAliasName; |
|
int layerIndex = exportDataList.IndexOf(model); |
|
if (layerIndex == -1) return; |
|
|
|
string strFiles = string.Empty; |
|
//int nThread = 1; |
|
|
|
List<IRasterLayer> rasterLayerList = model.Layer as List<IRasterLayer>; |
|
foreach (var item in rasterLayerList) |
|
{ |
|
strFiles += string.Format("{0};", item.FilePath); |
|
} |
|
|
|
string strLayerPath = string.Format("\"" + strFiles.Substring(0, strFiles.Length - 1) + "\""); |
|
string strFileName = string.Format("\"" + model.FileName + "\""); |
|
string strOutputPath = string.Format("\"" + newFilePath + "\""); |
|
|
|
string customLayerPath = string.Format("\"" + this.customLayerPath + "\""); |
|
string customLayerName = string.Format("\"" + this.customLayerName + "\""); |
|
string customstrWhere = string.Format("\"" + this.WhereStr + "\""); |
|
string customKeyValue = string.Format("\"" + packName + "\""); |
|
|
|
string strtilesType = string.Format("\"" + this.tilesType.ToString() + "\""); |
|
string strlevel = string.Format("\"" + this.sectionlevel.ToString() + "\""); |
|
string strtiledSize = string.Format("\"" + this.tileSize.ToString() + "\""); |
|
string strthreadNum = string.Format("\"" + this.threadNum.ToString() + "\""); |
|
|
|
string strConvertWebMercator = "0"; |
|
if (convertWebMercator == true) |
|
strConvertWebMercator = "1"; |
|
|
|
|
|
var psi = new ProcessStartInfo("Kingo.Plugin.RasterToKOTilesApp.exe", string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11}", strLayerPath, strFileName, strOutputPath, customLayerPath, customLayerName, customstrWhere, customKeyValue, strtilesType, strlevel, strtiledSize, strthreadNum, strConvertWebMercator)); |
|
|
|
string a = psi.Arguments; |
|
psi.UseShellExecute = false; |
|
psi.CreateNoWindow = true; |
|
psi.RedirectStandardError = true; |
|
psi.RedirectStandardInput = true; |
|
psi.RedirectStandardOutput = true; |
|
|
|
var pes = Process.Start(psi); |
|
|
|
var sout = pes.StandardOutput; |
|
while (!sout.EndOfStream) |
|
{ |
|
var line = sout.ReadLine(); |
|
if (string.IsNullOrEmpty(line)) continue; |
|
|
|
if (line.ToString().Contains(";")) |
|
{ |
|
string[] strArr = line.ToString().Split(';'); |
|
if (strArr.Length == 2) |
|
{ |
|
this.exportDataList[layerIndex].CurrNum = Convert.ToInt32(strArr[0]); |
|
this.exportDataList[layerIndex].FcCount = Convert.ToInt32(strArr[1]); |
|
|
|
} |
|
else if (strArr.Length == 3) |
|
{ |
|
this.exportDataList[layerIndex].Make = strArr[0]; |
|
this.exportDataList[layerIndex].CurrNum = Convert.ToInt32(strArr[1]); |
|
this.exportDataList[layerIndex].FcCount = Convert.ToInt32(strArr[2]); |
|
} |
|
else |
|
{ |
|
this.exportDataList[layerIndex].FcCount = 100; |
|
this.exportDataList[layerIndex].CurrNum = 100; |
|
} |
|
} |
|
else |
|
{ |
|
this.exportDataList[layerIndex].Make = line.ToString(); |
|
} |
|
} |
|
|
|
pes.WaitForExit(); |
|
pes.Close(); |
|
|
|
|
|
this.Dispatcher.Invoke(new MethodInvoker(() => |
|
{ |
|
this.exportDataList[layerIndex].OutFilePath = System.IO.Path.Combine(model.OutPath, packName, "Source", model.FileName + ".kotiles"); |
|
createCount--; |
|
if (createCount == 0) |
|
{ |
|
FunctionOutXml outxml = new FunctionOutXml(); |
|
outxml.SaveConfig(exportDataList, isCustom, exportFolder, selectedXzq); |
|
if (this.exportSuccess == true) |
|
{ |
|
List<MakeTaskPackageModel> jzrwModelList = exportDataList.FindAll(x => x.Type.Contains("举证任务") && (x.FileName == "JCTB" || x.FileName == "监测图斑")); |
|
|
|
if (jzrwModelList != null && jzrwModelList.Count != 0) |
|
{ |
|
IQueryFilter pQuery = new QueryFilterClass(); |
|
foreach (MakeTaskPackageModel item in jzrwModelList) |
|
{ |
|
if (!item.Make.Contains("完成")) |
|
continue; |
|
|
|
IFeatureLayer featureLayer = item.Layer as IFeatureLayer; |
|
if (featureLayer != null && featureLayer.FeatureClass != null && !string.IsNullOrWhiteSpace(item.FilterWhere)) |
|
{ |
|
pQuery.WhereClause = item.FilterWhere; |
|
|
|
IFeatureCursor featureCursor = featureLayer.FeatureClass.Update(pQuery, true); |
|
IFeature feature = null; |
|
int dcztIdx = featureLayer.FeatureClass.FindField("RWDCZT");//任务导出状态,数据导出成功后,更新导出状态为已制作 |
|
int wyzzsjIdx = featureLayer.FeatureClass.FindField("WYZZSJ");//外业制作时间 |
|
DateTime dateTime = DateTime.Now; |
|
|
|
while ((feature = featureCursor.NextFeature()) != null) |
|
{ |
|
if (dcztIdx != -1) |
|
feature.Value[dcztIdx] = "已制作"; |
|
if (wyzzsjIdx != -1) |
|
feature.Value[wyzzsjIdx] = dateTime; |
|
featureCursor.UpdateFeature(feature); |
|
} |
|
featureCursor.Flush(); |
|
Thread.Sleep(3000); |
|
} |
|
} |
|
} |
|
MessageHelper.Show("导出成功"); |
|
} |
|
else |
|
{ |
|
MessageHelper.Show("导出失败:\r\n" + errorMsg); |
|
} |
|
this.btnExport.IsEnabled = true; |
|
} |
|
|
|
})); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("导出影像kotiles失败:" + ex); |
|
this.exportSuccess = false; |
|
errorMsg += string.Format("{0}矢量数据导入KO失败:{1}\r\n", layerName, ex.Message); |
|
createCount--; |
|
} |
|
} |
|
|
|
|
|
|
|
private void CreateKotilesImg1(object obj) |
|
{ |
|
string layerName = string.Empty; |
|
try |
|
{ |
|
MakeTaskPackageModel model = obj as MakeTaskPackageModel; |
|
string newFilePath = System.IO.Path.Combine(exportFolder, model.OutPath); |
|
string packName = "Data"; |
|
if (!string.IsNullOrWhiteSpace(model.TaskName)) |
|
{ |
|
packName = model.TaskName; |
|
} |
|
Raster2KOTiles.Envelope envelopeCut = null; |
|
if (isCustom) |
|
{ |
|
packName = geometrys.ElementAt(model.CurrentIndex).Key; |
|
OSGeo.OGR.Geometry geometryValue = geometrys.ElementAt(model.CurrentIndex).Value; |
|
if (geometryValue != null) |
|
{ |
|
List<OSGeo.OGR.Geometry> list = new List<OSGeo.OGR.Geometry>() { geometryValue.Clone() }; |
|
toplayer = UnionVector.CreateLayer(list, distance); |
|
OSGeo.OGR.Geometry geometry = null; |
|
foreach (OSGeo.OGR.Geometry geo in list) |
|
{ |
|
geometry = UnionVector.UnionGeometry(geometry, geo); |
|
} |
|
OSGeo.OGR.Envelope envelope = new OSGeo.OGR.Envelope(); |
|
geometry.GetEnvelope(envelope); |
|
|
|
envelopeCut = new Raster2KOTiles.Envelope |
|
{ |
|
XMax = envelope.MaxX, |
|
XMin = envelope.MinX, |
|
YMax = envelope.MaxY, |
|
YMin = envelope.MinY |
|
}; |
|
} |
|
} |
|
newFilePath = System.IO.Path.Combine(newFilePath, packName, "Source"); |
|
|
|
if (!Directory.Exists(newFilePath)) |
|
Directory.CreateDirectory(newFilePath); |
|
|
|
layerName = model.FileAliasName; |
|
int layerIndex = exportDataList.IndexOf(model); |
|
if (layerIndex == -1) return; |
|
|
|
|
|
MultRaster2MBTiles pMergeRaster = new MultRaster2MBTiles(); |
|
raster.Add(pMergeRaster); |
|
List<string> files = new List<string>(); |
|
int nThread = 1; |
|
try |
|
{ |
|
List<IRasterLayer> rasterLayerList = model.Layer as List<IRasterLayer>; |
|
foreach (var item in rasterLayerList) |
|
{ |
|
files.Add(item.FilePath); |
|
} |
|
|
|
System.Drawing.Imaging.ImageFormat imgFormat = System.Drawing.Imaging.ImageFormat.Jpeg; |
|
if (this.tilesType.ToString().ToLower() == "png") |
|
{ |
|
imgFormat = System.Drawing.Imaging.ImageFormat.Png; |
|
} |
|
pMergeRaster.ImgFormat = imgFormat; |
|
pMergeRaster.Level = this.sectionlevel;// Convert.ToInt32(this.txtSectionlevel.Text); |
|
pMergeRaster.TiledSize = this.tileSize;// Convert.ToInt32(this.txtTilesize.Text); |
|
pMergeRaster.MBTilesPath = newFilePath + "\\" + model.FileName + ".kotiles"; |
|
pMergeRaster.Index = layerIndex; |
|
pMergeRaster.SaveType = EnumSaveType.Level; |
|
nThread = this.threadNum;// Convert.ToInt32(this.txtThreadnum.Text); |
|
nThread = nThread <= 0 ? 1 : nThread; |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
this.exportDataList[layerIndex].Make = "制作失败!原因:" + ex.Message; |
|
this.exportDataList[layerIndex].CurrNum = 0; |
|
} |
|
DateTime dt1 = DateTime.Now; |
|
pMergeRaster.CreatDown += (s, e1) => |
|
{ |
|
DateTime dt3 = DateTime.Now; |
|
if (!this.IsDisposed) |
|
{ |
|
this.Dispatcher.Invoke(new MethodInvoker(() => |
|
{ |
|
this.exportDataList[layerIndex].Make = "完成,共用时" + dt3.Subtract(dt1).TotalSeconds.ToString("0.0") + "秒"; |
|
this.exportDataList[layerIndex].FcCount = 100; |
|
this.exportDataList[layerIndex].CurrNum = 100; |
|
this.exportDataList[layerIndex].OutFilePath = System.IO.Path.Combine(model.OutPath, packName, "Source", model.FileName + ".kotiles"); |
|
|
|
if (isCustom) |
|
{ |
|
model.CurrentIndex = model.CurrentIndex + 1; |
|
if (model.CurrentIndex > selectedXzq.Count) return; |
|
if (model.CurrentIndex == selectedXzq.Count) |
|
{ |
|
this.exportDataList[layerIndex].OutFilePath = System.IO.Path.Combine(model.OutPath, packName, "Source", model.FileName + ".kotiles"); |
|
createCount--; |
|
|
|
if (createCount == 0) |
|
{ |
|
FunctionOutXml outxml = new FunctionOutXml(); |
|
outxml.SaveConfig(exportDataList, isCustom, exportFolder, selectedXzq); |
|
if (this.exportSuccess == true) |
|
{ |
|
MessageHelper.Show("导出成功"); |
|
} |
|
else |
|
{ |
|
MessageHelper.Show("导出失败:\r\n" + errorMsg); |
|
} |
|
this.btnExport.IsEnabled = true; |
|
} |
|
return; |
|
} |
|
CreateKotilesImg(model); |
|
} |
|
else |
|
{ |
|
createCount--; |
|
if (createCount == 0) |
|
{ |
|
FunctionOutXml outxml = new FunctionOutXml(); |
|
outxml.SaveConfig(exportDataList, isCustom, exportFolder, selectedXzq); |
|
; |
|
if (this.exportSuccess == true) |
|
{ |
|
MessageHelper.Show("导出成功"); |
|
} |
|
else |
|
{ |
|
MessageHelper.Show("导出失败:\r\n" + errorMsg); |
|
} |
|
this.btnExport.IsEnabled = true; |
|
} |
|
} |
|
|
|
GC.Collect(); |
|
})); |
|
|
|
|
|
} |
|
}; |
|
pMergeRaster.Report += (s, c) => |
|
{ |
|
if (!this.IsDisposed) |
|
{ |
|
this.Dispatcher.Invoke(new MethodInvoker(() => |
|
{ |
|
this.exportDataList[layerIndex].Make = string.Format("{0}/{1}", c, s); |
|
this.exportDataList[layerIndex].CurrNum = c; |
|
this.exportDataList[layerIndex].FcCount = s; |
|
})); |
|
} |
|
}; |
|
try |
|
{ |
|
pMergeRaster.CreateMulFilesKOTiles(files, nThread, convertWebMercator, envelopeCut); |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
this.exportDataList[layerIndex].Make = "制作失败!原因:" + ex.Message; |
|
this.exportDataList[layerIndex].CurrNum = 0; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("导出影像kotiles失败:" + ex); |
|
this.exportSuccess = false; |
|
errorMsg += string.Format("{0}矢量数据导入KO失败:{1}\r\n", layerName, ex.Message); |
|
createCount--; |
|
} |
|
} |
|
|
|
|
|
private void GetBestLevelSize(List<IRasterLayer> rasterLayerList) |
|
{ |
|
try |
|
{ |
|
List<string> files = new List<string>(); |
|
foreach (var item in rasterLayerList) |
|
{ |
|
if (System.IO.Path.GetExtension(item.FilePath.ToString()) != ".kotiles") |
|
{ |
|
files.Add(item.FilePath.ToString()); |
|
} |
|
} |
|
if (files.Count == 0) |
|
return; |
|
int level, tileSize; |
|
double resolution = MultRaster2MBTiles.GetBestLevelAndSize(files, out level, out tileSize); |
|
if (level != 0 && tileSize != 0) |
|
{ |
|
if (level > Convert.ToInt32(this.txtSectionlevel.Text)) |
|
{ |
|
this.txtTilesize.Text = tileSize.ToString(); |
|
this.txtSectionlevel.Text = level.ToString(); |
|
} |
|
|
|
//this.txtResolution.Text = resolution.ToString("0.00"); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取切片级别失败:" + ex.Message); |
|
} |
|
|
|
} |
|
|
|
|
|
private void GetBestLevelSize(IRasterLayer rasterLayer) |
|
{ |
|
try |
|
{ |
|
List<string> files = new List<string>(); |
|
if (System.IO.Path.GetExtension(rasterLayer.FilePath.ToString()) != ".kotiles") |
|
{ |
|
files.Add(rasterLayer.FilePath.ToString()); |
|
} |
|
|
|
if (files.Count == 0) |
|
return; |
|
int level, tileSize; |
|
double resolution = MultRaster2MBTiles.GetBestLevelAndSize(files, out level, out tileSize); |
|
if (level != 0 && tileSize != 0) |
|
{ |
|
if (level > Convert.ToInt32(this.txtSectionlevel.Text)) |
|
{ |
|
this.txtTilesize.Text = tileSize.ToString(); |
|
this.txtSectionlevel.Text = level.ToString(); |
|
} |
|
|
|
//this.txtResolution.Text = resolution.ToString("0.00"); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取切片级别失败:" + ex.Message); |
|
} |
|
|
|
} |
|
#endregion |
|
|
|
/// <summary> |
|
/// 选择自定义范围 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void btnSelectExtentData_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 == ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTFeatureClass) |
|
{ |
|
|
|
this.txtExtentData.Text = pDialog.FinalLocation; |
|
this.customLayerPath = pDialog.FinalLocation; |
|
this.customLayerName = distObj.DatasetName.Name; |
|
|
|
pCustomFC = (distObj.DatasetName as IName).Open() as IFeatureClass; |
|
if (pCustomFC != null) |
|
{ |
|
frmXZQSelected = new FrmXZQSelected(); |
|
frmXZQSelected.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; |
|
frmXZQSelected.Width = 800; |
|
frmXZQSelected.Height = 450; |
|
frmXZQSelected.ImportFeatureClass = pCustomFC; |
|
frmXZQSelected.CustomLayerPath = customLayerPath; |
|
frmXZQSelected.CustomLayerName = customLayerName; |
|
frmXZQSelected.GetCustomXZQInfo = this.GetCustomXZQInfo; |
|
currentIndex = 0; |
|
frmXZQSelected.ShowInMainWindow(true); |
|
|
|
|
|
} |
|
else |
|
{ |
|
MessageHelper.Show("请选择矢量图层!!"); |
|
} |
|
} |
|
} |
|
} |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("选择自定义范围数据失败:" + ex); |
|
} |
|
} |
|
|
|
private void GetCustomXZQInfo() |
|
{ |
|
if(frmXZQSelected!=null) |
|
selectedXzq = frmXZQSelected.KeyFieldsList; |
|
geometrys = frmXZQSelected.geometrys; |
|
keyField = frmXZQSelected.KeyField; |
|
WhereStr = frmXZQSelected.WhereStr; |
|
} |
|
|
|
private void btnSelectExportPath_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
KGIS.Framework.Utils.Dialog.FolderBrowserDialog folderBrowserDialog = new KGIS.Framework.Utils.Dialog.FolderBrowserDialog(); |
|
|
|
if (folderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) |
|
{ |
|
this.txtExportPath.Text = folderBrowserDialog.SelectedPath; |
|
} |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("选择导出位置失败:" + ex); |
|
} |
|
} |
|
|
|
private void FrmMobileDataExport_Loaded(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
|
|
if (this.rdoWYDHRWB.IsChecked == true) |
|
GetExportDataList(); |
|
else |
|
{ |
|
GetWRJExportDataList(); |
|
} |
|
|
|
//设置举证任务过滤条件,默认选中未制作 |
|
this.comRWDCZT.Items.Add("已制作"); |
|
this.comRWDCZT.Items.Add("未制作"); |
|
this.comRWDCZT.Items.Add("全部"); |
|
this.comRWDCZT.SelectedIndex = 1; |
|
|
|
if (bundle == null) |
|
bundle = Activator.bundle; |
|
if (bundle != null && !string.IsNullOrWhiteSpace(bundle.Location)) |
|
{ |
|
//string path = @"F:\研发产品\年度变更调查建库软件\Kingo.BuildDB\Apps\Plugins\Kingo.Plugin.MakeTaskPackage"; |
|
string projectPath = System.IO.Path.Combine(bundle.Location, "Configs"); |
|
if (!System.IO.Directory.Exists(projectPath)) |
|
{ |
|
MessageHelper.Show(string.Format("{0}目录不存在!", projectPath)); |
|
return; |
|
} |
|
string outputCfgPath = System.IO.Path.Combine(projectPath, "TaskPackagePathConfig.xml"); |
|
if (!System.IO.File.Exists(outputCfgPath)) |
|
{ |
|
MessageHelper.Show(string.Format("{0}文件不存在!", outputCfgPath)); |
|
return; |
|
} |
|
taskPackagePathConfig = SerializeAPI.DeserializeToObject2<TaskPackagePathConfig>(outputCfgPath); |
|
if (taskPackagePathConfig != null && taskPackagePathConfig.outputPaths != null) |
|
{ |
|
this.cobOutputFileCfg.ItemsSource = taskPackagePathConfig.outputPaths.outputPathList; |
|
this.cobOutputFileCfg.SelectedIndex = 0; |
|
} |
|
} |
|
|
|
var model = this.exportDataList.Find(x => x.FileName.Contains(".mxd")); |
|
if (model == null) |
|
{ |
|
this.txtMaxScale.IsEnabled = false; |
|
this.comMinScale.IsEnabled = false; |
|
} |
|
else |
|
{ |
|
this.txtMaxScale.IsEnabled = true; |
|
this.comMinScale.IsEnabled = true; |
|
} |
|
SetExportPath(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("绑定地图制作列表数据失败:" + ex); |
|
} |
|
} |
|
|
|
private void CobOutputFileCfg_SelectionChanged(object sender, SelectionChangedEventArgs e) |
|
{ |
|
if (this.cobOutputFileCfg.SelectedItem != null) |
|
{ |
|
outputPathCfg = this.cobOutputFileCfg.SelectedItem as OutputPath; |
|
|
|
if (this.exportDataList != null && outputPathCfg!=null) |
|
{ |
|
|
|
foreach (var item in this.exportDataList) |
|
{ |
|
item.OutPath = outputPathCfg.RootDirectory; |
|
item.TaskName = outputPathCfg.TaskName; |
|
item.CfgFileName = outputPathCfg.ProfileName; |
|
} |
|
} |
|
} |
|
} |
|
|
|
|
|
private int _id = 1; |
|
|
|
private void GetWRJExportDataList() |
|
{ |
|
try |
|
{ |
|
exportDataList = new List<MakeTaskPackageModel>(); |
|
if (exportDataList != null) |
|
{ |
|
ILayer wrjlayer = MapsManager.Instance.MapService.GetFeatureLayerByName("JCTB"); |
|
if (wrjlayer != null) |
|
{ |
|
|
|
string where = string.Empty; |
|
int sfwyIndex = (wrjlayer as IFeatureLayer).FeatureClass.FindField("SFJZ"); |
|
int rwdcztIndex = (wrjlayer as IFeatureLayer).FeatureClass.FindField("RWDCZT"); |
|
if (sfwyIndex != -1) |
|
{ |
|
where = string.Format("SFJZ='1'"); |
|
} |
|
|
|
if (this.comRWDCZT.SelectedIndex == 0 && rwdcztIndex!=-1) |
|
where = string.Format("{0} and RWDCZT='已制作'", where); |
|
else if (this.comRWDCZT.SelectedIndex == 1 && rwdcztIndex !=-1) |
|
where = string.Format("{0} and (RWDCZT is null or RWDCZT='')", where); |
|
|
|
MakeTaskPackageModel mobiledata = new MakeTaskPackageModel(); |
|
mobiledata.IsCheck = true; |
|
mobiledata.IsSlice = false; |
|
mobiledata.FileName = (wrjlayer as IDataset).BrowseName; |
|
mobiledata.FileAliasName = wrjlayer.Name; |
|
mobiledata.Make = "未制作"; |
|
mobiledata.LayerIndex = 0; |
|
mobiledata.Layer = wrjlayer; |
|
mobiledata.MapGroupIndex = -1; |
|
mobiledata.Type = "举证任务"; |
|
if (outputPathCfg != null) |
|
{ |
|
mobiledata.OutPath = outputPathCfg.RootDirectory; |
|
mobiledata.TaskName = outputPathCfg.TaskName; |
|
mobiledata.CfgFileName = outputPathCfg.ProfileName; |
|
} |
|
else |
|
{ |
|
mobiledata.TaskName = "无人机举证图斑"; |
|
} |
|
|
|
mobiledata.MapGroupName = "其他"; |
|
mobiledata.ID = _id; |
|
mobiledata.PID = 0; |
|
mobiledata.IsLayerGroup = false; |
|
mobiledata.FilterWhere = where; |
|
_id++; |
|
exportDataList.Add(mobiledata); |
|
} |
|
} |
|
|
|
this.rwzzTreeList.ItemsSource = exportDataList; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取无人机导出列表数据失败:" + ex); |
|
MessageHelper.Show("获取无人机导出列表数据失败:" + ex); |
|
} |
|
} |
|
|
|
private void GetExportDataList() |
|
{ |
|
try |
|
{ |
|
exportDataList = new List<MakeTaskPackageModel>(); |
|
rasterDataList = new List<MakeTaskPackageModel>(); |
|
if (exportDataList != null) |
|
{ |
|
List<ILayer> layerList = GetLayer(); |
|
layerList.Reverse(); |
|
if (layerList != null && layerList.Count != 0) |
|
{ |
|
for (int i = 0; i < layerList.Count; i++) |
|
{ |
|
ILayer player = layerList[i]; |
|
if (player is IGroupLayer) |
|
{ |
|
|
|
IGroupLayer grouplayer = player as IGroupLayer; |
|
ILayerGeneralProperties lp = grouplayer as ILayerGeneralProperties; |
|
|
|
if (lp.LayerDescription.ToUpper() != "JZRWSJ".ToUpper() && lp.LayerDescription.ToUpper() != "CKSJ".ToUpper()) |
|
continue; |
|
|
|
MakeTaskPackageModel mobiledata = new MakeTaskPackageModel(); |
|
mobiledata.IsCheck = true; |
|
mobiledata.IsSlice = false; |
|
mobiledata.FileName = grouplayer.Name; |
|
mobiledata.FileAliasName = grouplayer.Name; |
|
mobiledata.Type = "图层组"; |
|
mobiledata.Layer = grouplayer; |
|
mobiledata.ExcState = ExcStateEnum.NoImport; |
|
mobiledata.ID = _id; |
|
mobiledata.PID = 0; |
|
mobiledata.IsLayerGroup = true; |
|
_id++; |
|
exportDataList.Add(mobiledata); |
|
GetVertorData(player, i, mobiledata.ID); |
|
} |
|
} |
|
} |
|
ILayer bglayer = MapsManager.Instance.MapService.GetFeatureLayerByName("JCTB"); |
|
if (bglayer != null) |
|
{ |
|
string where = string.Empty; |
|
int sfwyIndex = (bglayer as IFeatureLayer).FeatureClass.FindField("SFJZ"); |
|
int rwdcztIndex = (bglayer as IFeatureLayer).FeatureClass.FindField("RWDCZT"); |
|
if (sfwyIndex != -1) |
|
{ |
|
where = string.Format("SFJZ='1'"); |
|
} |
|
|
|
if (this.comRWDCZT.SelectedIndex == 0 && rwdcztIndex!=-1) |
|
where = string.Format("{0} and RWDCZT='已制作'", where); |
|
else if (this.comRWDCZT.SelectedIndex == 1 && rwdcztIndex!=-1) |
|
where = string.Format("{0} and (RWDCZT is null or RWDCZT='')", where); |
|
|
|
GetOtherData(bglayer, layerList.Count, where); |
|
} |
|
|
|
|
|
exportDataList.Reverse(); |
|
|
|
//获取影像数据分组下的影像数据 |
|
List<IGroupLayer> tilesList = MapsManager.Instance.MapService.GetAllRasterGroupLayerInMap<IRasterLayer>(); |
|
foreach (var item in tilesList) |
|
{ |
|
ILayerGeneralProperties grouplp = item as ILayerGeneralProperties; |
|
if (grouplp.LayerDescription.ToLower().Contains(".mxd") || grouplp.LayerDescription.ToUpper() == "MXD_Group".ToUpper()) |
|
continue; |
|
|
|
MakeTaskPackageModel mobiledata = new MakeTaskPackageModel(); |
|
mobiledata.IsCheck = true; |
|
mobiledata.IsSlice = false; |
|
mobiledata.FileName = item.Name; |
|
mobiledata.FileAliasName = item.Name; |
|
mobiledata.Type = "图层组"; |
|
mobiledata.Layer = item; |
|
// mobiledata.ExcState = ExcStateEnum.NoImport; |
|
mobiledata.ID = _id; |
|
mobiledata.PID = 0; |
|
mobiledata.IsLayerGroup = true; |
|
_id++; |
|
exportDataList.Add(mobiledata); |
|
|
|
List<IRasterLayer> groupRasterLayerList = null; |
|
ICompositeLayer pComLayer = item as ICompositeLayer; |
|
//for (int i = pComLayer.Count - 1; i >= 0; i--) |
|
int layerIndex = pComLayer.Count; |
|
for (int i = 0; i < pComLayer.Count; i++) |
|
{ |
|
layerIndex--; |
|
ILayer layer = pComLayer.Layer[i]; |
|
if (layer is IRasterLayer) |
|
{ |
|
|
|
groupRasterLayerList = GetAllLayerInThisGroupLayer<IRasterLayer>(pComLayer); |
|
//groupRasterLayerList.Add(layer as IRasterLayer); |
|
List<IRasterLayer> rasterLayerList = new List<IRasterLayer>(); |
|
rasterLayerList.Add(layer as IRasterLayer); |
|
GetBestLevelSize(rasterLayerList); |
|
GetRasterData(rasterLayerList, item.Name, 0, layerIndex, mobiledata.ID); |
|
} |
|
else if (layer is IGroupLayer) |
|
{ |
|
List<IGroupLayer> groupList = new List<IGroupLayer>(); |
|
groupList.Add(layer as IGroupLayer); |
|
if (groupList != null && groupList.Count != 0) |
|
{ |
|
GetGroupRasterData(groupList, null, mobiledata.FileName, mobiledata.MapGroupIndex, layerIndex, mobiledata.ID); |
|
} |
|
} |
|
} |
|
|
|
if (groupRasterLayerList!=null && groupRasterLayerList.Count != 0) |
|
{ |
|
mobiledata.Type = "瓦片"; |
|
mobiledata.Make = "未制作"; |
|
mobiledata.Layer = groupRasterLayerList; |
|
mobiledata.LayerIndex = pComLayer.Count; |
|
GetBestLevelSize(groupRasterLayerList); |
|
} |
|
else |
|
{ |
|
mobiledata.ExcState = ExcStateEnum.NoImport; |
|
} |
|
} |
|
if (exportDataList.Count != 0) |
|
{ |
|
List<MakeTaskPackageModel> exportDataListShow = new List<MakeTaskPackageModel>(); |
|
string isaddstr = ""; |
|
|
|
for (int i = 0; i < exportDataList.Count; i++) |
|
{ |
|
if (!isaddstr.Contains("-" + exportDataList[i].FileName)) |
|
{ |
|
MakeTaskPackageModel model = new MakeTaskPackageModel(); |
|
model = exportDataList[i]; |
|
exportDataListShow.Add(model); |
|
isaddstr += "-" + exportDataList[i].FileName; |
|
} |
|
} |
|
exportDataList = exportDataListShow; |
|
} |
|
this.rwzzTreeList.ItemsSource = exportDataList; |
|
} |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取列表数据失败:" + ex); |
|
MessageHelper.ShowError("获取列表数据失败:" + ex); |
|
} |
|
} |
|
|
|
private void GetGroupRasterData(List<IGroupLayer> tilesList, List<ILayer> layerList, string groupName, int groupIndex, int layerIndex, int pid) |
|
{ |
|
|
|
try |
|
{ |
|
foreach (var item in tilesList) |
|
{ |
|
// layerIndex++; |
|
ILayerGeneralProperties grouplp = item as ILayerGeneralProperties; |
|
if (grouplp.LayerDescription.ToLower().Contains(".mxd") || grouplp.LayerDescription.ToUpper() == "MXD_Group".ToUpper()) |
|
continue; |
|
|
|
MakeTaskPackageModel mobiledata = new MakeTaskPackageModel(); |
|
mobiledata.IsCheck = true; |
|
mobiledata.IsSlice = false; |
|
mobiledata.Type = "瓦片"; |
|
mobiledata.FileName = item.Name; |
|
mobiledata.FileAliasName = item.Name; |
|
mobiledata.Make = "未制作"; |
|
mobiledata.LayerIndex = layerIndex; |
|
if (layerList != null) |
|
mobiledata.MapGroupIndex = layerList.IndexOf(item); |
|
else |
|
mobiledata.MapGroupIndex = groupIndex; |
|
if (string.IsNullOrWhiteSpace(groupName)) |
|
mobiledata.MapGroupName = item.Name; |
|
else |
|
mobiledata.MapGroupName = groupName; |
|
|
|
ICompositeLayer pComLayer = item as ICompositeLayer; |
|
mobiledata.Layer = GetAllLayerInThisGroupLayer<IRasterLayer>(pComLayer); |
|
mobiledata.OutPath = @"Kingoit\phonemap_landsurvey\projects"; |
|
List<IRasterLayer> rasterList = mobiledata.Layer as List<IRasterLayer>; |
|
GetBestLevelSize(rasterList); |
|
mobiledata.ID = _id; |
|
mobiledata.PID = pid; |
|
mobiledata.IsLayerGroup = true; |
|
_id++; |
|
exportDataList.Add(mobiledata); |
|
//rasterDataList.Add(mobiledata); |
|
|
|
//for (int i = pComLayer.Count-1; i >=0; i--) |
|
int index = pComLayer.Count; |
|
for (int i = 0; i < pComLayer.Count; i++) |
|
{ |
|
index--; |
|
ILayer layer = pComLayer.Layer[i]; |
|
if (layer is IRasterLayer) |
|
{ |
|
List<IRasterLayer> rasterLayerList = new List<IRasterLayer>(); |
|
rasterLayerList.Add(layer as IRasterLayer); |
|
GetBestLevelSize(rasterLayerList); |
|
GetRasterData(rasterLayerList, item.Name, 0, index, mobiledata.ID); |
|
} |
|
else if (layer is IGroupLayer) |
|
{ |
|
List<IGroupLayer> groupList = new List<IGroupLayer>(); |
|
groupList.Add(layer as IGroupLayer); |
|
if (groupList != null && groupList.Count != 0) |
|
{ |
|
GetGroupRasterData(groupList, null, mobiledata.FileName, mobiledata.MapGroupIndex, index, mobiledata.ID); |
|
} |
|
} |
|
|
|
} |
|
//List<IGroupLayer> groupList = GetAllLayerInThisGroupLayer<IGroupLayer>(pComLayer); |
|
//if (groupList != null && groupList.Count != 0) |
|
//{ |
|
// index = groupList.Count; |
|
// groupList.Reverse(); |
|
// GetGroupRasterData(groupList, null, mobiledata.MapGroupName, mobiledata.MapGroupIndex, mobiledata.LayerIndex, mobiledata.ID); |
|
//} |
|
|
|
//List<IRasterLayer> rasterLayerList = GetAllLayerInThisGroupLayer<IRasterLayer>(pComLayer); |
|
//GetBestLevelSize(rasterLayerList); |
|
//rasterLayerList.Reverse(); |
|
//GetRasterData(rasterLayerList, item.Name, 0, index, mobiledata.ID); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取影像数据失败:" + ex); |
|
} |
|
} |
|
|
|
|
|
|
|
private void GetRasterData(List<IRasterLayer> rasterList, string groupName, int groupIndex, int layerIndex, int pid) |
|
{ |
|
try |
|
{ |
|
foreach (var item in rasterList) |
|
{ |
|
//layerIndex++; |
|
ILayerGeneralProperties grouplp = item as ILayerGeneralProperties; |
|
if (grouplp.LayerDescription.ToLower().Contains(".mxd") || grouplp.LayerDescription.ToUpper() == "MXD_Group".ToUpper()) |
|
continue; |
|
|
|
MakeTaskPackageModel mobiledata = new MakeTaskPackageModel(); |
|
mobiledata.IsCheck = true; |
|
mobiledata.IsSlice = false; |
|
mobiledata.Type = "瓦片"; |
|
mobiledata.FileName = item.Name; |
|
mobiledata.FileAliasName = item.Name; |
|
mobiledata.Make = "未制作"; |
|
mobiledata.LayerIndex = layerIndex; |
|
mobiledata.MapGroupIndex = groupIndex; |
|
if (string.IsNullOrWhiteSpace(groupName)) |
|
mobiledata.MapGroupName = item.Name; |
|
else |
|
mobiledata.MapGroupName = groupName; |
|
|
|
List<IRasterLayer> imgsList = new List<IRasterLayer>(); |
|
imgsList.Add(item); |
|
mobiledata.Layer = imgsList; |
|
if (outputPathCfg != null) |
|
{ |
|
mobiledata.OutPath = outputPathCfg.RootDirectory; |
|
mobiledata.TaskName = outputPathCfg.TaskName; |
|
|
|
} |
|
else |
|
{ |
|
mobiledata.OutPath = @"Kingoit\phonemap_landsurvey\projects"; |
|
mobiledata.TaskName = "县级数据"; |
|
} |
|
|
|
|
|
mobiledata.ID = _id; |
|
mobiledata.PID = pid; |
|
mobiledata.IsLayerGroup = false; |
|
_id++; |
|
exportDataList.Add(mobiledata); |
|
//rasterDataList.Add(mobiledata); |
|
|
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取影像数据失败:" + ex); |
|
} |
|
} |
|
|
|
|
|
private void GetVertorData(ILayer player, int mapGroupIndex, int pid) |
|
{ |
|
try |
|
{ |
|
if (player is IGroupLayer) |
|
{ |
|
|
|
IGroupLayer grouplayer = player as IGroupLayer; |
|
ILayerGeneralProperties lp = grouplayer as ILayerGeneralProperties; |
|
|
|
if (lp.LayerDescription.ToUpper() != "JZRWSJ".ToUpper() && lp.LayerDescription.ToUpper() != "CKSJ".ToUpper() && lp.LayerDescription.ToUpper() != "SGYX".ToUpper()) |
|
return; |
|
List<IFeatureLayer> layers = GetSubLayer<IFeatureLayer>(grouplayer as ICompositeLayer); |
|
layers.Reverse(); |
|
foreach (var layer in layers) |
|
{ |
|
IFeatureLayer pFeatureLayer = layer as IFeatureLayer; |
|
string fullPath = GetLayerPathByLayer(pFeatureLayer); |
|
|
|
MakeTaskPackageModel mobiledata = new MakeTaskPackageModel(); |
|
mobiledata.IsCheck = true; |
|
mobiledata.IsSlice = false; |
|
mobiledata.FileName = (layer as IDataset).BrowseName; |
|
mobiledata.FileAliasName = layer.Name; |
|
mobiledata.Make = "未制作"; |
|
mobiledata.LayerIndex = layers.IndexOf(layer); |
|
mobiledata.Layer = layer; |
|
mobiledata.MapGroupIndex = mapGroupIndex; |
|
mobiledata.Type = "矢量"; |
|
mobiledata.OutPath = @"Kingoit\phonemap_wydh\projects"; |
|
mobiledata.TaskName = "县级数据"; |
|
mobiledata.CfgFileName = "layerConfig.xml"; |
|
mobiledata.MapGroupName = grouplayer.Name; |
|
mobiledata.ID = _id; |
|
mobiledata.PID = pid; |
|
mobiledata.IsLayerGroup = false; |
|
if (!string.IsNullOrWhiteSpace(fullPath)) |
|
mobiledata.LayerSource = fullPath; |
|
_id++; |
|
exportDataList.Add(mobiledata); |
|
|
|
} |
|
|
|
|
|
List<IGroupLayer> grouplayers = GetGroupListByIGroupLayer(grouplayer); |
|
grouplayers.Reverse(); |
|
|
|
foreach (var layer in grouplayers) |
|
{ |
|
ILayerGeneralProperties grouplp = layer as ILayerGeneralProperties; |
|
if (grouplp.LayerDescription.ToLower().Contains(".mxd") && !grouplp.LayerDescription.ToLower().Contains("mxd:")) |
|
{ |
|
MakeTaskPackageModel mobiledata = new MakeTaskPackageModel(); |
|
mobiledata.IsCheck = true; |
|
mobiledata.IsSlice = false; |
|
mobiledata.FileName = layer.Name; |
|
mobiledata.FileAliasName = layer.Name; |
|
mobiledata.Make = "未制作"; |
|
mobiledata.LayerIndex = grouplayers.IndexOf(layer); |
|
mobiledata.Layer = layer; |
|
mobiledata.MapGroupIndex = mapGroupIndex; |
|
mobiledata.Type = "瓦片"; |
|
mobiledata.OutPath = @"Kingoit\phonemap_wydh\projects"; |
|
mobiledata.TaskName = "县级数据"; |
|
mobiledata.CfgFileName = "layerConfig.xml"; |
|
mobiledata.MapGroupName = grouplayer.Name; |
|
mobiledata.LayerSource = grouplp.LayerDescription; |
|
mobiledata.ID = _id; |
|
mobiledata.PID = pid; |
|
mobiledata.IsLayerGroup = false; |
|
_id++; |
|
exportDataList.Add(mobiledata); |
|
} |
|
else |
|
{ |
|
if (layer is IGroupLayer) |
|
{ |
|
IGroupLayer newgrouplayer = layer as IGroupLayer; |
|
ILayerGeneralProperties newlp = newgrouplayer as ILayerGeneralProperties; |
|
|
|
if (newlp.LayerDescription.ToUpper() != "MXD_Group".ToUpper()) |
|
{ |
|
List<IFeatureLayer> sublayers = GetSubLayer<IFeatureLayer>(newgrouplayer as ICompositeLayer); |
|
sublayers.Reverse(); |
|
foreach (var newlayer in sublayers) |
|
{ |
|
IFeatureLayer pFeatureLayer = layer as IFeatureLayer; |
|
string fullPath = GetLayerPathByLayer(pFeatureLayer); |
|
MakeTaskPackageModel mobiledata = new MakeTaskPackageModel(); |
|
mobiledata.IsCheck = true; |
|
mobiledata.IsSlice = false; |
|
mobiledata.FileName = (newlayer as IDataset).BrowseName; |
|
mobiledata.FileAliasName = newlayer.Name; |
|
mobiledata.Make = "未制作"; |
|
mobiledata.LayerIndex = sublayers.IndexOf(newlayer); |
|
mobiledata.Layer = newlayer; |
|
mobiledata.MapGroupIndex = mapGroupIndex; |
|
mobiledata.Type = "矢量"; |
|
mobiledata.OutPath = @"Kingoit\phonemap_wydh\projects"; |
|
mobiledata.TaskName = "县级数据"; |
|
mobiledata.CfgFileName = "layerConfig.xml"; |
|
mobiledata.MapGroupName = newgrouplayer.Name; |
|
mobiledata.ID = _id; |
|
mobiledata.PID = pid; |
|
mobiledata.IsLayerGroup = false; |
|
if (!string.IsNullOrWhiteSpace(fullPath)) |
|
mobiledata.LayerSource = fullPath; |
|
_id++; |
|
exportDataList.Add(mobiledata); |
|
|
|
} |
|
} |
|
} |
|
else |
|
{ |
|
IFeatureLayer pFeatureLayer = layer as IFeatureLayer; |
|
string fullPath = GetLayerPathByLayer(pFeatureLayer); |
|
MakeTaskPackageModel mobiledata = new MakeTaskPackageModel(); |
|
mobiledata.IsCheck = true; |
|
mobiledata.IsSlice = false; |
|
mobiledata.FileName = (layer as IDataset).BrowseName; |
|
mobiledata.FileAliasName = layer.Name; |
|
mobiledata.Make = "未制作"; |
|
mobiledata.LayerIndex = mapGroupIndex; |
|
mobiledata.Layer = layer; |
|
mobiledata.MapGroupIndex = -1; |
|
mobiledata.Type = "矢量"; |
|
mobiledata.OutPath = @"Kingoit\phonemap_wydh\projects"; |
|
mobiledata.TaskName = "县级数据"; |
|
mobiledata.CfgFileName = "layerConfig.xml"; |
|
mobiledata.MapGroupName = "其他"; |
|
mobiledata.ID = _id; |
|
mobiledata.PID = pid; |
|
mobiledata.IsLayerGroup = false; |
|
if (!string.IsNullOrWhiteSpace(fullPath)) |
|
mobiledata.LayerSource = fullPath; |
|
_id++; |
|
exportDataList.Add(mobiledata); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取列表矢量数据失败:" + ex); |
|
} |
|
} |
|
|
|
private void GetOtherData(ILayer layer,int mapGroupIndex,string filterWhere) |
|
{ |
|
|
|
try |
|
{ |
|
IFeatureLayer pFeatureLayer = layer as IFeatureLayer; |
|
string fullPath = GetLayerPathByLayer(pFeatureLayer); |
|
|
|
MakeTaskPackageModel mobiledata = new MakeTaskPackageModel(); |
|
mobiledata.IsCheck = true; |
|
mobiledata.IsSlice = false; |
|
mobiledata.FileName = (layer as IDataset).BrowseName; |
|
mobiledata.FileAliasName = layer.Name; |
|
mobiledata.Make = "未制作"; |
|
mobiledata.LayerIndex = mapGroupIndex; |
|
mobiledata.Layer = layer; |
|
mobiledata.MapGroupIndex = -1; |
|
mobiledata.Type = "举证任务"; |
|
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 = "举证任务"; |
|
mobiledata.ID = _id; |
|
mobiledata.PID = 0; |
|
mobiledata.IsLayerGroup = false; |
|
mobiledata.FilterWhere = filterWhere; |
|
if (!string.IsNullOrWhiteSpace(fullPath)) |
|
mobiledata.LayerSource = fullPath; |
|
_id++; |
|
exportDataList.Add(mobiledata); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(string.Format("{0}添加导出列表失败:" + ex)); |
|
MessageHelper.Show(string.Format("{0}添加导出列表失败:" + ex)); |
|
} |
|
} |
|
|
|
|
|
private void GetPiecsData(int mapGroupIndex, int pid, List<ILayer> layerList) |
|
{ |
|
try |
|
{ |
|
int tileIndex = -1; |
|
List<IRasterLayer> rasterList = new List<IRasterLayer>(); |
|
List<IGroupLayer> tilesList = MapsManager.Instance.MapService.GetAllRasterGroupLayerInMap<IRasterLayer>(); |
|
foreach (var item in tilesList) |
|
{ |
|
ILayerGeneralProperties grouplp = item as ILayerGeneralProperties; |
|
if (grouplp.LayerDescription.ToLower().Contains(".mxd") || grouplp.LayerDescription.ToUpper() == "MXD_Group".ToUpper()) |
|
continue; |
|
tileIndex = layerList.IndexOf(item); |
|
MakeTaskPackageModel mobiledata = new MakeTaskPackageModel(); |
|
mobiledata.IsCheck = true; |
|
mobiledata.IsSlice = false; |
|
mobiledata.Type = "瓦片"; |
|
mobiledata.FileName = item.Name; |
|
mobiledata.FileAliasName = item.Name; |
|
mobiledata.Make = "未制作"; |
|
mobiledata.LayerIndex = 1; |
|
mobiledata.MapGroupIndex = tileIndex; |
|
mobiledata.MapGroupName = item.Name; |
|
mobiledata.ID = _id; |
|
mobiledata.PID = pid; |
|
_id++; |
|
|
|
ICompositeLayer pComLayer = item as ICompositeLayer; |
|
mobiledata.Layer = GetAllLayerInGroupLayer<IRasterLayer>(pComLayer); |
|
mobiledata.OutPath = @"Kingoit\phonemap_landsurvey\projects"; |
|
rasterList = mobiledata.Layer as List<IRasterLayer>; |
|
GetBestLevelSize(rasterList); |
|
|
|
exportDataList.Add(mobiledata); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取列表瓦片数据失败:" + ex); |
|
} |
|
} |
|
|
|
private string GetLayerPathByLayer(IFeatureLayer pFeatureLayer) |
|
{ |
|
string fullPath = string.Empty; |
|
try |
|
{ |
|
if (pFeatureLayer != null && pFeatureLayer.FeatureClass != null) |
|
{ |
|
string dataType = (pFeatureLayer.FeatureClass as FeatureClass).Category.Trim(); |
|
string pathName = (pFeatureLayer.FeatureClass as FeatureClass).Workspace.PathName; |
|
string layerName = (pFeatureLayer.FeatureClass as FeatureClass).Name; |
|
string dataSetName = string.Empty; |
|
if (pFeatureLayer.FeatureClass.FeatureDataset != null) |
|
{ |
|
dataSetName = pFeatureLayer.FeatureClass.FeatureDataset.Name; |
|
} |
|
|
|
if (dataType == "Shapefile 要素类") |
|
{ |
|
fullPath = System.IO.Path.Combine(pathName, layerName + ".shp"); |
|
} |
|
else |
|
{ |
|
fullPath = System.IO.Path.Combine(pathName, dataSetName, layerName); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取图层所在文件路径失败:" + ex); |
|
} |
|
return fullPath; |
|
} |
|
|
|
|
|
private void SetExportPath() |
|
{ |
|
try |
|
{ |
|
IWorkCatalog workCatalog = BundleRuntime.Instance.GetFirstOrDefaultService<IWorkCatalog>(); |
|
string code = (MapsManager.Instance.CurrProjectInfo as ProjectInfo).CODE; |
|
string xzqmc = GetXZQMC(code); |
|
string xzqDir = string.Format("{0}({1})", xzqmc, code); |
|
|
|
if (workCatalog != null && !string.IsNullOrWhiteSpace(code)) |
|
{ |
|
string dirName = "外业调绘成果"; |
|
if (this.rdoWRJRWB.IsChecked == true) |
|
dirName = "无人机举证成果"; |
|
|
|
string projectPath = System.IO.Path.Combine(workCatalog.SaveWorkSapcePath, xzqDir, dirName); |
|
if (!System.IO.Directory.Exists(projectPath)) |
|
{ |
|
System.IO.Directory.CreateDirectory(projectPath); |
|
} |
|
|
|
this.txtExportPath.Text = projectPath;//设置默认的输出路径 |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("设置输出路径失败:" + ex); |
|
} |
|
} |
|
|
|
|
|
//获取行政区名称 |
|
private string GetXZQMC(string xzqdm) |
|
{ |
|
string xzqmc = string.Empty; |
|
KGIS.Framework.DBOperator.IRDBHelper rdbHelper = null; |
|
try |
|
{ |
|
string systemPath = SysAppPath.GetDataBasePath() + "System.mdb"; |
|
if (File.Exists(systemPath)) |
|
{ |
|
string connStr = SysConfigsOprator.GetDBConnectionByName("MDBOledbConnection"); |
|
connStr = string.Format(connStr, systemPath); |
|
rdbHelper = RDBFactory.CreateDbHelper(connStr, DatabaseType.MSAccess); |
|
|
|
string strSQL = string.Format("select OBJECTID AS ID, XZQ AS CODE,XZQMC AS NAME from XZQ Where XZQ = '{0}'", xzqdm); |
|
|
|
//string strSQL = string.Format("select OBJECTID AS ID, XZQ AS CODE,XZQMC AS NAME from XZQ Where XZQ like '{0}%'", xzqdm); |
|
DataTable dt = rdbHelper.ExecuteDatatable("Dic", strSQL, true); |
|
|
|
|
|
if (dt != null) |
|
{ |
|
List<DataDicTionary> xzqCoderesult = TBToList.ToList<DataDicTionary>(dt); |
|
foreach (var item in xzqCoderesult) |
|
{ |
|
if (dt.Rows.Count == 1) |
|
xzqmc = item.NAME; |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
//MessageHelper.Show("获取行政区名称失败:" + ex); |
|
} |
|
finally |
|
{ |
|
if (rdbHelper != null) |
|
rdbHelper.DisConnect(); |
|
} |
|
return xzqmc; |
|
} |
|
|
|
|
|
private List<IGroupLayer> GetGroupLayer(ref List<ILayer> NoGroupLayer) |
|
{ |
|
List<IGroupLayer> result = new List<IGroupLayer>(); |
|
IMap map = MapsManager.Instance.MapService.getAxMapControl().Map; |
|
IEnumLayer enumlayer = map.Layers; |
|
ILayer layer = null; |
|
while ((layer = enumlayer.Next()) != null) |
|
{ |
|
if (!(layer is IGroupLayer)) |
|
{ |
|
if (NoGroupLayer == null) |
|
NoGroupLayer = new List<ILayer>(); |
|
NoGroupLayer.Add(layer); |
|
continue; |
|
} |
|
result.Add(layer as IGroupLayer); |
|
} |
|
return result; |
|
} |
|
|
|
|
|
private List<IGroupLayer> GetGroupListByIGroupLayer(IGroupLayer grouplayer) |
|
{ |
|
|
|
List<IGroupLayer> grouplayerList = new List<IGroupLayer>(); |
|
ICompositeLayer pComLayer = grouplayer as ICompositeLayer; |
|
for (int j = 0; j < pComLayer.Count; j++) |
|
{ |
|
ILayer newLayer = pComLayer.get_Layer(j); |
|
|
|
if (newLayer is IGroupLayer) |
|
{ |
|
grouplayerList.Add(newLayer as IGroupLayer); |
|
} |
|
} |
|
return grouplayerList; |
|
} |
|
|
|
|
|
private List<ILayer> GetLayer() |
|
{ |
|
List<ILayer> result = new List<ILayer>(); |
|
ILayer jzrwlayer = MapsManager.Instance.MapService.GetGroupLayer("JZRWSJ"); |
|
if (jzrwlayer is IGroupLayer) |
|
result.Add(jzrwlayer); |
|
IMap map = MapsManager.Instance.MapService.getAxMapControl().Map; |
|
for (int i = 0; i < map.LayerCount; i++) |
|
{ |
|
ILayer layer = MapsManager.Instance.MapService.getAxMapControl().Map.get_Layer(i); |
|
if (layer is IGroupLayer) |
|
result.Add(layer); |
|
} |
|
return result; |
|
} |
|
|
|
|
|
|
|
public List<T> GetSubLayer<T>(ICompositeLayer group) |
|
{ |
|
List<T> result = new List<T>(); |
|
for (int i = 0; i < group.Count; i++) |
|
{ |
|
var item = group.Layer[i]; |
|
if (item is ICompositeLayer) |
|
{ |
|
ILayerGeneralProperties lp = item as ILayerGeneralProperties; |
|
if (lp.LayerDescription.ToLower().Contains(".mxd")) |
|
continue; |
|
|
|
result.AddRange(GetSubLayer<T>(item as ICompositeLayer)); |
|
} |
|
else if (item is T) |
|
{ |
|
result.Add((T)item); |
|
} |
|
} |
|
return result; |
|
} |
|
public List<T> GetAllLayerInGroupLayer<T>(ICompositeLayer groupLayer) |
|
{ |
|
List<T> allLayers = new List<T>(); |
|
if (groupLayer != null && groupLayer.Count > 0) |
|
{ |
|
for (int i = 0; i < groupLayer.Count; i++) |
|
{ |
|
ILayer layer = groupLayer.get_Layer(i); |
|
if (layer is ICompositeLayer && !(layer is ESRI.ArcGIS.Carto.IAnnotationLayer)) |
|
{ |
|
List<T> list = GetAllLayerInGroupLayer<T>(layer as ICompositeLayer); |
|
allLayers.AddRange(list); |
|
} |
|
else |
|
{ |
|
if (layer is T) |
|
{ |
|
allLayers.Add((T)layer); |
|
} |
|
} |
|
} |
|
} |
|
return allLayers; |
|
} |
|
|
|
public List<T> GetAllLayerInThisGroupLayer<T>(ICompositeLayer groupLayer) |
|
{ |
|
List<T> allLayers = new List<T>(); |
|
if (groupLayer != null && groupLayer.Count > 0) |
|
{ |
|
for (int i = 0; i < groupLayer.Count; i++) |
|
{ |
|
ILayer layer = groupLayer.get_Layer(i); |
|
|
|
if (layer is T) |
|
{ |
|
allLayers.Add((T)layer); |
|
} |
|
} |
|
} |
|
return allLayers; |
|
} |
|
|
|
|
|
private void RdoWYDHRWB_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
GetExportDataList(); |
|
SetExportPath(); |
|
this.btnAddLayer.IsEnabled = true; |
|
this.btnAddLayerGroup.IsEnabled = true; |
|
this.btnExport.IsEnabled = true; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("选择外业调绘任务包失败:" + ex); |
|
MessageHelper.Show("选择外业调绘任务包失败:" + ex); |
|
} |
|
} |
|
|
|
private void RdoWRJRWB_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
GetWRJExportDataList(); |
|
SetExportPath(); |
|
List<MakeTaskPackageModel> modelList = this.exportDataList.FindAll(x => x.FileName == "JCTB" && x.Type == "举证任务"); |
|
if (modelList != null && modelList.Count != 0) |
|
this.btnAddLayer.IsEnabled = false; |
|
else |
|
this.btnAddLayer.IsEnabled = true; |
|
|
|
this.btnAddLayerGroup.IsEnabled = false; |
|
this.btnExport.IsEnabled = true; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("选择无人机任务包失败:" + ex); |
|
MessageHelper.Show("选择无人机任务包失败:" + ex); |
|
} |
|
} |
|
|
|
private string CheckFieldValue() |
|
{ |
|
|
|
string msg = string.Empty; |
|
try |
|
{ |
|
List<MakeTaskPackageModel> modelList = this.exportDataList.FindAll(x => x.FileName == "JCTB" && x.FileAliasName == "监测图斑" && x.IsCheck == true); |
|
if (modelList != null && modelList.Count != 0) |
|
{ |
|
Dictionary<string, string> fieldsDic = new Dictionary<string, string>(); |
|
fieldsDic.Add("BSM", "标识码"); |
|
fieldsDic.Add("TBLX", "地块类型"); |
|
fieldsDic.Add("XZQDM", "县级行政区代码"); |
|
fieldsDic.Add("XMC", "县级行政区名称"); |
|
fieldsDic.Add("TBBH", "地块编号"); |
|
fieldsDic.Add("TBMJ", "地块面积"); |
|
fieldsDic.Add("XZB", "X坐标"); |
|
fieldsDic.Add("YZB", "Y坐标"); |
|
fieldsDic.Add("TBFW", "地块范围"); |
|
|
|
ILayer jctblayer = MapsManager.Instance.MapService.GetFeatureLayerByName("JCTB"); |
|
if (jctblayer != null) |
|
{ |
|
IQueryFilter pQueryFilter = new QueryFilterClass(); |
|
IFeatureLayer pjctbFeatureLayer = jctblayer as IFeatureLayer; |
|
foreach (var item in fieldsDic) |
|
{ |
|
int fieldIndex = pjctbFeatureLayer.FeatureClass.FindField(item.Key); |
|
if (fieldIndex > -1) |
|
{ |
|
IField field = pjctbFeatureLayer.FeatureClass.Fields.Field[fieldIndex]; |
|
if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeString) |
|
{ |
|
pQueryFilter.WhereClause = string.Format("{0} is null or {0}=''", item.Key); |
|
} |
|
else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeDouble) |
|
{ |
|
|
|
pQueryFilter.WhereClause = string.Format("{0} is null or {0}=0 or {0}=0.00", item.Key); |
|
} |
|
} |
|
|
|
if (!string.IsNullOrWhiteSpace(pQueryFilter.WhereClause)) |
|
{ |
|
int count = pjctbFeatureLayer.FeatureClass.FeatureCount(pQueryFilter); |
|
if (count > 0) |
|
msg += string.Format("[{0}]字段存在空值\r\n", item.Value); |
|
} |
|
} |
|
|
|
if (!string.IsNullOrWhiteSpace(msg)) |
|
msg = string.Format("请检查{0}:\r\n{1}", pjctbFeatureLayer.Name, msg); |
|
|
|
} |
|
} |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("验证监测图斑必填字段失败:" + ex); |
|
MessageHelper.Show("验证监测图斑必填字段失败:" + ex); |
|
return null; |
|
} |
|
|
|
return msg; |
|
} |
|
|
|
private void txtMaxScale_TextChanged(object sender, TextChangedEventArgs e) |
|
{ |
|
try |
|
{ |
|
if (string.IsNullOrEmpty(txtMaxScale.Text)) |
|
return; |
|
if (this.comMinScale == null) |
|
return; |
|
int MaxScale = 0; |
|
int.TryParse(txtMaxScale.Text, out MaxScale); |
|
this.comMinScale.Items.Clear(); |
|
|
|
var model = this.exportDataList.Find(x => x.FileName.Contains(".mxd")); |
|
if (model != null) |
|
{ |
|
this.maxDis = GetMaxDistance(model.LayerSource); |
|
} |
|
GetAllScale(MaxScale, maxDis); |
|
} |
|
catch |
|
{ |
|
|
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 生成比例尺 |
|
/// </summary> |
|
/// <param name="maxScale">最大比例尺</param> |
|
/// <param name="maxDistance">最大距离</param> |
|
/// <returns></returns> |
|
private List<int> GetAllScale(int maxScale, double maxDistance) |
|
{ |
|
List<int> lstScale = new List<int>(); |
|
|
|
double distance = 0; |
|
int scaleNow = maxScale; |
|
int minScale = (int)(maxDistance * 96 / (256 * 0.0254)); |
|
distance = scaleNow * 256 * 0.0254 / 96; |
|
if (minScale <= scaleNow) |
|
{ |
|
lstScale.Add(scaleNow); |
|
this.comMinScale.Items.Add(scaleNow); |
|
return lstScale; |
|
} |
|
lstScale.Add(maxScale); |
|
while (minScale > scaleNow) |
|
{ |
|
scaleNow = scaleNow * 2; |
|
//distance = scaleNow * 256 * 0.0254 / 96;//计算实际距离 |
|
lstScale.Add(scaleNow); |
|
this.comMinScale.Items.Add(scaleNow); |
|
} |
|
this.comMinScale.SelectedIndex = this.comMinScale.Items.Count - 1; |
|
//lstScale.Add(minScale); |
|
return lstScale; |
|
} |
|
|
|
/// <summary> |
|
/// 全选/反选 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void checkAll_Click(object sender, RoutedEventArgs e) |
|
{ |
|
|
|
if (this.exportDataList == null || this.exportDataList.Count <= 0) return; |
|
for (int i = 0; i < this.exportDataList.Count; i++) |
|
{ |
|
if (this.checkAll.IsChecked == true) |
|
this.exportDataList[i].IsCheck = true; |
|
else |
|
this.exportDataList[i].IsCheck = false; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 选择地数据 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void btnSelectPlaceNameData_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
KGIS.Framework.Utils.Dialog.OpenFileDialog dialog = new KGIS.Framework.Utils.Dialog.OpenFileDialog(); |
|
dialog.DefaultExt = ".xls"; |
|
dialog.Title = "请选择地名数据"; |
|
dialog.Filter = "Excel文件(*.xls)|*.xls|Excel文件(*.xlsx)|*.xlsx"; |
|
dialog.RestoreDirectory = true; |
|
if (dialog.ShowDialog()) |
|
{ |
|
this.txtPlaceNameData.Text = dialog.FileName; |
|
} |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("选择地名数据失败:" + ex); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 下载地名模板 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void btnSelectPlaceNameTemplate_Click(object sender, RoutedEventArgs e) |
|
{ |
|
var saveFileDialog = new Microsoft.Win32.SaveFileDialog() |
|
{ |
|
Filter = "Excel Files(*.xls)|*.xls" |
|
}; |
|
var result = saveFileDialog.ShowDialog(); |
|
if (result.Value) |
|
{ |
|
var excelfileurl = saveFileDialog.FileName; |
|
var sourcesfile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "工作空间", "模板", "地名数据模板", "地名数据.xls"); |
|
if (System.IO.File.Exists(sourcesfile)) |
|
{ |
|
try |
|
{ |
|
System.IO.File.Copy(sourcesfile, excelfileurl, true); |
|
if (MessageHelper.ShowYesNoAndTips("地名数据模板下载成功,是否打开?") == System.Windows.Forms.DialogResult.Yes) |
|
{ |
|
Process.Start(excelfileurl); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("下载地名数据模板失败,错误信息:" + ex); |
|
MessageHelper.ShowError("下载地名数据模板失败,错误信息:" + ex); |
|
} |
|
} |
|
else |
|
{ |
|
MessageHelper.ShowError("地名数据模板文件不存在,导出失败!"); |
|
} |
|
} |
|
} |
|
|
|
|
|
private void btnAddLayerGroup_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
FrmAddListLayerGroup frm = new FrmAddListLayerGroup(); |
|
frm.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; |
|
frm.Width = 450; |
|
frm.Height = 150; |
|
frm.Refresh = RefreshExportList; |
|
frm.exportDataList =this.exportDataList; |
|
frm.ShowInMainWindow(true); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("添加图层组名称失败:" + ex); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 添加图层 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void btnAddLayer_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
FrmAddListLayer frm = new FrmAddListLayer(); |
|
frm.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; |
|
frm.Width = 550; |
|
frm.Height = 300; |
|
|
|
if (this.rdoWRJRWB.IsChecked == true) |
|
{ |
|
frm.isWRJRWB = true; |
|
} |
|
else |
|
{ |
|
frm.isWRJRWB = false; |
|
} |
|
|
|
frm.Refresh = RefreshExportList; |
|
frm.exportDataList = exportDataList; |
|
frm.selectedRWDCZTInx = this.comRWDCZT.SelectedIndex; |
|
frm.outPutPathCfg = outputPathCfg; |
|
frm.ShowInMainWindow(true); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("添加图层失败:" + ex); |
|
MessageHelper.Show("添加图层失败:" + ex); |
|
} |
|
} |
|
|
|
private void RefreshExportList() |
|
{ |
|
try |
|
{ |
|
this.rwzzTreeList.ItemsSource = null; |
|
this.rwzzTreeList.ItemsSource =this.exportDataList; |
|
if (this.rdoWRJRWB.IsChecked == true) |
|
{ |
|
this.btnAddLayerGroup.IsEnabled = false; |
|
this.btnAddLayer.IsEnabled = false; |
|
} |
|
else |
|
{ |
|
this.btnAddLayerGroup.IsEnabled = true; |
|
this.btnAddLayer.IsEnabled = true; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("刷新列表数据失败:" + ex); |
|
MessageHelper.Show("刷新列表数据失败:" + ex); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 删除选中列表的数据 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void btnDelLayer_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
if (this.rwzzTreeList.ItemsSource == null) |
|
{ |
|
MessageHelper.Show("列表数据为空,无法进行数据删除"); |
|
return; |
|
} |
|
|
|
|
|
if (this.rwzzTreeList.SelectedItem == null) |
|
{ |
|
MessageHelper.Show("未选中需要删除的数据"); |
|
return; |
|
} |
|
|
|
delModelList = new List<MakeTaskPackageModel>(); |
|
MakeTaskPackageModel selectModel = this.rwzzTreeList.SelectedItem as MakeTaskPackageModel; |
|
List<MakeTaskPackageModel> modelList = this.rwzzTreeList.ItemsSource as List<MakeTaskPackageModel>; |
|
if (selectModel != null) |
|
{ |
|
delModelList.Add(selectModel); |
|
GetDelData(modelList, selectModel.ID); |
|
if (delModelList.Count != 0) |
|
{ |
|
foreach (var item in delModelList) |
|
{ |
|
modelList.Remove(item); |
|
} |
|
} |
|
this.rwzzTreeList.RefreshData(); |
|
} |
|
|
|
if (this.rdoWRJRWB.IsChecked == true) |
|
{ |
|
List<MakeTaskPackageModel> jzrwModelList = this.exportDataList.FindAll(x => x.Type == "举证任务"); |
|
if (jzrwModelList != null && jzrwModelList.Count != 0) |
|
this.btnAddLayer.IsEnabled = false; |
|
else |
|
this.btnAddLayer.IsEnabled = true; |
|
} |
|
|
|
|
|
// List<MakeTaskPackageModel> delModelList = new List<MakeTaskPackageModel>(); |
|
// List<MakeTaskPackageModel> modelList = this.rwzzTreeList.ItemsSource as List<MakeTaskPackageModel>; |
|
// if (modelList != null && modelList.Count != 0) |
|
// { |
|
// foreach (var item in modelList) |
|
// { |
|
// if (item.IsCheck == true) |
|
// delModelList.Add(item); |
|
// } |
|
// } |
|
|
|
// if (delModelList.Count != 0) |
|
// { |
|
// foreach (var item in delModelList) |
|
// { |
|
// modelList.Remove(item); |
|
// } |
|
// } |
|
|
|
// this.rwzzTreeList.ItemsSource = modelList; |
|
// this.exportDataList = modelList; |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("删除列表图层数据失败:" + ex); |
|
MessageHelper.ShowError("删除列表图层数据失败:" + ex); |
|
} |
|
} |
|
|
|
private void GetDelData(List<MakeTaskPackageModel> modelList, int id) |
|
{ |
|
try |
|
{ |
|
List<MakeTaskPackageModel> subModelList = modelList.FindAll(x => x.PID == id); |
|
if (subModelList != null && subModelList.Count != 0) |
|
{ |
|
string tableName = string.Empty; |
|
foreach (var item in subModelList) |
|
{ |
|
delModelList.Add(item); |
|
GetDelData(modelList, item.ID); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("获取删除数据失败:" + ex); |
|
MessageHelper.ShowError("获取删除数据失败:" + ex); |
|
} |
|
|
|
} |
|
|
|
/// <summary> |
|
/// 举证任务图层选项发生改变时 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void JzrwView_NodeCheckStateChanged(object sender, DevExpress.Xpf.Grid.TreeList.TreeListNodeEventArgs e) |
|
{ |
|
try |
|
{ |
|
if (e.Row != null) |
|
{ |
|
MakeTaskPackageModel model = e.Row as MakeTaskPackageModel; |
|
if (model.IsLayerGroup && model.Type == "图层组") |
|
{ |
|
List<MakeTaskPackageModel> modelList = this.exportDataList.FindAll(x => x.PID == model.ID); |
|
if (modelList != null && modelList.Count != 0) |
|
{ |
|
foreach (MakeTaskPackageModel item in modelList) |
|
{ |
|
item.IsCheck = model.IsCheck; |
|
} |
|
} |
|
} |
|
else if( model.Type != "瓦片") |
|
{ |
|
List<MakeTaskPackageModel> parentModelList = this.exportDataList.FindAll(x => x.ID == model.PID); |
|
if (parentModelList != null && parentModelList.Count != 0) |
|
{ |
|
MakeTaskPackageModel parentModel = parentModelList[0]; |
|
if(parentModel.IsCheck!=model.IsCheck) |
|
{ |
|
|
|
List<MakeTaskPackageModel> modelList = this.exportDataList.FindAll(x => x.PID == model.PID); |
|
List<MakeTaskPackageModel> checkModelList = this.exportDataList.FindAll(x => x.PID == model.PID && x.IsCheck == true); |
|
if (modelList.Count == checkModelList.Count) |
|
parentModel.IsCheck = model.IsCheck; |
|
else |
|
{ |
|
parentModel.IsCheck = false; |
|
|
|
foreach (MakeTaskPackageModel item in checkModelList) |
|
{ |
|
item.IsCheck = true; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("改变举证任务图层选项失败:" + ex); |
|
MessageHelper.Show("改变举证任务图层选项失败:" + ex); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 关闭窗体结束所有正在导出kotoles、ko文件的进程 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void FrmMobileDataExport_Closing(object sender, CancelEventArgs e) |
|
{ |
|
///获取影像生成kotiles的exe运行程序 |
|
Process[] rasterPros = Process.GetProcessesByName("Kingo.Plugin.RasterToKOTilesApp"); |
|
if (rasterPros != null && rasterPros.Count() != 0) |
|
{ |
|
foreach (Process pro in rasterPros) |
|
{ |
|
pro.Kill(); |
|
} |
|
} |
|
|
|
///获取shape生成ko的exe运行程序 |
|
Process[] shapePros = Process.GetProcessesByName("Kingo.Plugin.ShapeToKOApp"); |
|
if (shapePros != null && shapePros.Count() != 0) |
|
{ |
|
foreach (Process pro in shapePros) |
|
{ |
|
pro.Kill(); |
|
} |
|
} |
|
} |
|
|
|
|
|
public class ParamConfig |
|
{ |
|
//[DataMember] |
|
public int WKID { get; set; } |
|
//[DataMember] |
|
public double DelX { get; set; } |
|
//[DataMember] |
|
public double DelY { get; set; } |
|
//[DataMember] |
|
public double DelZ { get; set; } |
|
//[DataMember] |
|
public double RX { get; set; } |
|
//[DataMember] |
|
public double RY { get; set; } |
|
//[DataMember] |
|
public double RZ { get; set; } |
|
//[DataMember] |
|
public double K { get; set; } |
|
//[DataMember] |
|
public double OX { get; set; } |
|
//[DataMember] |
|
public double OY { get; set; } |
|
//[DataMember] |
|
public bool IsValidLic { get; set; } |
|
//[DataMember] |
|
public bool IsAutoDeleteData { get; set; } |
|
//[DataMember] |
|
public bool IsDecryptData { get; set; } |
|
//[DataMember] |
|
public int ValidErrorTimes { get; set; } |
|
//[DataMember] |
|
public bool IsAutoDeleteNotUse { get; set; } |
|
//[DataMember] |
|
public int NoUseDays { get; set; } |
|
//[DataMember] |
|
public bool IsAutoDeleteLicExpired { get; set; } |
|
|
|
public string ToJSON() |
|
{ |
|
Newtonsoft.Json.JsonSerializerSettings pJsonSerializerSettings = new Newtonsoft.Json.JsonSerializerSettings(); |
|
string json = Newtonsoft.Json.JsonConvert.SerializeObject(this, pJsonSerializerSettings); |
|
return json; |
|
} |
|
|
|
public static ParamConfig FormJSON(string jsonString) |
|
{ |
|
return (ParamConfig)Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString, typeof(ParamConfig)); |
|
} |
|
} |
|
|
|
|
|
} |
|
}
|
|
|