Gmap使用心得分享C#-winform-Gmap

目录

一、Gmap库引用

1.下载Gmap引用库

2.Visual Studio添加项目引用

(1)打开项目后点击项目后添加引用                ​

(2)浏览本地库

(3)添加引用即可

二、Gmap使用流程

         1.添加GmapControl

2.图层Overlay

(1)图层简介

(2)图层设置

2.路径Route

(1)Route类

(2)PointLatlng类(点类)

(3)Pen类(绘笔)

(4)Maker类(标记)


一、Gmap库引用

1.下载Gmap引用库

        下载链接:Gmap库资源+示例demo-C#文档类资源-CSDN文库

        内容包括Gmap库以及一个小型的示例demo

2.Visual Studio添加项目引用

(1)打开项目后点击项目后添加引用                

(2)浏览本地库

(3)添加引用即可

二、Gmap使用流程

1.添加GmapControl

        GmapControl作为一个控件可以在设计时直接拖动到UI界面上,Gmap是一个数据可视化的库,它可以让你在地图上进行大部分你想得到的编辑,例如我们以下要说的绘制路径,标记点位等等。

        我们使用Gmap的过程呢,可以想象成军事地图,没错,就是行军打仗的时候的那个战略地图,你总要标记一下哪里有敌人,哪里是高地,我们要怎么进攻,行进路线等等对吧。而GmapControl这个控件就相当于那张超大号的地图,它给你提供一张有地形信息的地图,剩下的战略信息都需要你自己来绘制。所以说如果不使用该控件的话,可以说使用Gmap的意义就没那么大了对吧?你都没有地图,你要什么进攻路线啊。

        所以我们先再工具箱里拖出一个GmapControl,就命名为GmapControl1吧。

        GmapControl的初始化也很简单,如下

this.gMapControl1.Manager.Mode = AccessMode.ServerAndCache;             //默认地图加载方式

GMap.NET.GMaps.Instance.ExportToGMDB("./Map_Sourse/" + gMapControl1.MapProvider.Name + ".gmdb");

GMap.NET.GMaps.Instance.ImportFromGMDB("./Map_Sourse/" + gMapControl1.MapProvider.Name + ".gmdb");

this.gMapControl1.MapProvider = GMapProviders.OpenCycleTransportMap;        //中文城市地图
this.gMapControl1.Position = new PointLatLng(30.16895771, 119.98405169);    //默认地图中心
this.gMapControl1.MaxZoom = 25;                                             //地图最大缩放
this.gMapControl1.MinZoom = 5;                                              //地图最小缩放
this.gMapControl1.Zoom = 18;                                                //默认地图缩放
this.gMapControl1.ShowCenter = false;                                       //取消中心十字
this.gMapControl1.DragButton = MouseButtons.Left;                       //Gmap控件左击拖拽

        Gmap的地图是网络资源,其中所有的地图资源都在GMapProviders这个类中,但是要注意的是资源是全球性的,所以国区内的一些地图资源是加载不到的,因此在选择资源时可以多尝试几次,像上面给出的这个OpenCycleTransportMap就是一个可以在国内加载的地图资源。

        其余的初始化大家自己简单看一下就应该知道什么作用啦。

2.图层Overlay

(1)图层简介

        如果曾经用过Photoshop等绘图软件的同学就可以跳过啦。

        ok,所谓图层,就是把我们想要的战略地图想象成一叠图片,每一层图片上标注着不同的信息,比如某一层只保存哪里有敌人,再来一层只保存哪里是我们的阵营,再添加好多层,直到可以覆盖掉我们所有需要的信息。然后把它们重合到一起,就形成了一张完整的军事地图啦,上面既有敌人信息,又有地形信息。而我们刚才做的那一层一层的图片相对我们这个地图而言,就可以叫做一个图层。

        简单点说呢,加菲猫最爱吃的意大利千层面,图层就是千层面里面的每一层,它们合起来才能完整的构成一张地图。

(2)图层设置

GMapOverlay lay_manual = new GMapOverlay("lay_id");

        这就已经创建好了一个图层了,构造函数里面的参数就是这个图层的id,你在程序中使用lay_manual可以访问这个图层,也可以使用下面的操作找到这个图层的id。

