目录
一、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还有很多可以使用的场景,这就要靠正在看这篇文章的你去挖掘咯。