Google 地图为什么不采用矢量地图渲染的方式,而是下载栅格化图像然后渲染的方式?

时间:2021-10-09 04:51:58


首先,先定义一些概念和描述一些事实:

什么是栅格数据?
栅格数据是指以将二维平面以cell镶嵌形式进行分割的数据表达形式。

什么是矢量数据?
矢量数据是指以基本的体元(primitive)来描述形状、图像的数据表达形式。

Google地图产品线可以细分为以下三个方向:
1. Web地图
2. 移动设备地图
3. 地图API

Google地图展现的数据可以大致分为两类:底图数据(baselayer)和覆盖物数据(overlay)

关于底图数据: 
1. Google地图的Web的经典版本的底图数据是纯栅格的
2. Google地图的Web的WebGL 版本的底图数据是矢栅结合的
3. Google地图的移动设备版本:
      iOS 上的地图目前的底图数据仍然是基于栅格数据
      Android 上的谷歌地图从5.0 开始支持矢栅结合的底图数据

关于覆盖物数据:
1. 除了实时路况数据,google其他的覆盖物数据一直都是以矢量数据形式表达的

关于地图API:
1. 除了静态地图生成API,其他的地图API服务中涉及到的空间数据几乎都是以矢量数据形式表达的
------------------------------------------------------------------------------------
然后,我想说一下为什么google在各类数据上分别选择了不同的数据格式?

1. 为什么最初的底图使用的是栅格数据,更准确地说,基于金字塔结构的栅格数据?
说实话,tile真是一个伟大的东西,它直接秒杀了GIS界的那些学究们。当OGC委员会的大爷们还在为所谓的WMS服务如何才能够支持更多的空间语义而在推出一版又一版更加复杂的标准时,Google Maps证明了tile是一个非常简洁的方案来为公众提供基础地理信息服务。它的优点有:
1. 兼容性极强,对于浏览器而言,只需要能够显示图片、支持css、异步传输、DOM和javascript,它就能够显示Google Maps
2. 对于服务器的负载同样很低,由于地图都是预先渲染好的,用户的请求对服务器来讲只有IO代价,而几乎没有CPU代价,相比WMS那种需要实时切图,实时渲染的机制来讲,这种设计的负载真得低了太多了。记住:还有内存数据库可以减少磁盘IO,还有浏览器缓存可以减少图片的请求。

2. 为什么覆盖物图层使用的是矢量数据?
google提供的覆盖物图层几乎都是点图层和线图层,虽然理论上它支持多边形矢量数据的展现,但是在很长的一段时间里,其实多边形矢量数据都很少被应用(底图中的建筑轮廓最初是底图栅格数据的一部分). 

常见的点图层包括关键的POI点和泛需求检索产生的麻点图

//update:2012-06-19
感谢@Jack Jiang补充,修正一个错误,麻点图是在服务器端完成渲染,传回到客户端的是栅格数据+矢量数据,矢量数据不用于渲染,而是用于实现用户点选麻点时的交互。
//end of update

常见的线图层则是驾车路线和公交路线

以上数据的特点是什么?
1. 数据简单
2. 需要快速更新

做过地图渲染引擎的同学应该都了解,底图渲染是一个非常昂贵的操作,是需要计算很久滴。因此,一般底图的数据的更新频率不会特别高,几个月一次是常态(不是说渲染一次需要几个月)。而作为面向大众的互联网地图产品,POI信息,路线信息每天都可能发生改变,如果把这些数据放到底图里几个月不更新,恐怕用户要用口水吐死你的产品喽。 加之POI数据和路线数据格式简单,所以Google选择了传输矢量数据,在客户端对其进行渲染,使用VML或者SVG

3.  为什么说移动设备上使用的是矢栅结合的地图?
如果大家仔细分析过google地图的离线地图数据包的话,应该会发现,其实还是有一些小图片存在的,这些小图片几乎是纯色的,但是会包括一些主干道和国界的数据。
为什么不走得那么彻底,直接将所有的数据都用矢量形式表达呢? 我认为是工程上的折中,因为对于几乎纯色的图片,使用栅格的形式并不比矢量表达耗费的存储大,甚至更小(经过压缩之后)。 那么,假如说你的手机不是那么地强劲,以至于不能迅速地把所有矢量数据渲染好,至少你还能够看到一个半成品的底图。

那么,为什么还要把另外一些底图数据矢量化呢?
这个其他几位已经介绍地很多了,总结一下:
1. 减少数据流量,矢量表达在更多情况下更紧凑
2. 更加灵活,使用矢量数据客户端渲染地方式,软件可以有更灵活地策略控制图上所要显示的要素
3. 支持更快地数据更新,当数据以矢量形式表达后,数据的增删改都和栅格底图解耦了,于是,再也不用为修改一个重要地点信息而要重新渲染一大片的数据而忧愁了,数据运维就舒了长长的一口气。

最后,总结一下,正如google当年发GFS,big table和map reduce那三篇惊世论文时所说的,这些文章中所介绍的,都没有什么理论上的创新,只是在工程上的实践,无论是矢量的理论,还是栅格的理论,异或是矢栅一体化的理论,在学术界都已经孕育了很多年,Google的工程师,只是天才地把这些模型恰到好处地融合到了一起,使人们惊讶,原来地理信息竟然可以如此优雅简洁地形式展现给世人,并深刻地影响着我们的生活。向伟大的工程师们致敬!

注:
个人看法,欢迎讨论 

参考资料:
1.  googlesystem.blogspot.com/2010