要求:实现离线地图,地图上有小船标志,还有电子围栏的功能用来区分该小船是否在电子围栏范围内
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 }