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 }