String id = lay_manual.id;

        创建好一个图层之后要记得把这个图层加到地图中,否则光有图层但没有和地图也是不完整的。

this.gMapControl1.Overlays.Add(lay_manual);

        这样,GmapControl就有了它第一个图层,但是这个图层上还什么东西都没有,所以我们可以对这个图层进行一些操作,让它可以为整张地图做一些贡献。这样就要看一下这个Overlay里面能放什么了,最常用的就是接下来要说的路径Route了。

2.路径Route

(1)Route类

        说到Gmap,其实用的最多的就是在地图上编辑路径。给出一系列的点迹,让GmapControl帮你画出对应的路线,就是这样。如果加上一些路径规划的算法,那你就可以得到一个简单的导航系统啦。

        其实路径不是什么高级玩意,你可以简单地把它理解为一个列表,列表里的每一个元素都是一个点的经纬度坐标,当你给它的点足够多,当然就成了一条路了呗。它的逻辑就是把你给它的一系列点都连接起来,这样在图层上看起来就是一条路了呗。不过,想要使用路径,声明肯定是少不了的。

GMapRoute route_manual = new GMapRoute("route_id");

        看起来是和图层的声明很相似对吧,同样是变量名和id,这里就不展开说了。

        创建好一个路径之后呢,就可以把这个路径加到想要的图层里面去了,所以怎么加,其实和图层也很类似。

lay_manual.Routes.Add(route_manual);

(2)PointLatlng类(点类)

        这样,我们就把刚刚声明好的路径加到了刚刚声明好的图层里面了。但是很明显,路径里什么都没有,那就来给它加上两个点。

route_manual.Add(new PointLatLng(30.161111, 120.151864));

        如你所见,点迹这个类呢就是一个有两个私有变量的类,前者代表维度,后者代表经度。new一个实例之后把他添加到刚才创建的路径里面就可以显示了,但是对于一个路径而言,一个点当然是不够的,当你给够足够的点之后,这条路径看起来就生动很多了。

(3)Pen类(绘笔)

        看到这里,有的同学可能自己不仅仅创建了一条路径,还搞了很多路径混在了一起,但都是一个颜色一个粗细,根本识别不出来啊。所以就需要一个画笔来区分颜色和粗细了。

Pen pen_manual = new Pen(Color.Blue, 2);

        参数很简单,颜色,和路径的粗细。然后就是要和路径进行绑定,毕竟一个路径一个颜色呗。

route_manual.Stroke = new Pen(Color.Black, 2);

Pen pen_manual = new Pen(Color.Blue, 2);
route_manual.Stroke = pen_manual;

        两种写法都是可以的,看你怎么喜欢怎么来。

(4)Maker类(标记)

        Maker相对而言就简单许多,就是给一个位置做一个特殊标记嘛。构造函数也很简单:

GMarkerGoogle maker = new 
    GMarkerGoogle(new PointLatLng(30.16895771, 119.98405169), GMarkerGoogleType.arrow)

        第一个参数代表坐标,第二个参数就是Maker的图形。

        创建完一个maker当然要把它加入到某一个图层里面去,所以同样有两种选择:

lay_manual.Markers.Add(new 
GMarkerGoogle(new PointLatLng(30.16895771, 119.98405169), GMarkerGoogleType.arrow));


GMarkerGoogle maker = new 
    GMarkerGoogle(new PointLatLng(30.16895771, 119.98405169), GMarkerGoogleType.arrow)
lay_manual.Markers.Add(maker);

(5)最后一步

        图层是先创建后更改的,所以有的时候会显示不是很及时,这个时候就要在所有操作都完成之后,再加上一句:

gMapControl1.Update();

        这样就大功告成了,一个简单的地图就绘制完毕了。

三、关于Gmap

        Gmap的用途有很多,像可以自己制作一个导航软件,只要在路径编辑时加上一些规划算法就可以完成目标。当然也可以用于自动驾驶方面,采用某种GPS设备实时获取当前位置信息,并且发送给Gmap控件,使其可以实时地显示所走过的路径。再高深一点还可以给定两个确定的经纬度位置信息,然后通过一些算法,控制设备按照我所设置的路径一步步走下去,达到自动驾驶的目的。当然Gmap还有很多可以使用的场景,这就要靠正在看这篇文章的你去挖掘咯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麻麻不让我和傻子玩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值