1.下载基于GMap.NET控件的WindowsForms程序的实例,可以直接引用这些dll文件编写地图应用软件。
我们所要用到其中的三个文件:
GMap.Net.Core.dll
GMap.Net.WindowsForms.dll
Demo.WindowsForms.exe(生成离线地图)
之前在编译程序时提示无GMarkerGoogle定义等错误,原因是我之前载入的dll内容不全,缺少很多类的定义。而将demo源码中编译好的dll文件引用到自己工程中则不报错。
2.添加引用。
新建一个Visual C# 的Windows窗口程序,在“解决方案资源管理器”中右键“引用”,点击“添加引用”,在“浏览”中找到dll文件所在路径并添加。
3.添加GMapControl控件
打开工具箱,右键“所有Windows窗体”,点击“选择项”,在“.NET Framework组件”中添加“GMap.Net.WindowsForms.dll”并选中。
确定后可以看到工具箱中多了一栏GMapControl控件。
在Form设计窗口下,将GMapControl控件加到Form中,并命名为“gMap”。
4.生成离线地图。
启动Demo.WindowsForms.exe,选择所需载入的地图类型。
按Alt键并使用鼠标框选所需载入的地图区域,在“cache”栏中选择“Prefetch selected area”,然后按自己的需求生成zoom层次数。
完成后点击“Export”,生成“DataExp.gmdb”文件。(本例将该文件放入应用程序目录下,即“工程\bin\Debug”文件夹)
因为在运行demo时,会默认在 C:\Users\用户名<你的计算机用户名>\AppData\Local\GMap.NET\TileDBv5\en文件夹下生成地图缓存文件 Data.gmdb,因此在测试程序是否能运行在离线模式时先删除Data.gmdb文件。
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 + "\\bingmap.gmdb";
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, GMarkerGoogleType.green);
gMapOverlay.Markers.Add(gMapMarker); //向图层中添加标记
gMap.Overlays.Add(gMapOverlay); //向控件中添加图层
//终点水滴标记
PointLatLng end = new PointLatLng(38.807905, 111.623768); //路径终点
gMapMarker = new GMarkerGoogle(end, GMarkerGoogleType.green);
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. 效果图。
版权声明:本文为lyss918原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。