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.
818 lines
29 KiB
818 lines
29 KiB
using System; |
|
using System.Collections.Generic; |
|
using System.ComponentModel; |
|
using System.Drawing; |
|
using System.Data; |
|
using System.Text; |
|
using System.Windows.Forms; |
|
using System.Threading; |
|
using ESRI.ArcGIS.Geometry; |
|
using ESRI.ArcGIS.Display; |
|
using System.IO; |
|
using System.Data.SQLite; |
|
using ESRI.ArcGIS.Carto; |
|
using System.Xml.Serialization; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Helper; |
|
using KGIS.Framework.OpenData.Control; |
|
using KGIS.Framework.OpenData.Filter; |
|
using KGIS.Framework.OpenData.InterFace; |
|
using ESRI.ArcGIS.esriSystem; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using Kingo.Plugin.MakeTaskPackage.Entity; |
|
using Raster2KOTiles; |
|
using OSGeo.OGR; |
|
using OSGeo.GDAL; |
|
|
|
|
|
|
|
namespace Kingo.Plugin.MakeTaskPackage.View |
|
{ |
|
|
|
public delegate void CutReport(int cutCount, int allCount); |
|
public delegate void CutDown(DateTime dt, double cutTime); |
|
public delegate void SetCutFileName(string fileName); |
|
public partial class UCRasterMultCut : UserControl |
|
{ |
|
public UCRasterMultCut() |
|
{ |
|
InitializeComponent(); |
|
this.compressListBox.SelectedIndex = 0; |
|
} |
|
private MultRaster2MBTiles pMergeRaster = null; |
|
private double distance = 100; |
|
private EnumSaveType saveType = EnumSaveType.Level; |
|
public event CutReport ReportMess = null; |
|
public event CutDown DownTime = null; |
|
public event SetCutFileName SetFileName = null; |
|
private void btnOk_Click(object sender, EventArgs e) |
|
{ |
|
|
|
} |
|
|
|
private void UnionCallBack() |
|
{ |
|
this.Invoke(new MethodInvoker(() => |
|
{ |
|
pMergeRaster = new MultRaster2MBTiles(); |
|
List<string> files = new List<string>(); |
|
int nThread = 1; |
|
try |
|
{ |
|
foreach (var item in this.listBoxFileList.Items) |
|
{ |
|
files.Add(item.ToString()); |
|
} |
|
if (files.Count == 0) |
|
throw new Exception("请选择文件"); |
|
System.Drawing.Imaging.ImageFormat imgFormat = System.Drawing.Imaging.ImageFormat.Jpeg; |
|
if (this.cboxTileFormat.Text.ToLower() == "png") |
|
{ |
|
imgFormat = System.Drawing.Imaging.ImageFormat.Png; |
|
} |
|
pMergeRaster.ImgFormat = imgFormat; |
|
pMergeRaster.Level = Convert.ToInt32(this.txtLevel.Text); |
|
pMergeRaster.TiledSize = Convert.ToInt32(this.txtPicSize.Text); ; |
|
pMergeRaster.MBTilesPath = this.txtSaveFilePath.Text; |
|
pMergeRaster.TopLayer = toplayer; |
|
pMergeRaster.SaveType = saveType; |
|
switch (this.compressListBox.Text) |
|
{ |
|
case "高": |
|
pMergeRaster.CompressRate = 25; |
|
break; |
|
case "中": |
|
pMergeRaster.CompressRate = 40; |
|
break; |
|
case "低": |
|
pMergeRaster.CompressRate = 60; |
|
break; |
|
default: |
|
pMergeRaster.CompressRate = 25; |
|
break; |
|
} |
|
if (string.IsNullOrEmpty(this.txtSaveFilePath.Text)) |
|
throw new Exception("请设置保存位置"); |
|
nThread = Convert.ToInt32(this.txtThreadNo.Text); |
|
nThread = nThread <= 0 ? 1 : nThread; |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.Show( "参数设置异常"+ ex); |
|
return; |
|
} |
|
|
|
DateTime dt1 = DateTime.Now; |
|
pMergeRaster.CreatDown += (s, e1) => |
|
{ |
|
DateTime dt3 = DateTime.Now; |
|
if (!this.IsDisposed && !this.Disposing) |
|
{ |
|
this.Invoke(new MethodInvoker(() => |
|
{ |
|
if (DownTime != null) |
|
DownTime(dt3, dt3.Subtract(dt1).TotalSeconds); |
|
SetState(false, dt3.Subtract(dt1).TotalSeconds.ToString("0.0")); |
|
GC.Collect(); |
|
})); |
|
|
|
|
|
} |
|
}; |
|
pMergeRaster.Report += (s, c) => |
|
{ |
|
if (!this.IsDisposed && !this.Disposing) |
|
{ |
|
this.Invoke(new MethodInvoker(() => |
|
{ |
|
this.lbTips.Text = string.Format("{0}/{1}", c, s); |
|
if (ReportMess != null) |
|
{ |
|
//进度条控制 |
|
ReportMess(c, s); |
|
} |
|
})); |
|
} |
|
}; |
|
try |
|
{ |
|
pMergeRaster.CreateMulFilesKOTiles(files, nThread); |
|
SetState(true); |
|
} |
|
catch (Exception ex) |
|
{ |
|
if (DownTime != null) |
|
DownTime(DateTime.Now, 0); |
|
MessageBox.Show(ex.Message, "提示"); |
|
} |
|
})); |
|
} |
|
private void Test() |
|
{ } |
|
|
|
private void SetState(bool isRunning, string msg = null) |
|
{ |
|
this.groupBox1.Enabled = !isRunning; |
|
this.groupBox2.Enabled = !isRunning; |
|
this.btnOk.Enabled = !isRunning; |
|
this.progressBar1.Visible = isRunning; |
|
this.groupBox3.Enabled = !isRunning; |
|
if (isRunning) |
|
{ |
|
this.lbTips.Text = "处理中……"; |
|
} |
|
else |
|
{ |
|
if (msg == null) |
|
{ |
|
this.lbTips.Text = ""; |
|
} |
|
else |
|
{ |
|
this.lbTips.Text = "耗时" + msg + "秒"; |
|
} |
|
} |
|
} |
|
|
|
private void txtSaveFilePath_Click(object sender, EventArgs e) |
|
{ |
|
|
|
} |
|
|
|
private void btnAdd_Click(object sender, EventArgs e) |
|
{ |
|
try |
|
{ |
|
if (this.openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) |
|
{ |
|
this.listBoxFileList.Items.AddRange(this.openFileDialog1.FileNames); |
|
if (SetFileName != null) |
|
{ |
|
string fileName = System.IO.Path.GetFileNameWithoutExtension(this.openFileDialog1.FileNames[0]); |
|
if (fileName.Length > 6) |
|
SetFileName(fileName.Substring(0, 6)); |
|
} |
|
GetBestLevelSize(); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.Show("增加影像文件报错:" + ex); |
|
} |
|
} |
|
|
|
private void btnDelete_Click(object sender, EventArgs e) |
|
{ |
|
try |
|
{ |
|
if (this.listBoxFileList.SelectedItem != null) |
|
{ |
|
int index = this.listBoxFileList.SelectedIndex; |
|
this.listBoxFileList.Items.Remove(this.listBoxFileList.SelectedItem); |
|
if (this.listBoxFileList.Items.Count > index) |
|
{ |
|
this.listBoxFileList.SelectedIndex = index; |
|
} |
|
else if (index != 0) |
|
{ |
|
this.listBoxFileList.SelectedIndex = index - 1; |
|
} |
|
GetBestLevelSize(); |
|
} |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.Show("删除影像文件报错:" + ex); |
|
} |
|
} |
|
public void SetParams(int level, int threadNum, int tileSize, string tileType) |
|
{ |
|
this.txtLevel.Text = level.ToString(); |
|
this.txtPicSize.Text = tileSize.ToString(); |
|
this.txtThreadNo.Text = threadNum.ToString(); |
|
this.cboxTileFormat.SelectedIndex = tileType == "png" ? 0 : 1; |
|
} |
|
|
|
private void GetBestLevelSize() |
|
{ |
|
List<string> files = new List<string>(); |
|
foreach (var item in this.listBoxFileList.Items) |
|
{ |
|
if (System.IO.Path.GetExtension(item.ToString()) != ".kotiles") |
|
{ |
|
files.Add(item.ToString()); |
|
} |
|
} |
|
if (files.Count == 0) |
|
return; |
|
|
|
//// 注册所有的驱动 |
|
//Ogr.RegisterAll(); |
|
//Gdal.AllRegister(); |
|
int level, tileSize; |
|
double resolution = MultRaster2MBTiles.GetBestLevelAndSize(files, out level, out tileSize); |
|
if (level != 0 && tileSize != 0) |
|
{ |
|
this.txtLevel.Text = level.ToString(); |
|
this.txtPicSize.Text = tileSize.ToString(); |
|
this.txtResolution.Text = resolution.ToString("0.00"); |
|
} |
|
|
|
} |
|
|
|
private void UCRasterMultCut_Load(object sender, EventArgs e) |
|
{ |
|
this.cboxTileFormat.SelectedIndex = 0; |
|
} |
|
|
|
private void btnBrowser_Click(object sender, EventArgs e) |
|
{ |
|
if (!string.IsNullOrEmpty(this.txtSaveFilePath.Text)) |
|
{ |
|
string filename =System.IO.Path.GetFileName(this.txtSaveFilePath.Text); |
|
if (!string.IsNullOrEmpty(filename)) |
|
this.saveFileDialog1.FileName = filename; |
|
} |
|
if (this.saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) |
|
{ |
|
this.txtSaveFilePath.Text = this.saveFileDialog1.FileName; |
|
} |
|
} |
|
|
|
private void btnUp_Click(object sender, EventArgs e) |
|
{ |
|
if (this.listBoxFileList.SelectedItem != null && this.listBoxFileList.SelectedIndex != 0) |
|
{ |
|
object obj = this.listBoxFileList.SelectedItem; |
|
int index = this.listBoxFileList.SelectedIndex; |
|
this.listBoxFileList.Items.Remove(obj); |
|
this.listBoxFileList.Items.Insert(index - 1, obj); |
|
this.listBoxFileList.SelectedItem = obj; |
|
} |
|
} |
|
|
|
private void btnDown_Click(object sender, EventArgs e) |
|
{ |
|
if (this.listBoxFileList.SelectedItem != null && this.listBoxFileList.SelectedIndex != this.listBoxFileList.Items.Count - 1) |
|
{ |
|
object obj = this.listBoxFileList.SelectedItem; |
|
int index = this.listBoxFileList.SelectedIndex; |
|
this.listBoxFileList.Items.Remove(obj); |
|
this.listBoxFileList.Items.Insert(index + 1, obj); |
|
this.listBoxFileList.SelectedItem = obj; |
|
} |
|
} |
|
|
|
private void btnGetResolution_Click(object sender, EventArgs e) |
|
{ |
|
List<string> files = new List<string>(); |
|
foreach (var item in this.listBoxFileList.Items) |
|
{ |
|
files.Add(item.ToString()); |
|
} |
|
if (files.Count == 0) |
|
return; |
|
try |
|
{ |
|
double resolution = MultRaster2MBTiles.GetResolution(files, Convert.ToInt32(this.txtLevel.Text), Convert.ToInt32(this.txtPicSize.Text)); |
|
this.txtResolution.Text = resolution.ToString("0.00"); |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
//MessageBox.Show(ex.Message); |
|
} |
|
} |
|
|
|
public void SetRasterFiles(List<string> files) |
|
{ |
|
this.listBoxFileList.Items.Clear(); |
|
this.listBoxFileList.Items.AddRange(files.ToArray()); |
|
GetBestLevelSize(); |
|
} |
|
|
|
public void SetSaveFilePath(string filepath) |
|
{ |
|
if (!string.IsNullOrEmpty(filepath) && filepath.EndsWith(".kotiles")) |
|
{ |
|
this.txtSaveFilePath.Text = filepath; |
|
} |
|
} |
|
|
|
public void SetLayerInfos(List<LayerInfo> layerInfos) |
|
{ |
|
this.listBoxVector.Items.Clear(); |
|
this.listBoxFileList.Items.AddRange(layerInfos.ToArray()); |
|
this.selectMdbLayer.Clear(); |
|
this.selectMdbLayer.AddRange(layerInfos); |
|
} |
|
|
|
public void OnFormClosing(object sender, FormClosingEventArgs e) |
|
{ |
|
if (this.progressBar1.Visible) |
|
{ |
|
if (MessageBox.Show("正在切片中,确定退出?", "提示", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No) |
|
{ |
|
e.Cancel = true; |
|
} |
|
else |
|
{ |
|
if (pMergeRaster != null) |
|
{ |
|
pMergeRaster.StopCreateMulFilesKOTiles(); |
|
pMergeRaster = null; |
|
} |
|
} |
|
} |
|
} |
|
|
|
public bool IsProcessing |
|
{ |
|
get { return this.progressBar1.Visible; } |
|
} |
|
|
|
private List<LayerInfo> selectMdbLayer = null; |
|
private void btnAddVector_Click(object sender, EventArgs e) |
|
{ |
|
if (this.openFileDialog2.ShowDialog() == DialogResult.OK) |
|
{ |
|
string[] files = this.openFileDialog2.FileNames; |
|
List<string> mdbPaths = new List<string>(); |
|
for (int i = 0; i < files.Length; i++) |
|
{ |
|
if (System.IO.Path.GetExtension(files[i]).ToLower() == ".mdb") |
|
{ |
|
mdbPaths.Add(files[i]); |
|
} |
|
else |
|
{ |
|
this.listBoxVector.Items.Add(files[i]); |
|
} |
|
} |
|
if (mdbPaths.Count > 0) |
|
{ |
|
//FrmSelectLayer frmSelectLayer = new FrmSelectLayer(); |
|
//frmSelectLayer.VectorPaths = mdbPaths; |
|
//frmSelectLayer.Owner = this.Parent as Form; |
|
//selectMdbLayer = new List<LayerInfo>(); |
|
//if (frmSelectLayer.ShowDialog() == DialogResult.OK) |
|
//{ |
|
// selectMdbLayer = frmSelectLayer.SelectVectorNames; |
|
// foreach (LayerInfo item in frmSelectLayer.SelectVectorNames) |
|
// { |
|
// this.listBoxVector.Items.Add(item.LayerSourcePath + "/" + item.LayerName); |
|
// } |
|
//} |
|
} |
|
|
|
} |
|
} |
|
|
|
|
|
private void btnDelVector_Click(object sender, EventArgs e) |
|
{ |
|
if (this.listBoxVector.SelectedItem != null) |
|
{ |
|
int index = this.listBoxVector.SelectedIndex; |
|
this.listBoxVector.Items.Remove(this.listBoxVector.SelectedItem); |
|
if (this.listBoxVector.Items.Count > index) |
|
{ |
|
this.listBoxVector.SelectedIndex = index; |
|
} |
|
else if (index != 0) |
|
{ |
|
this.listBoxVector.SelectedIndex = index - 1; |
|
} |
|
} |
|
} |
|
|
|
|
|
private OSGeo.OGR.Layer toplayer = null; |
|
private void UnionLayers(object obj) |
|
{ |
|
|
|
toplayer = UnionVector.UnionVectorLayers(obj as List<LayerInfo>, distance); |
|
UnionCallBack(); |
|
} |
|
|
|
private TaskDescribeEntity taskParamsEntity = null; |
|
private void CreateLayer(object obj) |
|
{ |
|
List<OSGeo.OGR.Geometry> geo= obj as List<OSGeo.OGR.Geometry>; |
|
toplayer = UnionVector.CreateLayer(geo, distance); |
|
OSGeo.OGR.Geometry rstGeometry = null; |
|
foreach (OSGeo.OGR.Geometry item in geo) |
|
{ |
|
rstGeometry = UnionVector.UnionGeometry(rstGeometry, item); |
|
} |
|
OSGeo.OGR.Envelope envelope=new OSGeo.OGR.Envelope(); |
|
rstGeometry.GetEnvelope(envelope); |
|
CreateKotiles(taskParamsEntity, new Raster2KOTiles.Envelope() |
|
{ |
|
XMax = envelope.MaxX, |
|
XMin = envelope.MinX, |
|
YMax = envelope.MaxY, |
|
YMin = envelope.MinY |
|
}); |
|
} |
|
|
|
|
|
private void CreateKotiles(TaskDescribeEntity paramsEntity, Raster2KOTiles.Envelope envelopeCut =null) |
|
{ |
|
pMergeRaster = new MultRaster2MBTiles(); |
|
List<string> files = new List<string>(); |
|
int nThread = 1; |
|
try |
|
{ |
|
foreach (var item in paramsEntity.RasterPaths) |
|
{ |
|
files.Add(item); |
|
} |
|
if (files.Count == 0) |
|
throw new Exception("请选择文件"); |
|
int level, tileSize; |
|
double resolution = MultRaster2MBTiles.GetBestLevelAndSize(files, out level, out tileSize); |
|
System.Drawing.Imaging.ImageFormat imgFormat = System.Drawing.Imaging.ImageFormat.Jpeg; |
|
if (paramsEntity.TileType== "png") |
|
{ |
|
imgFormat = System.Drawing.Imaging.ImageFormat.Png; |
|
} |
|
pMergeRaster.ImgFormat = imgFormat; |
|
pMergeRaster.Level = paramsEntity.Level > level ? level : paramsEntity.Level; |
|
pMergeRaster.TiledSize = paramsEntity.TileSize; |
|
pMergeRaster.MBTilesPath = paramsEntity.TaskPath; |
|
pMergeRaster.TopLayer = toplayer; |
|
pMergeRaster.SaveType = EnumSaveType.Level; |
|
if (string.IsNullOrEmpty(paramsEntity.TaskPath)) |
|
throw new Exception("请设置保存位置"); |
|
nThread = paramsEntity.ThreadNum; |
|
nThread = nThread <= 0 ? 1 : nThread; |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
|
|
DateTime dt1 = DateTime.Now; |
|
pMergeRaster.CreatDown += (s, e1) => |
|
{ |
|
DateTime dt3 = DateTime.Now; |
|
|
|
if (DownTime != null) |
|
DownTime(dt3, dt3.Subtract(dt1).TotalSeconds); |
|
GC.Collect(); |
|
|
|
}; |
|
pMergeRaster.Report += (s, c) => |
|
{ |
|
if (ReportMess != null) |
|
{ |
|
ReportMess(c, s); |
|
} |
|
}; |
|
try |
|
{ |
|
pMergeRaster.CreateMulFilesKOTiles(files, nThread, envelopeCut); |
|
} |
|
catch (Exception ex) |
|
{ |
|
if (DownTime != null) |
|
DownTime(DateTime.Now, 0); |
|
throw ex; |
|
} |
|
|
|
} |
|
|
|
#region 裁取图斑最高分辨率 |
|
|
|
public void btnCutOk_Click(object sender, EventArgs e) |
|
{ |
|
|
|
if (string.IsNullOrWhiteSpace(txtSaveFilePath.Text)) |
|
{ |
|
MessageHelper.Show("请选择输出路径!"); |
|
return; |
|
} |
|
saveType = EnumSaveType.Level; |
|
SetState(true); |
|
List<LayerInfo> lstVectorPaths = new List<LayerInfo>(); |
|
foreach (var item in this.listBoxVector.Items) |
|
{ |
|
if (item.ToString().Contains("/")) |
|
{ |
|
|
|
LayerInfo layerInfoMdb = selectMdbLayer.Find(p => p.LayerSourcePath + "/" + p.LayerName == item.ToString()); |
|
if (layerInfoMdb != null) |
|
lstVectorPaths.Add(new LayerInfo() { LayerSourcePath = layerInfoMdb.LayerSourcePath, LayerIndex = 0, LayerName = layerInfoMdb.LayerName }); |
|
|
|
} |
|
else |
|
{ |
|
lstVectorPaths.Add(new LayerInfo() { LayerSourcePath = item.ToString(), LayerIndex = 0, LayerName = null }); |
|
} |
|
} |
|
if (lstVectorPaths == null || lstVectorPaths.Count <= 0) |
|
{ |
|
UnionCallBack(); |
|
} |
|
else |
|
{ |
|
double.TryParse(this.txtBuffer.Text, out distance); |
|
distance = distance == 0 ? 100 : distance; |
|
Thread threadUnion = new Thread(new ParameterizedThreadStart(UnionLayers)); |
|
threadUnion.Start(lstVectorPaths); |
|
} |
|
|
|
} |
|
|
|
public void CutRasterToKotiles(List<OSGeo.OGR.Geometry> geometrys,TaskDescribeEntity paramsEntity) |
|
{ |
|
try |
|
{ |
|
this.taskParamsEntity = paramsEntity; |
|
saveType = EnumSaveType.Level; |
|
if (geometrys == null || geometrys.Count <= 0) |
|
{ |
|
CreateKotiles(taskParamsEntity); |
|
} |
|
else |
|
{ |
|
|
|
distance = paramsEntity.Distance == 0 ? 100 : distance; |
|
Thread threadUnion = new Thread(new ParameterizedThreadStart(CreateLayer)); |
|
threadUnion.Start(geometrys); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
} |
|
|
|
|
|
private void UnionLayersMul(object obj) |
|
{ |
|
TaskDescribeEntity taskEntity = obj as TaskDescribeEntity; |
|
toplayer = UnionVector.UnionVectorLayers(taskEntity.LayerInfos, distance); |
|
UnionCallBackMul(taskEntity); |
|
} |
|
public void CutRasterMul(TaskDescribeEntity taskEnity) |
|
{ |
|
saveType = EnumSaveType.Level; |
|
|
|
if (taskEnity.LayerInfos == null || taskEnity.LayerInfos.Count <= 0) |
|
{ |
|
UnionCallBackMul(taskEnity); |
|
} |
|
else |
|
{ |
|
distance = taskEnity.Distance; |
|
Thread threadUnion = new Thread(new ParameterizedThreadStart(UnionLayersMul)); |
|
threadUnion.Start(taskEnity); |
|
} |
|
} |
|
|
|
private void UnionCallBackMul(TaskDescribeEntity taskEnity) |
|
{ |
|
pMergeRaster = new MultRaster2MBTiles(); |
|
int nThread = 1; |
|
try |
|
{ |
|
|
|
if (taskEnity.RasterPaths.Count == 0) |
|
throw new Exception("请选择文件"); |
|
System.Drawing.Imaging.ImageFormat imgFormat = System.Drawing.Imaging.ImageFormat.Jpeg; |
|
if (taskEnity.TileType == "0") |
|
{ |
|
imgFormat = System.Drawing.Imaging.ImageFormat.Png; |
|
} |
|
pMergeRaster.ImgFormat = imgFormat; |
|
pMergeRaster.Level = taskEnity.Level; |
|
pMergeRaster.TiledSize = taskEnity.TileSize; |
|
pMergeRaster.MBTilesPath = taskEnity.TaskPath; |
|
pMergeRaster.TopLayer = toplayer; |
|
pMergeRaster.SaveType = saveType; |
|
if (string.IsNullOrEmpty(taskEnity.TaskPath)) |
|
throw new Exception("请设置保存位置"); |
|
nThread = taskEnity.ThreadNum; |
|
nThread = nThread <= 0 ? 1 : nThread; |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw new Exception("参数设置异常"); |
|
} |
|
|
|
DateTime dt1 = DateTime.Now; |
|
pMergeRaster.CreatDown += (s, e1) => |
|
{ |
|
DateTime dt3 = DateTime.Now; |
|
|
|
//this.Text = dt3.Subtract(dt1).TotalSeconds.ToString(); |
|
if (DownTime != null) |
|
DownTime(dt3, dt3.Subtract(dt1).TotalSeconds); |
|
|
|
GC.Collect(); |
|
|
|
}; |
|
pMergeRaster.Report += (s, c) => |
|
{ |
|
if (ReportMess != null) |
|
{ |
|
ReportMess(c, s); |
|
} |
|
}; |
|
try |
|
{ |
|
pMergeRaster.CreateMulFilesKOTiles(taskEnity.RasterPaths, nThread); |
|
//SetState(true); |
|
} |
|
catch (Exception ex) |
|
{ |
|
if (DownTime != null) |
|
DownTime(DateTime.Now, 0); |
|
throw new Exception(ex.Message); |
|
} |
|
|
|
} |
|
|
|
#endregion |
|
|
|
|
|
#region 批量切片相关信息 |
|
|
|
public void VisbleControls() |
|
{ |
|
this.label4.Visible = false; |
|
this.txtSaveFilePath.Visible = false; |
|
this.btnBrowser.Visible = false; |
|
this.panel2.Visible = false; |
|
} |
|
/// <summary> |
|
/// 获取栅格影像 |
|
/// </summary> |
|
private List<string> GetRasters |
|
{ |
|
get |
|
{ |
|
if (this.listBoxFileList.Items == null || this.listBoxFileList.Items.Count <= 0) return null; |
|
List<string> rasterLst = new List<string>(); |
|
for (int i = 0; i < this.listBoxFileList.Items.Count; i++) |
|
{ |
|
rasterLst.Add(this.listBoxFileList.Items[i].ToString()); |
|
} |
|
return rasterLst; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 获取矢量 |
|
/// </summary> |
|
private List<LayerInfo> GetVector |
|
{ |
|
get |
|
{ |
|
List<LayerInfo> lstVectorPaths = new List<LayerInfo>(); |
|
foreach (var item in this.listBoxVector.Items) |
|
{ |
|
if (item.ToString().Contains("/")) |
|
{ |
|
|
|
LayerInfo layerInfoMdb = selectMdbLayer.Find(p => p.LayerSourcePath + "/" + p.LayerName == item.ToString()); |
|
if (layerInfoMdb != null) |
|
lstVectorPaths.Add(new LayerInfo() { LayerSourcePath = layerInfoMdb.LayerSourcePath, LayerIndex = 0, LayerName = layerInfoMdb.LayerName }); |
|
|
|
} |
|
else |
|
{ |
|
lstVectorPaths.Add(new LayerInfo() { LayerSourcePath = item.ToString(), LayerIndex = 0, LayerName = null }); |
|
} |
|
} |
|
return lstVectorPaths; |
|
} |
|
} |
|
|
|
|
|
/// <summary> |
|
/// 获取切片参数 |
|
/// </summary> |
|
public TaskDescribeEntity TaskParams |
|
{ |
|
get |
|
{ |
|
try |
|
{ |
|
TaskDescribeEntity taskParams = new TaskDescribeEntity(); |
|
double dis = 0; |
|
double.TryParse(this.txtBuffer.Text, out dis); |
|
taskParams.Distance = dis; |
|
taskParams.LayerInfos = this.GetVector; |
|
taskParams.Level = Convert.ToInt32(this.txtLevel.Text); |
|
taskParams.RasterPaths = GetRasters; |
|
taskParams.ThreadNum = Convert.ToInt32(this.txtThreadNo.Text); |
|
taskParams.TileSize = Convert.ToInt32(this.txtPicSize.Text); |
|
taskParams.TileType = this.cboxTileFormat.SelectedIndex.ToString(); |
|
return taskParams; |
|
} |
|
catch |
|
{ |
|
return null; |
|
} |
|
|
|
} |
|
} |
|
|
|
public void ClearTaskParams() |
|
{ |
|
this.listBoxFileList.Items.Clear(); |
|
this.listBoxVector.Items.Clear(); |
|
//this.selectMdbLayer.Clear(); |
|
} |
|
|
|
public void SetParams(TaskDescribeEntity taskEntity) |
|
{ |
|
this.listBoxFileList.Items.Clear(); |
|
this.listBoxVector.Items.Clear(); |
|
if (this.selectMdbLayer != null) |
|
this.selectMdbLayer.Clear(); |
|
else |
|
this.selectMdbLayer = new List<LayerInfo>(); |
|
if (taskEntity.LayerInfos != null && taskEntity.LayerInfos.Count > 0) |
|
{ |
|
this.listBoxFileList.Items.AddRange(taskEntity.LayerInfos.ToArray()); |
|
this.selectMdbLayer.AddRange(taskEntity.LayerInfos); |
|
} |
|
if (taskEntity.RasterPaths != null && taskEntity.RasterPaths.Count > 0) |
|
{ |
|
this.listBoxFileList.Items.AddRange(taskEntity.RasterPaths.ToArray()); |
|
GetBestLevelSize(); |
|
} |
|
if (!string.IsNullOrEmpty(taskEntity.TaskPath) && taskEntity.TaskPath.EndsWith(".kotiles")) |
|
{ |
|
this.txtSaveFilePath.Text = taskEntity.TaskPath; |
|
} |
|
this.txtLevel.Text = taskEntity.Level.ToString(); |
|
this.txtPicSize.Text = taskEntity.TileSize.ToString(); |
|
this.txtThreadNo.Text = taskEntity.ThreadNum.ToString(); |
|
this.cboxTileFormat.SelectedIndex = taskEntity.TileType == "0" ? 0 : 1; |
|
} |
|
#endregion |
|
|
|
public void Dispose() |
|
{ |
|
if (pMergeRaster != null) |
|
{ |
|
pMergeRaster.Dispose(); |
|
} |
|
if (this.toplayer != null) |
|
{ |
|
toplayer.Dispose(); |
|
toplayer = null; |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
} |
|
}
|
|
|