平常我们使用导航有两种情景:一种是使用 PC 或者智能设备上的地图软件来导航;另一种是使用更专业的车载导航或者手持 GPS 。不管怎样,这两种导航方式都需要事先绘制好一张地图。那么问题来了:导航的地图究竟是怎么来的?
从地图的采集到最终应用在导航软件,整个过程将涉及到地图学、地理学、遥感技术以及计算机科学等跨学科知识。我们尽量用浅显的语言解释整个制图过程。不过在此之前,我们必须先了解两个概念。
GIS :Geographic Information System,即地理信息系统。通俗的说是将实际的地形、建筑等地理信息转换成数字模式,可以将这些数字化了的信息进行存储、分析、管理、计算等操作。
POI:Point of Interest,即兴趣点。一个 POI 可以是一栋房子、一个商铺、一个邮筒、一个公交站等。传统的地理信息采集方法需要地图测绘人员采用精密的测绘仪器去获取一个兴趣点的经纬度,然后再标记下来。
GIS 和 POI 是构成导航内地图不可或缺的两个信息,这些信息在地图上以不同图层显示出来。经过对图层的叠加,显示进行表达的过程。对地图应用目标不同,叠加图层也不同。比如你想查看卫星图,选择「卫星图层」就可以直接显示出来。
地图数据来源
早在春秋战国时期,地图就被当做一项极为重要战略物资。《管子•地图篇》说,凡主兵打仗,必须先看图,知地形,才不致失利。所以在战争前先一定要先派出很多间谍去绘制敌方地图,然后以绝密文件形式传送回来。这种人肉绘制地图的方法不仅耗时费力,对绘图者技术水平要求很高。只要出现一丁点差错,可能导致全军覆没。
于是,先人创造了许多制图的方法,最出名的有刘徽的《海岛算经》,裴秀的《制图六体》等著作。现代制图更多的是依靠卫星、航拍或者地图采集车。当然,在某些特殊的地方还是需要靠人背着设备去采集信息。
地图数据分为这几大类:
1. 底图数据:
底图就是地图中最基本的图形数据和一些相关附加信息。底图数据来源有三个:
官方地图: 地图厂商从政府测绘局购买其发布的权威地图。这种地图比我们日常街上买的地图更加精确丰富。
实地外采: 实地外采就是测绘人员利用专业仪器,在实地环境中测绘得到数据。这种实地外采精度高,置信度高,但是缺点是成本高,周期长。所以这种实地外采越来越少的被地图厂家采用。
航片卫片: 通过自己拍摄或者购买高精度航空照片或者卫星照片,作为底图数据。这种地图数据被绝大多数地图厂商采用。目前航拍或者卫星地图精度已经可以达到 0.05 米甚至更精确,这个精度已经足够所有地图生产商使用。
2.POI 数据:
上面已经解释了 POI 数据的概念,我们这里只讨论 POI 数据来源。
通过数据采集车采集:采集后数据通过手工标注。这种方式适合大规模采集标注,效率高成本低,尤其适合沿街的店面和场所的采集和标注,是目前数据采集供应商的主要采集手段之一。
通过专职或者兼职人员利用手机等智能设备进行采集:它是对上一种采集方式的补充,比较适合变动频繁的商户位置。
地址反向编译:这种方式通过门牌地址号码,运用算法进行定位标注。这种方法的好处是成本非常低,但是精度和准确度都不高。
从互联网或者企业获取:这些 POI 直接从专业网站抓取或者购买(比如大众点评,携程)。一些企业也可以利用这些地图开放的 API 服务为自己互联网产品服务。
POI 数据不需要很多资质限制,所以提供 POI 数据的服务生比底层数据供应商多很多。比如图吧就是主要的 POI 数据供应商,很多时候大家互相购买,补充自己的地图。
3. 其他数据:
其他常见数据图层包括交通状况图层、卫星图层、三维图层、街景图。交通状况图主要依赖于安装在出租车上的 GPS 采集实时数据,或者通过激光测速仪、摄像头、雷达测速等专业设备采集交通路况信息。三维图层主要依靠激光扫描和手工建模。街景则依赖实地拍摄。
数据处理
在我们获得这些数据后,需要对这些数据需要进行模型化处理。目前有两种建模方式:
矢量模型:
栅格模型:
我们目前在互联网公开服务中,或者绝大多数手机 App 里看到的,都是基于栅格(瓦片)模型的地图服务。其实对于某一块地方的描述,都是通过 10 多层甚至 20 多层不同分辨率的图片所组成,当用户进行缩放时,根据缩放的级数,选择不同分辨率的瓦片图拼接成一幅完整的地图(由于一般公开服务,瓦片图都是从服务器上下载的,当网速慢的时候,用户其实能够亲眼看到这种不同分辨率图片的切换和拼接的过程)
对于矢量模型的电子地图来说,所有的数据以矢量的方式存放管理,任何地图元素和数据都可以根据需要自由分类组成,或者划分成不同的图层。各种图层之间关系可以很复杂,例如可以将所有的道路数据做成一个图层,也可以将主干道做成一个图层,支路做成另外一个图层。图层中数据归类和组合比较自由。
而对于栅格模型(瓦片图)来看,图层的概念就很重要的,由于图层是生成制作出来,每个图层内包含的元素相对是固化的,因此要引入一个底图的概念。也就是说,这是一个包含了最基本,最常用的地图数据元素的图层,例如:道路,河流,桥梁,绿地,甚至有些底图会包含建筑物或者其他地物的轮廓。在底图的基础上,可以叠加各种我们需要的图层,以满足应用的需要,例如:道路堵车状况的图层,卫星图,POI 图层等等。
底图通常是通过选取必要地图矢量数据项,然后通过地图美工的工作,设定颜色,字体,显示方式,显示规则等等,然后渲染得到的(通常会渲染出一整套不同分辨率的瓦片地图)。
当然,即便在瓦片图的服务中,在瓦片底图之上,依然能够覆盖一些简单的矢量图层,例如道路走向(导航和线路规划必用),POI 点图层(找个饭馆加油站之类的)。只不过瓦片引擎无法对所有地图数据构建在同一个空间数据引擎之中,比较难以进行复杂的地图分析和地图处理。
那么既然瓦片图引擎有那么多的限制和缺陷,为什么不都直接使用矢量引擎呢?因为瓦片图引擎有着重大的优势:
1. 能够负载起大规模并发用户,矢量引擎要耗费大量的服务器运算资源(因为有完整的空间数据引擎),哪怕只是几十上百的并发用户,都需要极其夸张的服务器运算能力了。矢量引擎是无法满足公众互联网服务的要求的。
2. 由于地图美工介入的渲染工作,瓦片图可以做得非常好看漂亮和易读,比较适合普通用户的浏览。
后续工作
对地图数据进行加工后,整个地图制作就基本成型了。地图厂商需要将做好的地图进行实地测试,保证地图的完整性和可靠性。最后这些原始地图数据在相关部门做保密技术处理和审查。通过审查后,电子地图就可以公开的在网上发布或者销售。至此,整个地图制作过程基本结束。一般来说,地图厂家还会进行地图数据的更新,更新的频率每家各不相同。只有地图数据更新,才能保证用户在使用地图时候不会出错。
以上便是对整个地图制作过程做了一个简单的描述,希望大家能获得一些地图制作相关的知识。
特别感谢知乎用户@天光,本文部分文字和图片引自他 知乎上的回答 。