自从上次发表“导航电子地图的组成和制作流程”后,被骂的喷头,说文中有很多的错误言论,但我并没有认为有太多的错误(当然关于微软使用四维地图这一错误点还真的是一大疏忽,但这不是重要的,说不定Google哪一天也使用四维了)。我是听了四维公司产品经理的演讲后写的该文,其中许多的总结性的内容个人认为很对,我也该文也是基于对他PPT的理解,当然也有可能我的理解有误,毕竟我并没有在数据公司供职过。不过没有什么关系,错误还希望大家继续指正,我们今天继续谈“如何制作一份导航电子地图”,也算是我接触过三四家数据公司的数据后做的一些简单思考吧,当然,今天甚至会讲到数据中的字段,我要说的是一份最简单最基本的导航电子地图,如果说你写code的能力够好,也许能够根据我所提供的思路制作出一个导航软件,对此我深信不疑(世界第一的导航软件公司制作导航电子地图也用了如此简单的基本需求)。

言归正传,在讲本文之前还是建议看一下我被批的那个文章,该文中指出,导航电子地图从形式上看由“道路、背景、注记、POI”组成,而功能上看需要有“定位显示、索引、路径计算、引导”,形式上再简单一些来说,就是点、线、面,如何使用“点、线、面”拥有“索引”和“路径计算”的功能?这就是导航电子地图要做的主要功能,至于显示本身就有矢量的数据,绘图引擎根据矢量的数据绘制出图形即可,而引导部分是导航软件的后续功能(和数据层有关系但需要考虑的不仅仅在于此)。虽然说很多的人都会做电子地图,但不见得会做导航电子地图,路径计算功能应该是导航电子地图与普通的电子地图最大的差别了。

OK,如果说今天一定要将导航电子地图限定一个格式的话,那么我们今天用MIF格式来讲好了,当然SHP也是一样的,只是数据公司用的最多的还是Mapinfo软件,毕竟简单易上手。根据导航电子地图的四种形式,我们将地图数据化到最简,分别使用Road、Back、landmark、POI四个MIF文件来表示,其中对于landmark其实也可以归入到POI中,个人的理解为不作为索引的POI,仅仅作为显示用。

上面提到的四个文件都离不开基本的点、线、面,在制作导航电子地图之前我们先对点线面做一个简单的要求,点(POI和landmark)要求不能出现SHP中的多点情况(其实就是一个点的组合,Mapinfo中应该没有这个情况),线(主要是道路,也有部分背景数据)也同样不能出现组合,就是线从头到尾都不是断的,如果中途断掉然后再接到一个新的线并且算作一个线的话,这是不允许的。对于面(背景数据)来说,虽然没有严格的要求到不允许出现多part的情况,但多part还是不被推荐的,多part分为岛洞和飞地两种情况,飞地在Mapinfo中非常容易处理,打散就好,而岛洞是无法避免的,但可以通过切割将这个岛洞对象变成两个对象,这样就不出现岛洞的情况了,但制作上面还是相对有点麻烦的,所以面的制作看你自己的需求了,如果导航软件够强大的话,对岛洞和飞地的处理还是游刃有余的,这里个人建议不出现飞地情况,岛洞允许出现。

如果空手绘制一份地图,这个不是很现实,那么我们就假定已经获得了部分的卫星影像数据(主要是做背景用,现在的影响数据也算是比较容易获得了,比如Google earth),另外呢我们还使用GPS设备在外面采集了许多的航点和航迹(这也是上次说到的外业提供的最基础数据),将这些航点航迹转换导入Mapinfo,我们就可以理解为一份最简单的电子地图了,但离导航电子地图还相差甚远。这里顺便提一下我们使用的坐标系统WGS84,因为GPS下使用的都是WGS84吧,所以使用GPS记录的航点航迹等导入后正好符合要求。

先讲背景数据,背景数据最简单,不过内容也算比较丰富,最常见的背景数据有河流、绿地、铁路等,当然国界线、行政区划面等其实也都可以称之为背景数据,在数据制作过程中建立一个Kind字段来定义这些背景数据的形态,这样背景数据在同一个文件中就有所区分了,这也是必须的。除了道路和POI数据以外,其他数据都可以作为背景数据,比如你想做一个建筑物的轮廓形态数据。万变不离其宗,注意使用Kind进行区分就好,至于导航软件是否使用你这么多的背景要素就让他们自己考虑吧。

landmark数据和POI数据我刚刚说了简单的区分,但一般来说都不会太在意这区分,landmark作为POI用的也不少。landmark的作用从字面上就能理解,就是地标性的点位,一般是推荐显示在地图画面上,当然这一点取决于你landmark数据制作的好坏了,许多的landmark数据还是很不好用的。landmark的显示让你的地图看起来错落有致,比如Google map现在卫星影像图上面叠加的文字,我们就可以理解为landmark。landmark对于导航的作用来说,大概是非常容易让使用者知道自己的大概位置吧。什么样的数据可以制作成landmark?最多的是乡镇村庄,而在城市中来说呢,可以是一个街道、小区的名字,也可以地标的东方明珠塔等等,landmark的制作个人认为还没有具体的标准。

POI,这三个字母我就不解释了,但POI数据是非常关键的数据,你要去吃饭、去加油、去停车、去购物等等等,都是和POI有关。由于POI是Point数据,所以制作相对比较容易,就比如说GPS设备采集的航点就可以直接录入,或者根据影像数据自己标上去的点都可以。POI数据的属性相对来说需要丰富一些,因为不仅仅一个名称就够了,还有省份、城市、地址、电话等,甚至可以加入邮编、传真、网站等资料,当然如果再丰富就有些过头了。POI数据的分类也算是一个比较头痛的问题,刚刚说到的吃饭、加油、停车、购物等就是POI的细分,头痛的问题在于应该有多少分类?有些模棱两可的POI应该归为哪一类?这些不仅仅每个地图供应商分类方法各异,导航软件厂商也有非常大的差别。当然这些分类还是有分级的,比如吃饭可以称之为餐饮这一个大类,而餐饮下面分为中餐、快餐、西餐等,而在中餐下面则甚至可以再细分为川菜、粤菜、湘菜等。由于没有统一的分类标准,所以分类上我也没有一个好的标准提供,大家可以自己制定。

道路,这是最为关键的数据了,导航电子地图的核心是道路,道路关系到“路径计算”,而一个导航软件的成败在于路径计算,由此可见导航数据供应商是何其的重要,数据没有做好就可能导致整个导航软件混乱,致使导航软件都无法使用。既然道路是核心,那么复杂度也是可想而知。有很多的用户可能使用GPS记录下航迹后说,你看这就是我走过的路啊,你们地图中没有的路就可以这样加进去啦,话是没错,但至少还需要处理。导航电子地图中对于道路的要求非常高,就拿绘制来说,道路和道路之间不能交叉(对于上下穿越式的非交叉道路是可以两线交叉的),也就是说从一个路口到下一个路口就是一条线,这个路段就结束了,不能穿过这个路口将线继续画下去。这样做的用处在于什么呢?拐弯就可以进行了。这是导航电子地图和普通电子地图在制作上最大的差异(一般的电子地图都是一条路就是一条线,导航电子地图是一条路上的一个路段就是一条线),所以制作上也需要有所注意。

本文飞书文档:如何制作一份导航电子地图上