|
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
namespace Kingo.Plugin.MakeTaskPackage.View
|
|
|
|
|
{
|
|
|
|
|
public delegate void GetMapPoints();
|
|
|
|
|
public delegate void CutProgressReport(int sum, int current, int cutIndex);
|
|
|
|
|
public delegate void CutCreatDown(int cutIndex);
|
|
|
|
|
public partial class UCMxdMultCut : UserControl
|
|
|
|
|
{
|
|
|
|
|
public event CutCreatDown CreatDown;
|
|
|
|
|
public event CutProgressReport Report;
|
|
|
|
|
|
|
|
|
|
public event GetMapPoints GetMapPointsEvent = null;
|
|
|
|
|
private double maxDis = 0;
|
|
|
|
|
private MxdParameters mxdParams = null;
|
|
|
|
|
|
|
|
|
|
public bool UseOutMapControl { get; set; }
|
|
|
|
|
public ESRI.ArcGIS.Controls.AxMapControl OutMapControl { get; set; }
|
|
|
|
|
public ESRI.ArcGIS.Geometry.IGeometry GeometryNow { get; set; }
|
|
|
|
|
public int CutIndex { get; set; }
|
|
|
|
|
|
|
|
|
|
public bool IsEncrypt { get; set; }
|
|
|
|
|
|
|
|
|
|
public UCMxdMultCut()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
UseOutMapControl = false;
|
|
|
|
|
this.btnBrowseMxd.Click += new EventHandler(btnBrowseMxd_Click);
|
|
|
|
|
this.btnBrowser.Click += new EventHandler(btnBrowser_Click);
|
|
|
|
|
this.btnOk.Click += new EventHandler(btnOk_Click);
|
|
|
|
|
this.btnMapPoints.Click += new EventHandler(btnMapPoints_Click);
|
|
|
|
|
this.cboxTileFormat.SelectedIndex = 0;
|
|
|
|
|
this.rbAll.CheckedChanged += new EventHandler(rbAll_CheckedChanged);
|
|
|
|
|
this.rbAuto.CheckedChanged += new EventHandler(rbAll_CheckedChanged);
|
|
|
|
|
this.rbCustom.CheckedChanged += new EventHandler(rbAll_CheckedChanged);
|
|
|
|
|
this.cmbBlockCount.SelectedIndexChanged += new EventHandler(cmbBlockCount_SelectedIndexChanged);
|
|
|
|
|
this.cmbBlockCount.SelectedIndex = 0;
|
|
|
|
|
this.axMapControl1.OnMouseDown += new ESRI.ArcGIS.Controls.IMapControlEvents2_Ax_OnMouseDownEventHandler(axMapControl1_OnMouseDown);
|
|
|
|
|
this.txtMaxScale.TextChanged += new EventHandler(txtMaxScale_TextChanged);
|
|
|
|
|
this.btnExport.Click += new EventHandler(btnExport_Click);
|
|
|
|
|
this.btnImport.Click += new EventHandler(btnImport_Click);
|
|
|
|
|
this.btnExportPoint.Click += new EventHandler(btnExportPoint_Click);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void btnImport_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
System.IO.FileStream stream = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
stream = File.OpenRead(this.openFileDialog1.FileName);
|
|
|
|
|
object obj = Deserialize(typeof(MxdParameters), stream);
|
|
|
|
|
BindParmas(obj as MxdParameters);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
MessageHelper.Show("导入失败,请检查文件是否为指定格式");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
if (stream != null)
|
|
|
|
|
stream.Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void btnExport_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
if (SetParmas())
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (this.rbAuto.Checked)
|
|
|
|
|
{
|
|
|
|
|
string fileName = System.IO.Path.GetDirectoryName(this.saveFileDialog1.FileName) + "\\" + System.IO.Path.GetFileNameWithoutExtension(this.saveFileDialog1.FileName);
|
|
|
|
|
for (int i = 0; i < mxdParams.BlockHorizontalCount; i++)
|
|
|
|
|
{
|
|
|
|
|
mxdParams.BlockIndex = i + 1;
|
|
|
|
|
byte[] xmlByte = Serializer(typeof(MxdParameters), mxdParams);
|
|
|
|
|
File.WriteAllBytes(fileName + "_" + (i + 1) + ".xml", xmlByte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
byte[] xmlByte = Serializer(typeof(MxdParameters), mxdParams);
|
|
|
|
|
File.WriteAllBytes(this.saveFileDialog1.FileName, xmlByte);
|
|
|
|
|
}
|
|
|
|
|
MessageHelper.Show("导出成功");
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug("Mxd切片配置导出失败:" + ex);
|
|
|
|
|
MessageHelper.Show("导出失败");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
MessageHelper.Show("参数设置异常,导出失败");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SetParmas()
|
|
|
|
|
{
|
|
|
|
|
if (mxdParams == null)
|
|
|
|
|
{
|
|
|
|
|
mxdParams = new MxdParameters();
|
|
|
|
|
}
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//this.txtMaxScale.Text = mxdParams.MaxScale.ToString();
|
|
|
|
|
//this.txtMinScale.SelectedItem = mxdParams.MinScale.ToString();
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(mxdParams.MinScale.ToString()))
|
|
|
|
|
{
|
|
|
|
|
this.txtMinScale.SelectedItem = mxdParams.MinScale.ToString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mxdParams.MinScale = Convert.ToInt32(this.txtMinScale.SelectedItem.ToString());
|
|
|
|
|
mxdParams.MaxScale = Convert.ToInt32(this.txtMaxScale.Text);
|
|
|
|
|
mxdParams.ThreadNum = Convert.ToInt32(this.txtThreadNo.Text);
|
|
|
|
|
mxdParams.TileSize = Convert.ToInt32(this.txtPicSize.Text);
|
|
|
|
|
if (cboxTileFormat.SelectedIndex == 0)
|
|
|
|
|
mxdParams.ImgFormat = "png";
|
|
|
|
|
else
|
|
|
|
|
mxdParams.ImgFormat = "jpg";
|
|
|
|
|
if (this.rbAll.Checked)
|
|
|
|
|
{
|
|
|
|
|
mxdParams.CutType = CUTAreaType.全部;
|
|
|
|
|
}
|
|
|
|
|
else if (this.rbCustom.Checked)
|
|
|
|
|
{
|
|
|
|
|
mxdParams.CutType = CUTAreaType.自定义;
|
|
|
|
|
}
|
|
|
|
|
else if (this.rbAuto.Checked)
|
|
|
|
|
{
|
|
|
|
|
mxdParams.CutType = CUTAreaType.自动分块;
|
|
|
|
|
}
|
|
|
|
|
mxdParams.BlockHorizontalCount = Convert.ToInt32(this.cmbBlockCount.SelectedItem);
|
|
|
|
|
mxdParams.BlockIndex = Convert.ToInt32(this.cmbBlockIndex.SelectedItem);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void BindParmas(MxdParameters mxdParams)
|
|
|
|
|
{
|
|
|
|
|
if (mxdParams == null) return;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//this.txtMaxScale.Text = mxdParams.MaxScale.ToString();
|
|
|
|
|
//this.txtMinScale.SelectedItem = mxdParams.MinScale.ToString();
|
|
|
|
|
this.txtMaxScale.Text = mxdParams.MaxScale.ToString();
|
|
|
|
|
this.txtMinScale.Items.Clear();
|
|
|
|
|
GetAllScale(mxdParams.MaxScale, maxDis);
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(mxdParams.MinScale.ToString()))
|
|
|
|
|
{
|
|
|
|
|
this.txtMinScale.SelectedItem =mxdParams.MinScale;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//this.txtMinScale.SelectedItem = mxdParams.MinScale.ToString();
|
|
|
|
|
this.txtThreadNo.Text = mxdParams.ThreadNum.ToString();
|
|
|
|
|
this.txtPicSize.Text = mxdParams.TileSize.ToString();
|
|
|
|
|
cboxTileFormat.SelectedIndex = mxdParams.ImgFormat == "png" ? 0 : 1;
|
|
|
|
|
|
|
|
|
|
if (mxdParams.CutType == CUTAreaType.全部)
|
|
|
|
|
{
|
|
|
|
|
this.rbAll.Checked = true;
|
|
|
|
|
}
|
|
|
|
|
else if (mxdParams.CutType ==CUTAreaType.自定义)
|
|
|
|
|
{
|
|
|
|
|
this.rbCustom.Checked = true;
|
|
|
|
|
}
|
|
|
|
|
else if (mxdParams.CutType == CUTAreaType.自动分块)
|
|
|
|
|
{
|
|
|
|
|
this.rbAuto.Checked = true;
|
|
|
|
|
}
|
|
|
|
|
this.cmbBlockCount.SelectedItem = mxdParams.BlockHorizontalCount;
|
|
|
|
|
this.cmbBlockIndex.SelectedItem = mxdParams.BlockIndex;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void txtMaxScale_TextChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(txtMaxScale.Text)) return;
|
|
|
|
|
int MaxScale = 0;
|
|
|
|
|
int.TryParse(txtMaxScale.Text, out MaxScale);
|
|
|
|
|
this.txtMinScale.Items.Clear();
|
|
|
|
|
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.txtMinScale.Items.Add(scaleNow);
|
|
|
|
|
return lstScale;
|
|
|
|
|
}
|
|
|
|
|
lstScale.Add(maxScale);
|
|
|
|
|
while (minScale > scaleNow)
|
|
|
|
|
{
|
|
|
|
|
scaleNow = scaleNow * 2;
|
|
|
|
|
//distance = scaleNow * 256 * 0.0254 / 96;//计算实际距离
|
|
|
|
|
lstScale.Add(scaleNow);
|
|
|
|
|
this.txtMinScale.Items.Add(scaleNow);
|
|
|
|
|
}
|
|
|
|
|
this.txtMinScale.SelectedIndex = this.txtMinScale.Items.Count - 1;
|
|
|
|
|
//lstScale.Add(minScale);
|
|
|
|
|
return lstScale;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IEnvelope trackE = null;
|
|
|
|
|
IGeometry trackPolygon = null;
|
|
|
|
|
bool isDraw = false;
|
|
|
|
|
void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)
|
|
|
|
|
{
|
|
|
|
|
if (isDraw)
|
|
|
|
|
{
|
|
|
|
|
trackPolygon = axMapControl1.TrackPolygon();
|
|
|
|
|
trackE = trackPolygon.Envelope;//.TrackRectangle();
|
|
|
|
|
DrawPoylon(trackPolygon);
|
|
|
|
|
this.txtCustomPoints.Text = trackE.XMin + "," + trackE.YMax + ";" + trackE.XMax + "," + trackE.YMax + ";" + trackE.XMax + "," + trackE.YMin + ";" + trackE.XMin + "," + trackE.YMin;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RectangleElementClass polygonElement = null;
|
|
|
|
|
public void DrawPoylon(IGeometry geo)
|
|
|
|
|
{
|
|
|
|
|
if (polygonElement == null)
|
|
|
|
|
{
|
|
|
|
|
polygonElement = new RectangleElementClass();
|
|
|
|
|
polygonElement.Symbol = SelectFillSymbol();
|
|
|
|
|
polygonElement.Geometry = geo;
|
|
|
|
|
polygonElement.Name = "CF" + DateTime.Now.ToLongDateString();
|
|
|
|
|
(axMapControl1.ActiveView.GraphicsContainer as IGraphicsContainer).AddElement((IElement)polygonElement, 0);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
polygonElement.Geometry = geo;
|
|
|
|
|
}
|
|
|
|
|
axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
|
|
|
|
|
}
|
|
|
|
|
IRgbColor SelectColor = null;
|
|
|
|
|
ISimpleLineSymbol selectOutline = null;
|
|
|
|
|
ISimpleFillSymbol selectsimpleFillSymbol = null;
|
|
|
|
|
private ISimpleFillSymbol SelectFillSymbol()
|
|
|
|
|
{
|
|
|
|
|
if (SelectColor == null)
|
|
|
|
|
{
|
|
|
|
|
SelectColor = new RgbColor();
|
|
|
|
|
// 设置颜色属性
|
|
|
|
|
SelectColor.Red = 255;
|
|
|
|
|
SelectColor.Green = 0;
|
|
|
|
|
SelectColor.Blue = 0;
|
|
|
|
|
}
|
|
|
|
|
// 获取ILine符号接口
|
|
|
|
|
if (selectOutline == null)
|
|
|
|
|
{
|
|
|
|
|
selectOutline = new SimpleLineSymbol();
|
|
|
|
|
// 设置线符号属
|
|
|
|
|
selectOutline.Width = 3;
|
|
|
|
|
selectOutline.Color = SelectColor;
|
|
|
|
|
}
|
|
|
|
|
if (selectsimpleFillSymbol == null)
|
|
|
|
|
{
|
|
|
|
|
selectsimpleFillSymbol = new SimpleFillSymbolClass();
|
|
|
|
|
// 设置填充符号属性
|
|
|
|
|
selectsimpleFillSymbol.Outline = selectOutline;
|
|
|
|
|
selectsimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSHollow;
|
|
|
|
|
}
|
|
|
|
|
return selectsimpleFillSymbol;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 地图取点
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
void btnMapPoints_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
//FrmMergeKotiles frmm = new FrmMergeKotiles();
|
|
|
|
|
//frmm.ShowDialog();
|
|
|
|
|
if (GetMapPointsEvent != null)
|
|
|
|
|
GetMapPointsEvent();
|
|
|
|
|
isDraw = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetCutMapIEnvelope(IEnvelope envelope)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
trackE = envelope;
|
|
|
|
|
this.txtCustomPoints.Text = trackE.XMin + "," + trackE.YMax + ";" + trackE.XMax + "," + trackE.YMax + ";" + trackE.XMax + "," + trackE.YMin + ";" + trackE.XMin + "," + trackE.YMin;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public List<string> selectedXzq = new List<string>();
|
|
|
|
|
private int currentIndex = 0;
|
|
|
|
|
private string keyField = "";
|
|
|
|
|
private string WhereStr = "";
|
|
|
|
|
public IFeatureClass pFC = null;
|
|
|
|
|
void btnExportPoint_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
OpenDataDialog pDialog = new OpenDataDialog();
|
|
|
|
|
ISpatialDataObjectFilter pOFilter;
|
|
|
|
|
|
|
|
|
|
pOFilter = new FilterDatasetsAndLayers();
|
|
|
|
|
//pOFilter.DistObjectCollection.Add(
|
|
|
|
|
pDialog.AddFilter(pOFilter, true);
|
|
|
|
|
pDialog.Title = "选择矢量图层数据";
|
|
|
|
|
pDialog.AllowMultiSelect = false;
|
|
|
|
|
pDialog.RestoreLocation = true;
|
|
|
|
|
pDialog.StartLocation = pDialog.FinalLocation;
|
|
|
|
|
if (pDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK && pDialog.Selection.Count != 0)
|
|
|
|
|
{
|
|
|
|
|
foreach (ISpatialDataObject distObj in pDialog.Selection)
|
|
|
|
|
{
|
|
|
|
|
object obj = (distObj.DatasetName as IName).Open();
|
|
|
|
|
pFC = obj as IFeatureClass;
|
|
|
|
|
if (pFC != null)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
trackE = (pFC as IGeoDataset).Extent;
|
|
|
|
|
FrmXZQSelected frm = new FrmXZQSelected();
|
|
|
|
|
frm.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;
|
|
|
|
|
frm.Width = 800;
|
|
|
|
|
frm.Height = 450;
|
|
|
|
|
frm.ImportFeatureClass = pFC;
|
|
|
|
|
selectedXzq = frm.KeyFieldsList;
|
|
|
|
|
keyField = frm.KeyField;
|
|
|
|
|
WhereStr = frm.WhereStr;
|
|
|
|
|
currentIndex = 0;
|
|
|
|
|
frm.ShowInMainForm(true);
|
|
|
|
|
this.txtCustomPoints.Text = trackE.XMin + "," + trackE.YMax + ";" + trackE.XMax + "," + trackE.YMax + ";" + trackE.XMax + "," + trackE.YMin + ";" + trackE.XMin + "," + trackE.YMin;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("请选择矢量图层");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug(ex);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private ESRI.ArcGIS.Geometry.IGeometry XzqGeometry(string keyValue, string keyName)
|
|
|
|
|
{
|
|
|
|
|
if (pFC == null) return null;
|
|
|
|
|
IFeatureCursor featureCursor = pFC.Search(new QueryFilterClass() { WhereClause = string.Format(WhereStr, keyValue) }, false);
|
|
|
|
|
if (featureCursor == null) return null;
|
|
|
|
|
IFeature feature = featureCursor.NextFeature();
|
|
|
|
|
if (feature == null) return null;
|
|
|
|
|
return feature.ShapeCopy;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 切片区域配置
|
|
|
|
|
void rbAll_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
this.panelAuto.Enabled = this.rbAuto.Checked;
|
|
|
|
|
this.panelCustom.Enabled = this.rbCustom.Checked;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void cmbBlockCount_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
int count = 0;
|
|
|
|
|
string selectText = cmbBlockCount.SelectedItem.ToString();
|
|
|
|
|
|
|
|
|
|
if (selectText == "2")
|
|
|
|
|
{
|
|
|
|
|
count = 2;
|
|
|
|
|
}
|
|
|
|
|
else if (selectText == "4")
|
|
|
|
|
{
|
|
|
|
|
count = 4;
|
|
|
|
|
}
|
|
|
|
|
else if (selectText == "8")
|
|
|
|
|
{
|
|
|
|
|
count = 8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AddItems(count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AddItems(int indexCount)
|
|
|
|
|
{
|
|
|
|
|
this.cmbBlockIndex.Items.Clear();
|
|
|
|
|
for (int i = 1; i <= indexCount; i++)
|
|
|
|
|
{
|
|
|
|
|
this.cmbBlockIndex.Items.Add(i);
|
|
|
|
|
}
|
|
|
|
|
this.cmbBlockIndex.SelectedIndex = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private CutTiles cutTiles = null;
|
|
|
|
|
public void btnOk_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
cutTiles = new CutTiles();
|
|
|
|
|
System.Drawing.Imaging.ImageFormat imgFormat = System.Drawing.Imaging.ImageFormat.Png;
|
|
|
|
|
if (string.IsNullOrEmpty(this.txtMxdPath.Text))
|
|
|
|
|
{
|
|
|
|
|
MessageHelper.Show("请选择MXD文件");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (this.cboxTileFormat.Text.ToLower() == "png")
|
|
|
|
|
{
|
|
|
|
|
imgFormat = System.Drawing.Imaging.ImageFormat.Png;
|
|
|
|
|
}
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
cutTiles.TilesDBPath = this.txtSaveFilePath.Text;
|
|
|
|
|
if (rbAuto.Checked)
|
|
|
|
|
{
|
|
|
|
|
cutTiles.BlockHorizontalCount = Convert.ToInt32(this.cmbBlockCount.SelectedItem);
|
|
|
|
|
cutTiles.BlockIndex = Convert.ToInt32(this.cmbBlockIndex.SelectedItem);
|
|
|
|
|
cutTiles.IsBlock = rbAuto.Checked;
|
|
|
|
|
cutTiles.CutType = CUTAreaType.自动分块;
|
|
|
|
|
}
|
|
|
|
|
else if (rbCustom.Checked)
|
|
|
|
|
{
|
|
|
|
|
cutTiles.CustomArea = trackE;
|
|
|
|
|
cutTiles.CutType = CUTAreaType.自定义;
|
|
|
|
|
if (selectedXzq != null && selectedXzq.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
ESRI.ArcGIS.Geometry.IGeometry geometry = XzqGeometry(selectedXzq[currentIndex], keyField);
|
|
|
|
|
if (geometry != null)
|
|
|
|
|
{
|
|
|
|
|
cutTiles.CustomArea = geometry.Envelope;
|
|
|
|
|
cutTiles.TilesDBPath = System.IO.Path.GetDirectoryName(this.txtSaveFilePath.Text) + "\\" + selectedXzq[currentIndex] + ".kotiles";
|
|
|
|
|
cutTiles.CustomGeometry = geometry;
|
|
|
|
|
|
|
|
|
|
// FrmMapVis frm = new FrmMapVis();
|
|
|
|
|
//frm.Show();
|
|
|
|
|
//frm.LoadMxd(this.txtMxdPath.Text, (geometry as ESRI.ArcGIS.esriSystem.IClone).Clone() as IGeometry);
|
|
|
|
|
//var pMapClip = this.axMapControl1.Map as ESRI.ArcGIS.Carto.;// IMapClipOptions;
|
|
|
|
|
//pMapClip.ClipGeometry = this.axMapControl1.ActiveView.Extent as IGeometry;
|
|
|
|
|
//pMapClip.ClipType = esriMapClipType.esriMapClipShape;
|
|
|
|
|
//this.axMapControl1.ActiveView.FocusMap.ClipGeometry = geometry;
|
|
|
|
|
//this.axMapControl1.ActiveView.Refresh();
|
|
|
|
|
//this.axMapControl1.Map.ClipGeometry = geometry;
|
|
|
|
|
//this.axMapControl1.FullExtent = geometry.Envelope;
|
|
|
|
|
//this.axMapControl1.Refresh();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
cutTiles.CustomArea = trackPolygon.Envelope;
|
|
|
|
|
cutTiles.CustomGeometry = trackPolygon;
|
|
|
|
|
//var pMapClip = this.axMapControl1.Map as IMapClipOptions;
|
|
|
|
|
//pMapClip.ClipGeometry = this.axMapControl1.ActiveView.Extent as IGeometry;
|
|
|
|
|
//pMapClip.ClipType = esriMapClipType.esriMapClipShape;
|
|
|
|
|
//this.axMapControl1.Map.ClipGeometry = trackPolygon;
|
|
|
|
|
//this.axMapControl1.FullExtent = trackPolygon.Envelope;
|
|
|
|
|
//this.axMapControl1.Refresh();
|
|
|
|
|
//this.axMapControl1.ActiveView.FocusMap.ClipGeometry = trackPolygon;
|
|
|
|
|
//this.axMapControl1.ActiveView.Refresh();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
cutTiles.CutType = CUTAreaType.全部;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var mapcontrol = this.axMapControl1;
|
|
|
|
|
//if (UseOutMapControl)
|
|
|
|
|
//{
|
|
|
|
|
// mapcontrol = OutMapControl;
|
|
|
|
|
//}
|
|
|
|
|
List<Kingo.Mobile.Shape2KOTool.SpatialRefrenceStruct> spList = Kingo.Mobile.Shape2KOTool.SpatialRefrenceStruct.GetAllData();
|
|
|
|
|
Kingo.Mobile.Shape2KOTool.SpatialRefrenceStruct sp = spList.Find(p => p.WKID == mapcontrol.SpatialReference.FactoryCode);
|
|
|
|
|
if (sp == null)
|
|
|
|
|
{
|
|
|
|
|
var spname = mapcontrol.SpatialReference.Name.Replace("_"," ").Replace("Gauss Kruger","GK");
|
|
|
|
|
sp = spList.Find(p => p.Description.ToUpper() == spname.ToUpper());
|
|
|
|
|
}
|
|
|
|
|
cutTiles.Projection = sp==null?"":sp.WKT;
|
|
|
|
|
cutTiles.TileSize = Convert.ToInt32(this.txtPicSize.Text);
|
|
|
|
|
cutTiles.axMap = mapcontrol;
|
|
|
|
|
cutTiles.LayerName = this.LayerName;
|
|
|
|
|
cutTiles.ImgFormat = imgFormat;
|
|
|
|
|
cutTiles.MaxLevel = 0;//Convert.ToInt32(this.txtMaxLevel.Text);
|
|
|
|
|
cutTiles.MinLevel = Convert.ToInt32(this.txtMinLevel.Text);
|
|
|
|
|
cutTiles.MxdPath = this.txtMxdPath.Text;
|
|
|
|
|
cutTiles.groupBox = this.groupBox3;
|
|
|
|
|
cutTiles.MaxScale = Convert.ToInt32(this.txtMaxScale.Text);
|
|
|
|
|
cutTiles.MinScale = Convert.ToInt32(this.txtMinScale.SelectedItem);
|
|
|
|
|
cutTiles.IsEncrypt = this.IsEncrypt;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
MessageHelper.Show("参数设置异常");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (string.IsNullOrEmpty(this.txtSaveFilePath.Text))
|
|
|
|
|
{
|
|
|
|
|
MessageHelper.Show("请设置保存位置");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DateTime dt1 = DateTime.Now;
|
|
|
|
|
cutTiles.CreatDown += (s, e1) =>
|
|
|
|
|
{
|
|
|
|
|
if (this.CreatDown != null)
|
|
|
|
|
CreatDown(CutIndex);
|
|
|
|
|
DateTime dt3 = DateTime.Now;
|
|
|
|
|
if (!this.IsDisposed && !this.Disposing)
|
|
|
|
|
{
|
|
|
|
|
this.Invoke(new MethodInvoker(() =>
|
|
|
|
|
{
|
|
|
|
|
SetState(false, dt3.Subtract(dt1).TotalSeconds.ToString("0.0"));
|
|
|
|
|
GC.Collect();
|
|
|
|
|
if (rbCustom.Checked && selectedXzq != null)
|
|
|
|
|
{
|
|
|
|
|
currentIndex++;
|
|
|
|
|
if (currentIndex >= selectedXzq.Count)
|
|
|
|
|
return;
|
|
|
|
|
btnOk_Click(null, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
cutTiles.Report += (s, c) =>
|
|
|
|
|
{
|
|
|
|
|
if (this.Report != null)
|
|
|
|
|
Report(s, c, CutIndex);
|
|
|
|
|
if (!this.IsDisposed && !this.Disposing)
|
|
|
|
|
{
|
|
|
|
|
this.Invoke(new MethodInvoker(() =>
|
|
|
|
|
{
|
|
|
|
|
this.lbTips.Text = string.Format("{0}/{1}", c, s);
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
cutTiles.CreateMxdFileKOTilesThread(Convert.ToInt32(this.txtThreadNo.Text));
|
|
|
|
|
SetState(true);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug("mxd切片失败:" + ex);
|
|
|
|
|
MessageHelper.Show( "mxd切片失败:"+ ex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void Stop()
|
|
|
|
|
{
|
|
|
|
|
if (cutTiles != null)
|
|
|
|
|
{
|
|
|
|
|
cutTiles.Stop();
|
|
|
|
|
cutTiles = null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void CreateTiles()
|
|
|
|
|
{
|
|
|
|
|
cutTiles = new CutTiles();
|
|
|
|
|
System.Drawing.Imaging.ImageFormat imgFormat = System.Drawing.Imaging.ImageFormat.Png;
|
|
|
|
|
if (string.IsNullOrEmpty(this.txtMxdPath.Text))
|
|
|
|
|
{
|
|
|
|
|
MessageHelper.Show("请选择MXD文件");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (this.cboxTileFormat.Text.ToLower() == "png")
|
|
|
|
|
{
|
|
|
|
|
imgFormat = System.Drawing.Imaging.ImageFormat.Png;
|
|
|
|
|
}
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
cutTiles.TilesDBPath = this.txtSaveFilePath.Text;
|
|
|
|
|
if (rbAuto.Checked)
|
|
|
|
|
{
|
|
|
|
|
cutTiles.BlockHorizontalCount = Convert.ToInt32(this.cmbBlockCount.SelectedItem);
|
|
|
|
|
cutTiles.BlockIndex = Convert.ToInt32(this.cmbBlockIndex.SelectedItem);
|
|
|
|
|
cutTiles.IsBlock = rbAuto.Checked;
|
|
|
|
|
cutTiles.CutType =CUTAreaType.自动分块;
|
|
|
|
|
}
|
|
|
|
|
else if (rbCustom.Checked)
|
|
|
|
|
{
|
|
|
|
|
cutTiles.CustomArea = trackE;
|
|
|
|
|
cutTiles.CutType = CUTAreaType.自定义;
|
|
|
|
|
if (selectedXzq != null && selectedXzq.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
ESRI.ArcGIS.Geometry.IGeometry geometry = XzqGeometry(selectedXzq[currentIndex], keyField);
|
|
|
|
|
if (geometry != null)
|
|
|
|
|
{
|
|
|
|
|
cutTiles.CustomArea = geometry.Envelope;
|
|
|
|
|
cutTiles.TilesDBPath = System.IO.Path.GetDirectoryName(this.txtSaveFilePath.Text) + "\\" + selectedXzq[currentIndex] + ".kotiles";
|
|
|
|
|
cutTiles.CustomGeometry = geometry;
|
|
|
|
|
this.axMapControl1.Map.ClipGeometry = geometry;
|
|
|
|
|
this.axMapControl1.FullExtent = geometry.Envelope;
|
|
|
|
|
this.axMapControl1.Refresh();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//else
|
|
|
|
|
//{
|
|
|
|
|
// cutTiles.CustomArea = trackPolygon.Envelope;
|
|
|
|
|
// cutTiles.CustomGeometry = trackPolygon;
|
|
|
|
|
// this.axMapControl1.Map.ClipGeometry = trackPolygon;
|
|
|
|
|
// this.axMapControl1.FullExtent = trackPolygon.Envelope;
|
|
|
|
|
// this.axMapControl1.Refresh();
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
cutTiles.CutType = CUTAreaType.全部;
|
|
|
|
|
}
|
|
|
|
|
List<Kingo.Mobile.Shape2KOTool.SpatialRefrenceStruct> spList = Kingo.Mobile.Shape2KOTool.SpatialRefrenceStruct.GetAllData();
|
|
|
|
|
Kingo.Mobile.Shape2KOTool.SpatialRefrenceStruct sp = spList.Find(p => p.WKID == this.axMapControl1.SpatialReference.FactoryCode);
|
|
|
|
|
cutTiles.Projection = sp.WKT;
|
|
|
|
|
cutTiles.TileSize = Convert.ToInt32(this.txtPicSize.Text);
|
|
|
|
|
cutTiles.axMap = this.axMapControl1;
|
|
|
|
|
|
|
|
|
|
cutTiles.ImgFormat = imgFormat;
|
|
|
|
|
cutTiles.MaxLevel = 0;//Convert.ToInt32(this.txtMaxLevel.Text);
|
|
|
|
|
cutTiles.MinLevel = Convert.ToInt32(this.txtMinLevel.Text);
|
|
|
|
|
cutTiles.MxdPath = this.txtMxdPath.Text;
|
|
|
|
|
cutTiles.groupBox = this.groupBox3;
|
|
|
|
|
cutTiles.MaxScale = Convert.ToInt32(this.txtMaxScale.Text);
|
|
|
|
|
cutTiles.MinScale = Convert.ToInt32(this.txtMinScale.SelectedItem);
|
|
|
|
|
cutTiles.IsEncrypt = this.IsEncrypt;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
MessageHelper.Show("参数设置异常");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (string.IsNullOrEmpty(this.txtSaveFilePath.Text))
|
|
|
|
|
{
|
|
|
|
|
MessageHelper.Show("请设置保存位置");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DateTime dt1 = DateTime.Now;
|
|
|
|
|
cutTiles.CreatDown += (s, e1) =>
|
|
|
|
|
{
|
|
|
|
|
if (this.CreatDown != null)
|
|
|
|
|
CreatDown(CutIndex);
|
|
|
|
|
//DateTime dt3 = DateTime.Now;
|
|
|
|
|
//if (!this.IsDisposed && !this.Disposing)
|
|
|
|
|
//{
|
|
|
|
|
// this.Invoke(new MethodInvoker(() =>
|
|
|
|
|
// {
|
|
|
|
|
// SetState(false, dt3.Subtract(dt1).TotalSeconds.ToString("0.0"));
|
|
|
|
|
// GC.Collect();
|
|
|
|
|
// if (rbCustom.Checked && selectedXzq != null)
|
|
|
|
|
// {
|
|
|
|
|
// currentIndex++;
|
|
|
|
|
// if (currentIndex >= selectedXzq.Count)
|
|
|
|
|
// return;
|
|
|
|
|
// //btnOk_Click(null, null);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// }));
|
|
|
|
|
//}
|
|
|
|
|
};
|
|
|
|
|
cutTiles.Report += (s, c) =>
|
|
|
|
|
{
|
|
|
|
|
if (this.Report != null)
|
|
|
|
|
Report(s, c, CutIndex);
|
|
|
|
|
//if (!this.IsDisposed && !this.Disposing)
|
|
|
|
|
//{
|
|
|
|
|
// this.Invoke(new MethodInvoker(() =>
|
|
|
|
|
// {
|
|
|
|
|
// this.lbTips.Text = string.Format("{0}/{1}", c, s);
|
|
|
|
|
// }));
|
|
|
|
|
//}
|
|
|
|
|
};
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
cutTiles.CreateMxdFileKotiles(1);
|
|
|
|
|
SetState(true);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug("mxd切片失败:" + ex);
|
|
|
|
|
MessageHelper.Show( "mxd切片失败:"+ ex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void btnBrowser_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
SaveFileDialog saveDialog = new SaveFileDialog();
|
|
|
|
|
saveDialog.FileName = "MXD切片";
|
|
|
|
|
saveDialog.Filter = "kotiles文件|*.kotiles";
|
|
|
|
|
if (saveDialog.ShowDialog() == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
this.txtSaveFilePath.Text = saveDialog.FileName;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void btnBrowseMxd_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
OpenFileDialog openDialog = new OpenFileDialog();
|
|
|
|
|
openDialog.Filter = "mxd文件|*.mxd";
|
|
|
|
|
if (openDialog.ShowDialog() == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
this.txtMxdPath.Text = openDialog.FileName;
|
|
|
|
|
if (this.axMapControl1.CheckMxFile(openDialog.FileName))
|
|
|
|
|
{
|
|
|
|
|
this.axMapControl1.LoadMxFile(openDialog.FileName);
|
|
|
|
|
}
|
|
|
|
|
this.maxDis = GetMaxDistance(openDialog.FileName);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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.lbTips.Visible = isRunning;
|
|
|
|
|
//this.toolStripStatusLabel3.Visible = isRunning;
|
|
|
|
|
//this.toolStripStatusLabel2.Visible = isRunning;
|
|
|
|
|
if (isRunning)
|
|
|
|
|
{
|
|
|
|
|
this.lbTips.Text = "处理中……";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (msg == null)
|
|
|
|
|
{
|
|
|
|
|
this.lbTips.Text = "";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.lbTips.Text = "耗时" + msg + "秒";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void LoadMxd(string mxdPath)
|
|
|
|
|
{
|
|
|
|
|
this.Invoke(new MethodInvoker(() =>
|
|
|
|
|
{
|
|
|
|
|
if (this.axMapControl1.CheckMxFile(mxdPath))
|
|
|
|
|
{
|
|
|
|
|
this.axMapControl1.LoadMxFile(mxdPath);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetMxdPath(string mxdPath)
|
|
|
|
|
{
|
|
|
|
|
this.txtMxdPath.Text = mxdPath;
|
|
|
|
|
if (this.axMapControl1.CheckMxFile(mxdPath))
|
|
|
|
|
{
|
|
|
|
|
this.axMapControl1.LoadMxFile(mxdPath);
|
|
|
|
|
|
|
|
|
|
this.maxDis = GetMaxDistance(mxdPath);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string LayerName { get; set; }
|
|
|
|
|
|
|
|
|
|
public void SetLayerVisble(string layerDescriptionName)
|
|
|
|
|
{
|
|
|
|
|
//Kingo.Mobile.Common.DataProcess.ProcessMXDClass mxdProcess = new Common.DataProcess.ProcessMXDClass();
|
|
|
|
|
//mxdProcess.SetMapLayerVisble(this.axMapControl1.Map, layerDescriptionName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetSavePath(string savePath)
|
|
|
|
|
{
|
|
|
|
|
this.txtSaveFilePath.Text = savePath;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public CutTiles CreateCutTiles(ESRI.ArcGIS.Geometry.IGeometry geometry)
|
|
|
|
|
{
|
|
|
|
|
cutTiles = new CutTiles();
|
|
|
|
|
System.Drawing.Imaging.ImageFormat imgFormat = System.Drawing.Imaging.ImageFormat.Png;
|
|
|
|
|
if (this.cboxTileFormat.Text.ToLower() == "png")
|
|
|
|
|
{
|
|
|
|
|
imgFormat = System.Drawing.Imaging.ImageFormat.Png;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
imgFormat = System.Drawing.Imaging.ImageFormat.Jpeg;
|
|
|
|
|
}
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (geometry != null)
|
|
|
|
|
{
|
|
|
|
|
cutTiles.CustomArea = geometry.Envelope;
|
|
|
|
|
cutTiles.CutType = CUTAreaType.自定义;
|
|
|
|
|
cutTiles.CustomGeometry = geometry;
|
|
|
|
|
this.axMapControl1.Map.ClipGeometry = geometry;
|
|
|
|
|
this.axMapControl1.FullExtent = geometry.Envelope;
|
|
|
|
|
this.axMapControl1.Refresh();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
cutTiles.CutType = CUTAreaType.全部;
|
|
|
|
|
}
|
|
|
|
|
List<Kingo.Mobile.Shape2KOTool.SpatialRefrenceStruct> spList = Kingo.Mobile.Shape2KOTool.SpatialRefrenceStruct.GetAllData();
|
|
|
|
|
Kingo.Mobile.Shape2KOTool.SpatialRefrenceStruct sp = spList.Find(p => p.WKID == this.axMapControl1.SpatialReference.FactoryCode);
|
|
|
|
|
cutTiles.Projection = sp.WKT;
|
|
|
|
|
cutTiles.TileSize = Convert.ToInt32(this.txtPicSize.Text);
|
|
|
|
|
cutTiles.axMap = this.axMapControl1;
|
|
|
|
|
cutTiles.TilesDBPath = this.txtSaveFilePath.Text;
|
|
|
|
|
cutTiles.ImgFormat = imgFormat;
|
|
|
|
|
cutTiles.MaxLevel = 0;//Convert.ToInt32(this.txtMaxLevel.Text);
|
|
|
|
|
cutTiles.MinLevel = Convert.ToInt32(this.txtMinLevel.Text);
|
|
|
|
|
cutTiles.MxdPath = this.txtMxdPath.Text;
|
|
|
|
|
cutTiles.groupBox = this.groupBox3;
|
|
|
|
|
cutTiles.MaxScale = Convert.ToInt32(this.txtMaxScale.Text);
|
|
|
|
|
cutTiles.MinScale = Convert.ToInt32(this.txtMinScale.SelectedItem);
|
|
|
|
|
cutTiles.IsEncrypt = this.IsEncrypt;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug(ex);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
cutTiles.CreateMxdFileKOTilesThread(Convert.ToInt32(this.txtThreadNo.Text));
|
|
|
|
|
SetState(true);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug("mxd切片失败:" + ex);
|
|
|
|
|
MessageBox.Show( "mxd切片失败:" + ex);
|
|
|
|
|
}
|
|
|
|
|
return cutTiles;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 序列化
|
|
|
|
|
/// 序列化
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="type">类型</param>
|
|
|
|
|
/// <param name="obj">对象</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
byte[] Serializer(Type type, object obj)
|
|
|
|
|
{
|
|
|
|
|
MemoryStream stream = new MemoryStream();
|
|
|
|
|
XmlSerializer xml = new XmlSerializer(type);
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//序列化对象
|
|
|
|
|
xml.Serialize(stream, obj);
|
|
|
|
|
}
|
|
|
|
|
catch (InvalidOperationException)
|
|
|
|
|
{
|
|
|
|
|
throw;
|
|
|
|
|
}
|
|
|
|
|
return stream.GetBuffer();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
object Deserialize(Type type, Stream stream)
|
|
|
|
|
{
|
|
|
|
|
XmlSerializer xmldes = new XmlSerializer(type);
|
|
|
|
|
return xmldes.Deserialize(stream);
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|