GMap.Net 實現離線地圖


要求:實現離線地圖,地圖上有小船標志,還有電子圍欄的功能用來區分該小船是否在電子圍欄范圍內  

C#實現步驟:

  
1、添加引用:GMap.NET.Core.dll、GMap.NET.WindowsForms.dll

  2、在工具箱右鍵【選擇項】瀏覽,添加GMap.NET.WindowsForms.dll控件

  3、界面將添加的GMap控件拖進來

  4、雙擊打開Demo.WindowsForms.exe應用,選擇地圖類型(map Type),按住Alt鍵選擇需要的地圖片段,點擊Prefetch selected area等待地圖瓦片下載完成,最后點擊Export導出保存到項目的Debug下面

  5、雙擊項目的GMap控件初始化地圖
 
         

 


  1
using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 using DevComponents.DotNetBar; 11 using DevComponents.DotNetBar.SuperGrid; 12 using System.IO; 13 14 using GMap.NET; 15 using GMap.NET.WindowsForms; 16 using GMap.NET.MapProviders; 17 using GMap.NET.WindowsForms.Markers; 18 using System.Configuration; 19 using GMap.NET.Projections; 20 using GMap.NET.Internals; 21 22 namespace fishingVesselUi 23 { 24 public partial class mainForm : Form 25 { 26 public mainForm() 27 { 28 InitializeComponent(); 29 } 30 31 #region 這個界面的初始化 32 33 private void mainForm_Load(object sender, EventArgs e) 34 { 35 pnlTopMenu.BackColor = Color.FromArgb(24, 144, 237); 36 pnlLeftMenu.BackColor = Color.FromArgb(255, 137, 193, 240); 37 38 try 39 { 40 //webBrowser1.Url = new Uri("http://www.2345.com"); 41 //這個文件與可執行文件放在同一目錄 42 //wbMap.Url = new Uri(Path.Combine(Application.StartupPath, "baiduMap.html")); 43 //wbMap.Navigate(Application.StartupPath + "/map.html"); 44 45 //wbMap.ObjectForScripting = this; 46 } 47 catch (Exception ex) 48 { 49 MessageBox.Show(ex.Message, "異常", MessageBoxButtons.OK, MessageBoxIcon.Error); 50 } 51 52 //當窗體發生改變時,pnl跟着一起改變,werbrowser隨着pnl改變而改變 53 //pnlMap.Width = this.Width; 54 //pnlMap.Height = this.Height; 55 //wbMap.Dock = DockStyle.Fill; 56 } 57 #endregion 58 59 //加載離線百度地圖 60 //private void gMap_Load(object sender, EventArgs e) 61 //{ 62 // gMap.MapProvider = GMapProviders.BaiduMap; //使用百度地圖 63 64 // //地圖的中心位置 65 // gMap.Position = new PointLatLng(double.Parse(ConfigurationManager.AppSettings["defaultLat"]), 66 // double.Parse(ConfigurationManager.AppSettings["defaultLng"])); 67 // gMap.MapProvider.Area = new RectLatLng(30.981178, 105.351914, 2.765142, 4.120995); 68 // gMap.BoundsOfMap = new RectLatLng(30.981178, 105.351914, 2.765142, 4.120995); 69 70 // //離線模式 71 // gMap.Manager.Mode = AccessMode.CacheOnly; //緩存 72 // String mapPath = Application.StartupPath + "DataExp_Baidu.gmdb"; 73 // GMap.NET.GMaps.Instance.ImportFromGMDB(mapPath); 74 75 // gMap.DragButton = MouseButtons.Left; //左鍵拖拽地圖 76 // gMap.Zoom = 13; //當前縮放 77 // gMap.MinZoom = 8; //最小縮放 78 // gMap.MaxZoom = 24; //最大縮放 79 //} 80 81 #region 加載谷歌地形中文地圖 82 83 private void gMap_Load(object sender, EventArgs e) 84 { 85 //bing混合模式 86 //gMap.MapProvider = GMapProviders.BingHybridMap; 87 gMap.MapProvider = GMapProviders.GoogleChinaTerrainMap; 88 89 //離線模式 90 gMap.Manager.Mode = AccessMode.CacheOnly; 91 String mapPath = Application.StartupPath + "DataExp_googleT.gmdb"; 92 GMap.NET.GMaps.Instance.ImportFromGMDB(mapPath); 93 94 //地圖的中心位置 95 //gMap.Position = new PointLatLng(39.185422, 112.252810); //中心點的緯度,經度 96 gMap.Position = new PointLatLng(39.51007, 124.17733); //中心點的緯度,經度 97 98 //不顯示中心十字點 99 gMap.ShowCenter = false; 100 101 //左鍵拖拽地圖 102 gMap.DragButton = MouseButtons.Left; 103 //最小縮放 104 gMap.MinZoom = 4; 105 //最大縮放 106 gMap.MaxZoom = 16; 107 //當前縮放 108 gMap.Zoom = 5; 109 110 //添加電子圍欄功能(在地圖上畫多邊形、圓形) 定義緯度經度坐標列表 111 GMapOverlay polygons = new GMapOverlay("polygons"); 112 List<PointLatLng> points = new List<PointLatLng>(); 113 points.Add(new PointLatLng(39.14502, 123.45209)); 114 points.Add(new PointLatLng(39.24502, 123.55209)); 115 points.Add(new PointLatLng(39.35502, 123.45209)); 116 points.Add(new PointLatLng(39.24502, 123.05209)); 117 points.Add(new PointLatLng(39.04502, 123.05209)); 118 //points.Add(new PointLatLng(38.24502, 123.05209)); 119 GMapPolygon polygon = new GMapPolygon(points, "pppp"); 120 //對多邊形進行樣式設置 121 polygon.Stroke.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; //線條為虛線 122 polygon.Stroke.Color = Color.Red; //設置邊線為紅色 123 polygon.Fill = new SolidBrush(Color.FromArgb(0,Color.White)); //設置填充顏色為透明 124 125 polygons.Polygons.Add(polygon); 126 gMap.Overlays.Add(polygons); 127 128 129 130 //地圖由三層組成 最上層:GMapMarker,中間層:GMapOverlay,最底層:GMapCtrols 131 GMapOverlay gMapOverlay = new GMapOverlay("markers"); 132 133 //小船標記圖標 134 Bitmap bitPink = new Bitmap("images/shipMarker0.png"); 135 Bitmap bitRed = new Bitmap("images/shipRed0.png"); 136 Bitmap bitYellow = new Bitmap("images/shipYellow0.png"); 137 138 //第一個錨點坐標 139 PointLatLng startMarker = new PointLatLng(39.24502, 123.05209); //路徑起點 140 GMapMarker gMapMarker = new GMarkerGoogle(startMarker, bitPink); 141 //GMapMarker gMapMarker = new GMarkerGoogle(startMarker,GMarkerGoogleType.green); 142 143 gMapOverlay.Markers.Add(gMapMarker); //向圖層中添加標記 144 gMap.Overlays.Add(gMapOverlay); //向控件中添加圖層 145 146 //第二個錨點坐標 147 PointLatLng endMarker = new PointLatLng(39.107905, 123.42137); //路徑終點 148 gMapMarker = new GMarkerGoogle(endMarker, bitRed); 149 gMapOverlay.Markers.Add(gMapMarker); //向圖層中添加標記 150 gMap.Overlays.Add(gMapOverlay); //向控件中添加圖層 151 152 153 //第三個錨點坐標 154 PointLatLng endMarker1 = new PointLatLng(39.107905, 123.22137); //路徑終點 155 gMapMarker = new GMarkerGoogle(endMarker1, bitYellow); 156 gMapOverlay.Markers.Add(gMapMarker); //向圖層中添加標記 157 gMap.Overlays.Add(gMapOverlay); //向控件中添加圖層 158 159 160 //根據起止點start、end和當前的zoom查找路徑 161 //MapRoute route = BingHybridMapProvider.Instance.GetRoute(startMarker, endMarker, false, false, (int)gMap.Zoom); 162 //MapRoute route = GoogleChinaTerrainMapProvider.Instance.GetRoute(startMarker, endMarker, false, false, (int)gMap.Zoom); 163 //if (route != null) 164 //{ 165 // //將路轉換成線 166 // GMapRoute r = new GMapRoute(route.Points, route.Name); 167 // gMapOverlay.Routes.Add(r); //向圖層中添加道路 168 // gMap.Overlays.Add(gMapOverlay); //向控件中添加圖層 169 // r.Stroke.Width = 3; //路徑寬度 170 // r.Stroke.Color = Color.Red; //路徑顏色 171 //} 172 } 173 #endregion 174 175 #region 加載谷歌中文離線地圖 176 //private void gMap_Load(object sender, EventArgs e) 177 //{ 178 // //bing混合模式 179 // //gMap.MapProvider = GMapProviders.BingHybridMap; 180 // gMap.MapProvider = GMapProviders.GoogleChinaMap; 181 182 // //離線模式 183 // gMap.Manager.Mode = AccessMode.CacheOnly; 184 // String mapPath = Application.StartupPath + "DataExp.gmdb"; 185 // GMap.NET.GMaps.Instance.ImportFromGMDB(mapPath); 186 187 // //地圖的中心位置 188 // gMap.Position = new PointLatLng(39.185422, 112.252810); //中心點的緯度,經度 189 190 // //不顯示中心十字點 191 // gMap.ShowCenter = false; 192 193 // //左鍵拖拽地圖 194 // gMap.DragButton = MouseButtons.Left; 195 // //最小縮放 196 // gMap.MinZoom = 4; 197 // //最大縮放 198 // gMap.MaxZoom = 13; 199 // //當前縮放 200 // gMap.Zoom = 5; 201 202 // //地圖由三層組成 最上層:GMapMarker,中間層:GMapOverlay,最底層:GMapCtrols 203 // GMapOverlay gMapOverlay = new GMapOverlay("markers"); 204 205 // //起點水滴標記 206 // PointLatLng startMarker = new PointLatLng(40.187163, 116.18927); //路徑起點 207 // //GMapMarker gMapMarker = new GMarkerGoogle(startMarker, GMarkerGoogleType.green); 208 // GMapMarker gMapMarker = new GMarkerGoogle(startMarker, GMarkerGoogleType.green); 209 // gMapOverlay.Markers.Add(gMapMarker); //向圖層中添加標記 210 // gMap.Overlays.Add(gMapOverlay); //向控件中添加圖層 211 212 // //終點水滴標記 213 // PointLatLng endMarker = new PointLatLng(38.807905, 111.623768); //路徑終點 214 // gMapMarker = new GMarkerGoogle(endMarker, GMarkerGoogleType.green); 215 // gMapOverlay.Markers.Add(gMapMarker); //向圖層中添加標記 216 // gMap.Overlays.Add(gMapOverlay); //向控件中添加圖層 217 218 // //根據起止點start、end和當前的zoom查找路徑 219 // //MapRoute route = BingHybridMapProvider.Instance.GetRoute(startMarker, endMarker, false, false, (int)gMap.Zoom); 220 // MapRoute route = GoogleChinaMapProvider.Instance.GetRoute(startMarker, endMarker, false, false, (int)gMap.Zoom); 221 // if (route != null) 222 // { 223 // //將路轉換成線 224 // GMapRoute r = new GMapRoute(route.Points, route.Name); 225 // gMapOverlay.Routes.Add(r); //向圖層中添加道路 226 // gMap.Overlays.Add(gMapOverlay); //向控件中添加圖層 227 // r.Stroke.Width = 3; //路徑寬度 228 // r.Stroke.Color = Color.Red; //路徑顏色 229 // } 230 //} 231 #endregion 232 233 #region 加載百度離線地圖 234 235 //private void gMap_Load(object sender, EventArgs e) 236 //{ 237 // //不顯示中心十字點 238 // this.gMap.ShowCenter = false; 239 240 // //bing混合模式 241 // //gMap.MapProvider = GMapProviders.BingHybridMap; 242 // gMap.MapProvider = GMapProviders.BaiduMap; 243 244 // //離線模式 245 // gMap.Manager.Mode = AccessMode.CacheOnly; 246 // String mapPath = Application.StartupPath + "DataExp_Baidu.gmdb"; 247 // GMap.NET.GMaps.Instance.ImportFromGMDB(mapPath); 248 249 // //地圖的中心位置 250 // gMap.Position = new PointLatLng(39.185422, 112.252810); //中心點的緯度,經度 251 // //左鍵拖拽地圖 252 // gMap.DragButton = MouseButtons.Left; 253 // //最小縮放 254 // gMap.MinZoom = 4; 255 // //最大縮放 256 // gMap.MaxZoom = 13; 257 // //當前縮放 258 // gMap.Zoom = 5; 259 260 // //地圖由三層組成 最上層:GMapMarker,中間層:GMapOverlay,最底層:GMapCtrols 261 // GMapOverlay gMapOverlay = new GMapOverlay("markers"); 262 263 // //起點水滴標記 264 // PointLatLng startMarker = new PointLatLng(20.187163, 66.18927); //路徑起點 265 // //GMapMarker gMapMarker = new GMarkerGoogle(startMarker, GMarkerGoogleType.green); 266 // GMapMarker gMapMarker = new GMarkerGoogle(startMarker, GMarkerGoogleType.green); 267 // gMapOverlay.Markers.Add(gMapMarker); //向圖層中添加標記 268 // gMap.Overlays.Add(gMapOverlay); //向控件中添加圖層 269 270 // //終點水滴標記 271 // PointLatLng endMarker = new PointLatLng(18.807905, 61.623768); //路徑終點 272 // gMapMarker = new GMarkerGoogle(endMarker, GMarkerGoogleType.green); 273 // gMapOverlay.Markers.Add(gMapMarker); //向圖層中添加標記 274 // gMap.Overlays.Add(gMapOverlay); //向控件中添加圖層 275 276 // //根據起止點start、end和當前的zoom查找路徑 277 // //MapRoute route = BingHybridMapProvider.Instance.GetRoute(startMarker, endMarker, false, false, (int)gMap.Zoom); 278 // MapRoute route = GoogleChinaMapProvider.Instance.GetRoute(startMarker, endMarker, false, false, (int)gMap.Zoom); 279 // if (route != null) 280 // { 281 // //將路轉換成線 282 // GMapRoute r = new GMapRoute(route.Points, route.Name); 283 // gMapOverlay.Routes.Add(r); //向圖層中添加道路 284 // gMap.Overlays.Add(gMapOverlay); //向控件中添加圖層 285 // r.Stroke.Width = 3; //路徑寬度 286 // r.Stroke.Color = Color.Red; //路徑顏色 287 // } 288 //} 289 #endregion 290 291 } 292 }

 

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM