基本信息
源码名称: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; } } }