基本信息
源码名称:C#谷歌地图下载源码
源码大小:0.55M
文件格式:.rar
开发语言:C#
更新时间:2020-08-20
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 10 元×
微信扫码支付:10 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
C#谷歌地图下载源码
C#谷歌地图下载源码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Net;
using System.Drawing.Imaging;
using System.Collections;
//using Keli.ItsGISV3.Utilities;
using CY.CYGIS.Utilities;
//using Keli.ItsGISV3.Geometries;
using CY.CYGIS.Geometries;
//using Keli.ItsGISV3.Tiles.TileSources;
using CY.CYGIS.Tiles.TileSources;
//using Keli.ItsGISV3.ItsMap.Commands.Tools;
using CY.CYGIS.ItsMap.Commands.Tools;
using System.Xml;
using System.Configuration;
using System.Reflection;
namespace GoogleMapTool
{
public partial class Form1 : Form
{
private int DefaultZoom = 9;
private readonly MapPoint DefaultCenter = new MapPoint(117.283756, 31.863563);
private readonly GoogleChinaTileSource gmts_Map = new GoogleChinaTileSource(GoogleType.Map);
private static readonly string CUserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7";
private const int RowItems = 4;
private const int ColumnItems = 5;
private double lngStart = 0.0;//起始经度
private double latStart = 0.0; //起始纬度
private double lngEnd = 0.0;//结束经度
private double latEnd = 0.0;//结束纬度
private static readonly object MyLocker = new object();
//以下定义一些常量用于限定地图控件的出现范围
private const int MinLeft = 12;
private const int MinTop = 39;
private const int MaxWidth = 616;
private const int MaxHeight = 485;
/// <summary>
/// 线程数目分配
/// </summary>
private Hashtable threadNums = new Hashtable();
/// <summary>
/// 在每个等级里面启动下载子线程的个数
/// </summary>
private const int DownLoadImageChildThreadCount = 40;
private string _TileSavePathContainMapType = "";
private FreedomTool ft = new FreedomTool();
private static readonly Random random = new Random();
/// <summary>
/// 用于存放所有的下载坐标
/// </summary>
private Hashtable levelValues = new Hashtable();
/// <summary>
/// 存放每个等级已经完成的图片个数
/// </summary>
private Hashtable finishCount = new Hashtable();
/// <summary>
/// 存放每个等级下载任务是否已经完成
/// </summary>
private Hashtable finishStatus = new Hashtable();
/// <summary>
/// 下载的等级列表
/// </summary>
private List<int> downLoadLevelList = new List<int>();
/// <summary>
/// 是否正在下载
/// </summary>
private bool isDownloading = false;
/// <summary>
/// 是否已经装载地图
/// </summary>
private bool hasLoadMap = false;
/// <summary>
/// 任务开始时间
/// </summary>
private DateTime beginTime;
/// <summary>
/// 任务结束时间
/// </summary>
private DateTime endTime;
RectControl.CRectControl CRectCtl;
public Form1()
{
InitializeComponent();
this.mapControl1.UseFileCache = false;
this.mapControl1.CurrentTool = (ToolBase)this.ft;
threadNums.Add("15","3");
threadNums.Add("16", "10");
threadNums.Add("17", "15");
threadNums.Add("18", "40");
threadNums.Add("19", "50");
threadNums.Add("20", "80");
}
/// <summary>
/// 初始化下载进度
/// </summary>
private void InitDownLoadProgress()
{
downLoadLevelList.Clear();
foreach (Control c in tableLayoutPanel1.Controls)
{
CheckBox cb = c as CheckBox;
if (cb != null && cb.Checked)
{
downLoadLevelList.Add(int.Parse(cb.Text));
}
}
if (downLoadLevelList.Count > 0)
{
tableLayoutPanel2.Controls.Clear();
tableLayoutPanel2.RowCount = downLoadLevelList.Count;
tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 20));
//tableLayoutPanel2
for (int i = 0; i < downLoadLevelList.Count; i )
{
ProgressBar pb = new ProgressBar();
pb.Name = "pb_" downLoadLevelList[i].ToString();
pb.Dock = DockStyle.Top;
pb.Height = 10;
Label lbStatus = new Label();
lbStatus.Text = "下载进度";
lbStatus.Name = "lb_" downLoadLevelList[i].ToString();
lbStatus.Dock = DockStyle.Right;
Label lbLevel = new Label();
lbLevel.Text = "Level " downLoadLevelList[i].ToString() ":";
lbLevel.Refresh();
PictureBox pic = new PictureBox();
pic.Image = Image.FromFile(Application.StartupPath @"\ok.png",false);
pic.Size = new System.Drawing.Size(16,16);
pic.SizeMode = PictureBoxSizeMode.StretchImage;
pic.Dock = DockStyle.None;
pic.Name = "pic_" downLoadLevelList[i].ToString();
pic.Visible = false;
tableLayoutPanel2.Controls.Add(pb,1,i);
tableLayoutPanel2.Controls.Add(lbStatus, 2, i);
tableLayoutPanel2.Controls.Add(lbLevel, 0, i);
tableLayoutPanel2.Controls.Add(pic, 3, i);
}
}
}
/// <summary>
/// 下载图片子进程
/// </summary>
private void DownLoadImageChildThread(object parameter)
{
object[] o = parameter as object[];
int level = int.Parse(o[0].ToString()); //下载等级
int startIndex = int.Parse(o[1].ToString()); //起始index
int endIndex = int.Parse(o[2].ToString()); //结束index
int imageCount = int.Parse(o[3].ToString()); //图片总数
ProgressBar pb = GetProgressBarFromLayout(level);
Label lb = GetLabelFromLayout(level);
Hashtable htValues = levelValues[level] as Hashtable;
if (htValues == null)
return;
List<int> listX = htValues["listX"] as List<int>;
List<int> listY = htValues["listY"] as List<int>;
string path1 = this._TileSavePathContainMapType "\\L" level.ToString("00");
Point oPosition = Point.Empty;
for (int i=startIndex;i<=endIndex;i )
{
string path2 = path1 "\\" listX[i].ToString();
if (!Directory.Exists(path2))
Directory.CreateDirectory(path2);
foreach (int y in listY)
{
if (!isDownloading)
return;
oPosition.X = listX[i];
oPosition.Y = y;
string str = string.Concat(new object[4]
{
(object) path2,
(object) "\\",
(object) y,
(object) ".png"
});
if (!System.IO.File.Exists(str))
{
string imageUrl = this.mapControl1.TileSource.GetImageUrl(oPosition, level);
bool result = TryGetBitmapFromServerCache(listX[i], y, imageUrl, str);
while (!result)
{
result = TryGetBitmapFromServerCache(listX[i], y, imageUrl, str);
}
}
lock (MyLocker)
{
int finish = int.Parse(finishCount[level].ToString());
finish ;
finishCount[level] = finish;
if (finish >= imageCount) //该等级已经下载完成
{
finishStatus[level] = true; //设置该等级的下载完成状态
PictureBox pic = GetPictureBoxFromLayout(level);
SetPictureBoxVisible(pic, true);
}
}
SetProgressValue(pb,int.Parse(finishCount[level].ToString()));
SetLabelText(lb, string.Format("{0}/{1}", int.Parse(finishCount[level].ToString()), imageCount));
//此处检查全部任务是否已经完成
bool resultFlag = CheckTaskFinished();
if (resultFlag) //全部下载完成
{
endTime = DateTime.Now;
lbEndTime.Text = endTime.ToString();
TimeSpan ts = endTime - beginTime;
lbTimeSpan.Text = string.Format("共耗时{0}时{1}分{2}秒", ts.Hours, ts.Minutes, ts.Seconds);
btnDownloadMap.Enabled = true;
btnStop.Enabled = false;
}
}
}
}
/// <summary>
/// 检查下载任务是否已经完成
/// </summary>
/// <returns></returns>
private bool CheckTaskFinished()
{
for (int i = 0; i < downLoadLevelList.Count; i )
{
bool result = bool.Parse(finishStatus[downLoadLevelList[i]].ToString());
if (!result)
return false;
}
return true;
}
private void DownLoadImageThread(object downLoadLevel)
{
int level = (int)downLoadLevel;
ProgressBar pb = GetProgressBarFromLayout(level);
Label lb = GetLabelFromLayout(level);
string path1 = this._TileSavePathContainMapType "\\L" level.ToString("00");
if (!Directory.Exists(path1))
Directory.CreateDirectory(path1);
Hashtable htValues = levelValues[level] as Hashtable;
if (htValues == null)
return;
List<int> list1 = htValues["listX"] as List<int>;
List<int> list2 = htValues["listY"] as List<int>;
int count1 = list1.Count;
int count2 = list2.Count;
//Point point1 = this.mapControl1.TileSource.FromMapPointToTilePoint(lngStart, latStart, level);
//Point point2 = this.mapControl1.TileSource.FromMapPointToTilePoint(lngEnd, latEnd, level);
//List<int> list1 = new List<int>();
//List<int> list2 = new List<int>();
//for (int x = point1.X; x <= point2.X; x)
// list1.Add(x);
//for (int y = point1.Y; y >= point2.Y; --y)
// list2.Add(y);
//for (int index1 = 0; index1 < count1; index1)
//{
// int index2 = index1 random.Next(count1 - index1);
// int num2 = list1[index2];
// list1[index2] = list1[index1];
// list1[index1] = num2;
//}
//for (int index1 = 0; index1 < count2; index1)
//{
// int index2 = index1 random.Next(count2 - index1);
// int num2 = list2[index2];
// list2[index2] = list2[index1];
// list2[index1] = num2;
//}
int num3 = this.downLoadLevelList[this.downLoadLevelList.Count - 1];
int num4 = list1[list1.Count - 1];
int num5 = list2[list2.Count - 1];
Point oPosition = Point.Empty;
int imageCount = count1 * count2; //图片总数
int finishedCount = 0; //已经完成的图片数
SetProgressMaxValue(pb,imageCount);
if (level <= 14) //小于等于14级的直接处理,不需要再启动子线程
{
foreach (int x in list1)
{
string path2 = path1 "\\" x.ToString();
if (!Directory.Exists(path2))
Directory.CreateDirectory(path2);
foreach (int y in list2)
{
if (!isDownloading)
return;
oPosition.X = x;
oPosition.Y = y;
string str = string.Concat(new object[4]
{
(object) path2,
(object) "\\",
(object) y,
(object) ".png"
});
if (!System.IO.File.Exists(str))
{
string imageUrl = this.mapControl1.TileSource.GetImageUrl(oPosition, level);
bool result = TryGetBitmapFromServerCache(x, y, imageUrl, str);
while (!result)
{
result = TryGetBitmapFromServerCache(x, y, imageUrl, str);
}
}
finishedCount;
SetProgressValue(pb, finishedCount);
SetLabelText(lb, string.Format("{0}/{1}", finishedCount.ToString(), imageCount.ToString()));
if (finishedCount >= imageCount) //该等级已经下载完成
{
finishStatus[level] = true; //设置该等级的下载完成状态
PictureBox pic = GetPictureBoxFromLayout(level);
SetPictureBoxVisible(pic, true);
}
//此处检查全部任务是否已经完成
bool resultFlag = CheckTaskFinished();
if (resultFlag) //全部下载完成
{
Action act = delegate()
{
endTime = DateTime.Now;
lbEndTime.Text = endTime.ToString();
TimeSpan ts = endTime - beginTime;
lbTimeSpan.Text = string.Format("共耗时{0}时{1}分{2}秒", ts.Hours, ts.Minutes, ts.Seconds);
btnDownloadMap.Enabled = true;
btnStop.Enabled = false;
};
this.Invoke(act);
}
}
}
}
else
{
//此处启动子线程处理
int threadCount = int.Parse(threadNums[level.ToString()].ToString()); //子线程个数
int groupItems = 0; //将list x 划分成多个线程去处理
if (count1 % threadCount == 0) //能够整除
{
groupItems = count1 / threadCount;
}
else
{
groupItems = (count1 / threadCount) 1;
}
bool flag = false;
for (int i = 0; i < threadCount; i )
{
//计算每个线程要处理的listx开始索引和结束索引
object[] o = new object[4];
o[0] = level;
//if (i == threadCount - 1) //最后一个线程特殊处理
//{
// o[1] = i * groupItems;
// o[2] = count1 - 1;
//}
//else
//{
// o[1] = i * groupItems;
// o[2] = i * groupItems groupItems - 1;
//}
int start = 0;
int end = 0;
start = i * groupItems;
end = i * groupItems groupItems - 1;
if (end >= count1 - 1) //已经到了结尾
{
end = count1 - 1;
flag = true;
}
o[1] = start;
o[2] = end;
o[3] = imageCount; //图片总数
Thread thread = new Thread(new ParameterizedThreadStart(DownLoadImageChildThread));
//thread.Priority = ThreadPriority.BelowNormal;
thread.Name = "thread-" i;
thread.Start(o);
if (flag)
break;
}
}
}
delegate void SetLabelTextDelegate(Label l, string text);
delegate void SetProgressValueDelegate(ProgressBar pb, int value);
delegate void SetPictureBoxVisibleDelegate(PictureBox pb, bool value);
private void SetLabelText(Label l,string text)
{
try
{
if (InvokeRequired)
{
BeginInvoke(new SetLabelTextDelegate(SetLabelText), l, text);
}
else
{
if (l != null)
{
l.Text = text;
l.Refresh();
}
}
}
catch
{
}
}
private void SetProgressMaxValue(ProgressBar pb, int maxValue)
{
try
{
if (InvokeRequired)
{
BeginInvoke(new SetProgressValueDelegate(SetProgressMaxValue), pb, maxValue);
}
else
{
if (pb != null)
{
pb.Maximum = maxValue;
}
}
}
catch
{
}
}
private void SetPictureBoxVisible(PictureBox pb, bool value)
{
try
{
if (InvokeRequired)
{
BeginInvoke(new SetPictureBoxVisibleDelegate(SetPictureBoxVisible), pb, value);
}
else
{
if (pb != null)
{
pb.Visible = value;
pb.Refresh();
}
}
}
catch
{
}
}
private void SetProgressValue(ProgressBar pb,int value)
{
try
{
if (InvokeRequired)
{
BeginInvoke(new SetProgressValueDelegate(SetProgressValue), pb, value);
}
else
{
if (pb != null)
{
pb.Value = value;
pb.Refresh();
}
}
}
catch
{
}
}
/// <summary>
/// 获取table layout中指定的progressbar
/// </summary>
private ProgressBar GetProgressBarFromLayout(int level)
{
string key = "pb_" level.ToString();
return tableLayoutPanel2.Controls[key] as ProgressBar;
}
/// <summary>
/// 获取table layout中指定的label
/// </summary>
private Label GetLabelFromLayout(int level)
{
string key = "lb_" level.ToString();
return tableLayoutPanel2.Controls[key] as Label;
}
/// <summary>
/// 获取table layout中指定的PictureBox
/// </summary>
private PictureBox GetPictureBoxFromLayout(int level)
{
string key = "pic_" level.ToString();
return tableLayoutPanel2.Controls[key] as PictureBox;
}
private void DownloadImage()
{
//this._IsContinueDownload = true;
levelValues.Clear();
finishCount.Clear();
finishStatus.Clear();
foreach (int level in downLoadLevelList) //初始化LevelValues
{
//Hashtable htLevel = new Hashtable();
Hashtable htValues = new Hashtable();
Point pointX = this.mapControl1.TileSource.FromMapPointToTilePoint(lngStart, latStart, level);
Point pointY = this.mapControl1.TileSource.FromMapPointToTilePoint(lngEnd, latEnd, level);
List<int> listX = new List<int>();
List<int> listY = new List<int>();
for (int x = pointX.X; x <= pointY.X; x)
listX.Add(x);
for (int y = pointX.Y; y >= pointY.Y; --y)
listY.Add(y);
int count1 = listX.Count;
int count2 = listY.Count;
for (int index1 = 0; index1 < count1; index1)
{
int index2 = index1 random.Next(count1 - index1);
int num2 = listX[index2];
listX[index2] = listX[index1];
listX[index1] = num2;
}
for (int index1 = 0; index1 < count2; index1)
{
int index2 = index1 random.Next(count2 - index1);
int num2 = listY[index2];
listY[index2] = listY[index1];
listY[index1] = num2;
}
htValues.Add("listX", listX);
htValues.Add("listY", listY);
levelValues.Add(level, htValues);
finishCount.Add(level,0);
finishStatus.Add(level,false);
}
foreach (int level in downLoadLevelList)
{
Thread downLoadThread = new Thread(new ParameterizedThreadStart(DownLoadImageThread));
//downLoadThread.Priority = ThreadPriority.BelowNormal;
downLoadThread.Start(level);
}
}
private bool TryGetBitmapFromServerCache(int x, int y, string url, string filepath)
{
try
{
//if (string.IsNullOrEmpty(url))
// return flag;
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.Proxy = WebRequest.DefaultWebProxy;
httpWebRequest.UserAgent = CUserAgent;
httpWebRequest.Timeout = 30000;
httpWebRequest.ReadWriteTimeout = 150000;
httpWebRequest.Accept = "*/*";
httpWebRequest.Referer = "http://ditu.google.cn/";
using (HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse)
{
using (Stream responseStream = httpWebResponse.GetResponseStream())
{
using (Bitmap bitmap = BitmapHelper.FromStreamToBitmap(responseStream))
bitmap.Save(filepath, ImageFormat.Png);
}
}
return true;
}
catch (Exception ex)
{
//Console.WriteLine("url=" url);
return false;
}
}
private void btnLoadMap_Click(object sender, EventArgs e)
{
double centerJD = 0.0; //中心经度
if (!double.TryParse(this.txtCenterJD.Text, out centerJD))
centerJD = this.DefaultCenter.X;
double centerWD = 0.0; //中心纬度
if (!double.TryParse(this.txtCenterWD.Text, out centerWD))
centerWD = this.DefaultCenter.Y;
this.DefaultCenter.X = centerJD;
this.DefaultCenter.Y = centerWD;
this.DefaultZoom = Convert.ToInt32(this.cbLevel.Text);
this.mapControl1.Center = this.DefaultCenter;
this.mapControl1.Zoom = this.DefaultZoom;
this.gmts_Map.IsCorrectGoogleVersions = false;
this.mapControl1.TileSource = (TileSource)this.gmts_Map;
lblStartLng.Text = mapControl1.Extent.Left.ToString(); //起始经度
lblStartLat.Text = mapControl1.Extent.Bottom.ToString(); //起始纬度
lblEndLng.Text = mapControl1.Extent.Right.ToString(); //结束经度
lblEndLat.Text = mapControl1.Extent.Top.ToString(); //结束纬度
hasLoadMap = true;
}
private void Form1_Load(object sender, EventArgs e)
{
LoadLevel();
LoadDownLoadLevel();
//btnLoadMap_Click(null,null);
if (this.Controls.Contains(CRectCtl))
this.Controls.Remove(CRectCtl);
CRectCtl = new RectControl.CRectControl(mapControl1);
//CRectCtl.TopLevel = false;
this.Controls.Add(CRectCtl);
CRectCtl.BringToFront();
CRectCtl.Draw();
//Form myForm = new Form();
//myForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
//myForm.Location = new Point(50,50);
//myForm.Size = new System.Drawing.Size(100,100);
//myForm.TopLevel = false;
//myForm.TopMost = true;
//myForm.ControlBox = false;
//myForm.Opacity = 0.0;
////myForm.BackColor = Color.Transparent;
//this.Controls.Add(myForm);
//myForm.Show();
//myForm.BringToFront();
}
private void LoadLevel()
{
cbLevel.Items.Clear();
for (int i = 0; i < 21; i )
{
cbLevel.Items.Add(i);
}
cbLevel.SelectedItem = 10;
}
private void LoadDownLoadLevel()
{
tableLayoutPanel1.Controls.Clear();
for (int i = 0; i < RowItems; i )
{
for (int j = 0; j < ColumnItems; j )
{
CheckBox cb = new CheckBox();
cb.Text = (i * ColumnItems j 1).ToString();
tableLayoutPanel1.Controls.Add(cb,j,i);
}
}
}
private void AddElement(string key, string value, XmlElement parent)
{
XmlElement element = parent.OwnerDocument.CreateElement(key);
XmlText textNode = parent.OwnerDocument.CreateTextNode(value);
element.AppendChild((XmlNode)textNode);
parent.AppendChild((XmlNode)element);
}
private void btnDownloadMap_Click(object sender, EventArgs e)
{
//if (!this._IsLoadMap)
//{
// int num1 = (int)MessageBox.Show("请先加载地图");
//}
//else if (this.clbLevel.CheckedItems.Count < 1)
//{
// int num2 = (int)MessageBox.Show("请选择要下载的级别");
//}
//else
//{
string text = this.txtSavePath.Text;
if (string.IsNullOrEmpty(text))
{
MessageBox.Show("路径不能为空");
return;
}
if (!hasLoadMap)
{
MessageBox.Show("请先加载地图");
return;
}
//else if (!Directory.Exists(text))
//{
// int num4 = (int)MessageBox.Show("路径不存在");
//}
//else
//{
//InitDownLoadProgress();
this._TileSavePathContainMapType = text "\\Map";
if (!Directory.Exists(this._TileSavePathContainMapType))
Directory.CreateDirectory(this._TileSavePathContainMapType);
//this.ChangeControlEnabled(false);
//this._ZoomList.Clear();
//foreach (object obj in this.clbLevel.CheckedItems)
//this._ZoomList.Add(Convert.ToInt32(obj));
lngStart = Convert.ToDouble(this.lblStartLng.Text);
latStart = Convert.ToDouble(this.lblStartLat.Text);
lngEnd = Convert.ToDouble(this.lblEndLng.Text);
latEnd = Convert.ToDouble(this.lblEndLat.Text);
InitDownLoadProgress();
if (downLoadLevelList.Count == 0)
{
MessageBox.Show("请选择要下载的等级");
return;
}
XmlDocument xmlDocument1 = new XmlDocument();
XmlDeclaration xmlDeclaration1 = xmlDocument1.CreateXmlDeclaration("1.0", "utf-8", "");
xmlDocument1.AppendChild((XmlNode)xmlDeclaration1);
XmlElement element1 = xmlDocument1.CreateElement("KeliTileGIS");
XmlElement element2 = xmlDocument1.CreateElement("LocalGoogleChinaMap");
XmlElement element3 = xmlDocument1.CreateElement("MinZoom");
int num5 = this.downLoadLevelList[0];
XmlText textNode1 = xmlDocument1.CreateTextNode(num5.ToString());
element3.AppendChild((XmlNode)textNode1);
XmlElement element4 = xmlDocument1.CreateElement("MaxZoom");
XmlText textNode2 = xmlDocument1.CreateTextNode(this.downLoadLevelList[this.downLoadLevelList.Count - 1].ToString());
element4.AppendChild((XmlNode)textNode2);
XmlElement element5 = xmlDocument1.CreateElement("Left");
XmlText textNode3 = xmlDocument1.CreateTextNode(lngStart.ToString());
element5.AppendChild((XmlNode)textNode3);
XmlElement element6 = xmlDocument1.CreateElement("Bottom");
XmlText textNode4 = xmlDocument1.CreateTextNode(latStart.ToString());
element6.AppendChild((XmlNode)textNode4);
XmlElement element7 = xmlDocument1.CreateElement("Right");
XmlText textNode5 = xmlDocument1.CreateTextNode(lngEnd.ToString());
element7.AppendChild((XmlNode)textNode5);
XmlElement element8 = xmlDocument1.CreateElement("Top");
XmlText textNode6 = xmlDocument1.CreateTextNode(latEnd.ToString());
element8.AppendChild((XmlNode)textNode6);
element2.AppendChild((XmlNode)element3);
element2.AppendChild((XmlNode)element4);
element2.AppendChild((XmlNode)element5);
element2.AppendChild((XmlNode)element6);
element2.AppendChild((XmlNode)element7);
element2.AppendChild((XmlNode)element8);
element1.AppendChild((XmlNode)element2);
xmlDocument1.AppendChild((XmlNode)element1);
xmlDocument1.Save(this._TileSavePathContainMapType "\\conf.xml");
XmlDocument xmlDocument2 = new XmlDocument();
XmlDeclaration xmlDeclaration2 = xmlDocument2.CreateXmlDeclaration("1.0", "utf-8", "");
xmlDocument2.AppendChild((XmlNode)xmlDeclaration2);
XmlElement element9 = xmlDocument2.CreateElement("GoogleMapDownload");
XmlElement element10 = xmlDocument2.CreateElement("DownloadParameters");
this.AddElement("MapType", "Map", element10);
this.AddElement("CenterLng", mapControl1.Center.X.ToString(), element10);
this.AddElement("CenterLat", mapControl1.Center.Y.ToString(), element10);
this.AddElement("InitLabel", this.cbLevel.Text.Trim(), element10);
//FrmMain frmMain1 = this;
string key1 = "MinLabel";
int num6 = this.downLoadLevelList[0];
string str1 = num6.ToString();
XmlElement parent1 = element10;
AddElement(key1, str1, parent1);
//FrmMain frmMain2 = this;
string key2 = "MaxLabel";
num6 = this.downLoadLevelList[this.downLoadLevelList.Count - 1];
string str2 = num6.ToString();
XmlElement parent2 = element10;
AddElement(key2, str2, parent2);
this.AddElement("SavePath", this.txtSavePath.Text.Trim(), element10);
this.AddElement("Disorder", ConfigurationSettings.AppSettings["Disorder"], element10);
this.AddElement("MinSleep", ConfigurationSettings.AppSettings["SleepMinMilliSeconds"], element10);
this.AddElement("MaxSleep", ConfigurationSettings.AppSettings["SleepMaxMilliSeconds"], element10);
this.AddElement("MVersion", ConfigurationSettings.AppSettings["MapVersion"], element10);
this.AddElement("SVersion", ConfigurationSettings.AppSettings["SatelliteVersion"], element10);
this.AddElement("LVersion", ConfigurationSettings.AppSettings["LabelsVersion"], element10);
this.AddElement("TVersion", ConfigurationSettings.AppSettings["TerrainVersion"], element10);
this.AddElement("GmdVersion", ((object)Assembly.GetExecutingAssembly().GetName().Version).ToString(), element10);
element9.AppendChild((XmlNode)element10);
xmlDocument2.AppendChild((XmlNode)element9);
xmlDocument2.Save(this._TileSavePathContainMapType "\\gmd_params.xml");
//InitDownLoadProgress();
isDownloading = true;
btnStop.Enabled = true;
btnDownloadMap.Enabled = false;
beginTime = DateTime.Now; //任务开始时间
lbStartTime.Text = beginTime.ToString();
lbEndTime.Text = string.Empty;
lbTimeSpan.Text = "共耗时:";
new Thread(new ThreadStart(this.DownloadImage))
{
Name = "GoogleMapDownloadThread",
IsBackground = false,
Priority = ThreadPriority.Normal
}.Start();
//}
//}
}
/// <summary>
/// 显示地图的经纬度范围
/// </summary>
private void ShowJDWD()
{
if (mapControl1.Extent != null)
{
lblStartLng.Text = mapControl1.Extent.Left.ToString(); //起始经度
lblStartLat.Text = mapControl1.Extent.Bottom.ToString(); //起始纬度
lblEndLng.Text = mapControl1.Extent.Right.ToString(); //结束经度
lblEndLat.Text = mapControl1.Extent.Top.ToString(); //结束纬度
//设置中心点
//txtCenterJD.Text = ((mapControl1.Extent.Left mapControl1.Extent.Right) / 2).ToString();
//txtCenterWD.Text = ((mapControl1.Extent.Top mapControl1.Extent.Bottom) / 2).ToString();
}
if (mapControl1.Center != null)
{
txtCenterJD.Text = mapControl1.Center.X.ToString();
txtCenterWD.Text = mapControl1.Center.Y.ToString();
}
}
private void mapControl1_ZoomChanged(int zoom)
{
ShowJDWD();
}
private void mapControl1_MouseUp(object sender, MouseEventArgs e)
{
ShowJDWD();
}
private void btnStop_Click(object sender, EventArgs e)
{
isDownloading = false;
btnStop.Enabled = false;
btnDownloadMap.Enabled = true;
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
isDownloading = false;
}
//private bool CheckScope()
//{
// if (mapControl1.Top <= MinTop)
// return true;
// return false;
//}
private void SetScope()
{
if (mapControl1.Top <= MinTop)
{
mapControl1.Top = MinTop;
return;
}
if (mapControl1.Left <= MinLeft)
{
mapControl1.Left = MinLeft;
return;
}
if (mapControl1.Bottom >= MinTop MaxHeight)
{
mapControl1.Top = MinTop MaxHeight - mapControl1.Height;
return;
}
if (mapControl1.Right >= MinLeft MaxWidth)
{
mapControl1.Left = MinLeft MaxWidth - mapControl1.Width;
return;
}
if (mapControl1.Size.Height >= MaxHeight)
{
mapControl1.Size = new Size(mapControl1.Size.Width,MaxHeight);
return;
}
if (mapControl1.Size.Width >= MaxWidth)
{
mapControl1.Size = new Size(MaxWidth, mapControl1.Size.Height);
return;
}
//if (mapControl1.Bottom >= MaxBottom)
//{
// mapControl1.Bottom = MaxBottom;
//}
//if (mapControl1.Right <= MinTop)
//{
// mapControl1.Top = MinTop;
//}
}
private void mapControl1_Resize(object sender, EventArgs e)
{
SetScope();
label8.Text = string.Format("Top={0},Bottom={1},Left={2},Right={3}",mapControl1.Top,mapControl1.Bottom,mapControl1.Left,mapControl1.Right);
ShowJDWD();
}
private void mapControl1_LocationChanged(object sender, EventArgs e)
{
SetScope();
ShowJDWD();
label8.Text = string.Format("Top={0},Bottom={1},Left={2},Right={3}", mapControl1.Top, mapControl1.Bottom, mapControl1.Left, mapControl1.Right);
}
}
public class DownLoadImageParameter
{
/// <summary>
/// 下载等级
/// </summary>
public int level
{
get;
set;
}
/// <summary>
/// 起始索引
/// </summary>
public int startIndex
{
get;
set;
}
/// <summary>
/// 结束索引
/// </summary>
public int endIndex
{
get;
set;
}
}
}