C#在Winform中使⽤GMap.Net地图开发控件在离线模式下绘 制两点路线
1.下载基于GMap.NET控件的WindowsForms程序的实例,可以直接引⽤这些dll⽂件编写地图应⽤软件。
我们所要⽤到其中的三个⽂件:
GMap.Net.Core.dll
GMap.Net.WindowsForms.dll
(⽣成离线地图)
之前在编译程序时提⽰⽆GMarkerGoogle定义等错误,原因是我之前载⼊的dll内容不全,缺少很多类的定义。⽽将demo源码中编译好的dll⽂件引⽤到⾃⼰⼯程中则不报错。
新建⼀个Visual C# 的Windows窗⼝程序,在“解决⽅案资源管理器”中右键“引⽤”,点击“添加引⽤”,在“
浏览”中到dll⽂件所在路径并添加。
驱动轴
3.添加GMapControl控件
打开⼯具箱,右键“所有Windows窗体”,点击“选择项”,在“.NET Framework组件”中添
秒的定义加“GMap.Net.WindowsForms.dll”并选中。
确定后可以看到⼯具箱中多了⼀栏GMapControl控件。
在Form设计窗⼝下,将GMapControl控件加到Form中,并命名为“gMap”。
4.⽣成离线地图。
启动,选择所需载⼊的地图类型。
按Alt键并使⽤⿏标框选所需载⼊的地图区域,在“cache”栏中选择“Prefetch selected area”,然后按⾃⼰的需求⽣成zoom层次数。
完成后点击“Export”,⽣成“db”⽂件。(本例将该⽂件放⼊应⽤程序⽬录下,即“⼯程\bin\Debug”⽂件夹)
因为在运⾏demo时,会默认在 C:\Users\⽤户名<;你的计算机⽤户名>\AppData\Local\GMap.NET\TileDBv5\en⽂件夹下⽣成地图缓存⽂件db,因此在测试程序是否能运⾏在离线模式时先删除db⽂件。
5. 双击Form设计窗⼝下的GMapControl控件,编写gMap_Load地图载⼊⽅法。新东泰娱乐广场
(1)引⼊命名空间
using GMap.NET;
using GMap.NET.WindowsForms;
using GMap.NET.MapProviders;
using GMap.NET.WindowsForms.Markers;
(2)初始化地图
//Bing混合地图
gMap.MapProvider = GMapProviders.BingHybridMap;
//离线模式
gMap.Manager.Mode = AccessMode.CacheOnly;
String mapPath = Application.StartupPath + "\\db";
GMap.NET.GMaps.Instance.ImportFromGMDB(mapPath);
//地图中⼼位置
//gMap.SetPositionByKeywords("beijing, china");
gMap.Position = new PointLatLng(39.185422, 112.252810); //中⼼点的纬度,经度
//不显⽰中⼼⼗字点
gMap.ShowCenter = false;
//左键拖拽地图
gMap.DragButton = MouseButtons.Left;
gMap.MinZoom = 2; //最⼩缩放
gMap.MaxZoom = 18; //最⼤缩放
gMap.Zoom = 6; //当前缩放
(3)添加起始点标记
//地图由三层组成。最上层:GMapMarker,中间层:GMapOverlay,最底层:GMapControls
GMapOverlay gMapOverlay = new GMapOverlay("markers");
/
/起点⽔滴标记
PointLatLng start = new PointLatLng(40.187163, 116.18927); //路径起点
GMapMarker gMapMarker = new GMarkerGoogle(start, );
gMapOverlay.Markers.Add(gMapMarker); //向图层中添加标记 gMap.Overlays.Add(gMapOverlay); //向控件中添加图层
//终点⽔滴标记
PointLatLng end = new PointLatLng(38.807905, 111.623768); //路径终点
gMapMarker = new GMarkerGoogle(end, );
汉译英gMapOverlay.Markers.Add(gMapMarker); //向图层中添加标记
gMap.Overlays.Add(gMapOverlay); //向控件中添加图层
(4)绘制两点路线
/
/根据起⽌点start、end和当前的zoom查路径
MapRoute route = GMap.NET.MapProviders.BingHybridMapProvider.Instance.GetRoute(start, end, false, false, (int)gMap.Zoom); if (route != null)
{
爱森斯坦
//将路转换成线
GMapRoute r = new GMapRoute(route.Points, route.Name);
gMapOverlay.Routes.Add(r); //向图层中添加道路
gMap.Overlays.Add(gMapOverlay); //向控件中添加图层
r.Stroke.Width = 3; //路径宽度
r.Stroke.Color = Color.Red; //路径颜⾊
}
6. 效果图。