C#在Winform中使用GMap.Net地图开发控件在离线模式下绘制两点路线

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版权协议,转载请附上原文出处链接和本声明。