从一篇知乎问答引发的Web地图探索

话题切入

下午有点时间,在知乎上搜索了一下关于GIS的话题,在精华问答部分发现了一篇题为《Google地图原本为什么不采用矢量地图渲染,而是下载栅格化图像然后渲染?》的文章,通过看回帖得知大概是2012年的文章。虽然已过去几年,但这个问题在Web地图领域还是非常经典的。不过可能非GIS行业的人不理解标题是什么意思,简单说一下:其实标题严格来讲应该是“Google底图”而不是“Google地图”,地图包括底图还有其他图层及符号标记等。此文标题意思是Google地理底图为什么不在客户端(一般即浏览器)进行矢量绘制,而是在服务端生成各个缩放级别的地图切片之后,客户端通过AJAX技术请求地图图片,然后在客户端渲染展示。此文的几个回答基本上已经说明原因了,在此就不在赘述,具体可以查看原文。

关于Web地图矢量渲染应用的现状

大概有3年多没有碰GIS了,看到这个话题后,突然想看看现今的web地图使用的是客户端矢量渲染还是栅格地图。于是查看了以下几家地图在PC端的情况(移动端可能不同,只知道高德地图最新SDK是矢量数据了,注意这里并非指移动浏览器,而是指移动端native的矢量渲染):

  • Google地图
  • 百度地图
  • 高德地图
  • 腾讯地图
  • OpenStreetMap

在写此文时得出的结论是这样的(一定要注意今天的情况是这样的,并不代表永远这样,以后技术肯定会发生变化的)

底图使用了矢量渲染的有Google地图,高德地图。
底图使用了栅格地图的有百度地图、腾讯地图、OpenStreetMap。

由此看来,Google地图在2012年还没有使用客户端矢量渲染技术,现在则已经使用了。国内来看,高德地图算是走得比较靠前的。当年大家普遍使用基于金字塔结构的栅格数据的主要原因是浏览器矢量渲染能力的不足以及各浏览器的兼容性、差异性,为了获得一致的跨浏览器体验,因此多采用栅格地图技术。随着HTML5技术的成熟及浏览器对HTML5的支持越来越好,客户端矢量渲染性能已不是瓶颈,也因此越来越多的Web地图采用了浏览器端矢量渲染技术或者矢栅结合的方式。

矢量渲染对比栅格地图的好处,大概有以下几个方面:

  • 数据更新更快更及时——由于地理数据是海量级别的,制作地图切片可能要消耗几个小时、几天甚至更长,而客户端矢量渲染理论上则可以支持实时更新。
  • 释放客户端的缓存空间,节省流量——原来客户端需要缓存大量的地图切片,而矢量渲染则仅需要传输GeoJson字串,大大节省流量,这一点在移动端显得尤为重要。
  • 客户端支持矢量编辑——以往,在客户端仅为图片展示,编辑数据是不可能的。

当然不可否认,客户端矢量渲染会带来一些安全隐患,通过抓包可以轻易获取地图数据,这也是需要考虑的一个问题。

关于遥感影像的问题

首先所有的遥感影像数据则都是栅格技术,由服务端生成切片,客户端异步请求加载的。

通过测试上述几家的地图,发现国内的遥感数据都是做了后期处理的,一些重要地区的数据(如军事基地)在遥感影像上是找不到的,而Google的遥感影像里甚至可以清晰地看到军舰,想体验一下的就自己想办法访问Google吧!另外Google的遥感影像和地图叠加是有偏差的,这是由于Google地图在中国部分使用的是高德的数据(已经是国家规定的火星坐标系了,原因你懂的),百度地图和高德地图没有偏差是因为他们已经纠过偏了。

关于室内定位

打开高德地图开放平台时,发现了高德提供的室内定位技术方案,文档地址为http://lbs.amap.com/getting-started/indoorlocation/。

如今,室内地图及室内定位的需求越来越大,由于室内地图要求精度更高,也出现了一些专业制作室内地图的公司。室内定位技术目前主要基于WIFI和蓝牙,因此对室内硬件条件及移动设备版本要求比较高,如需要现场采集室内WIFI或iBeacon的信息,甚至如何现场铺设WIFI或iBeacon设备都有严格要求;对于移动手机,支持蓝牙的版本,系统版本都有要求。这样看来,室内定位的成本和复杂度还是比较高的,更多相关信息可以查看高德的室内定位方案。

其他

GIS Cloud上的几个浏览器端矢量渲染示例及效果图,效果非常棒

  • http://www.giscloud.com/map/16671/a-world-of-a-million-points
  • http://www.giscloud.com/map/12584/sarasota-parcels
  • http://www.giscloud.com/map/16594/germany-6000000-features

Leaflet

  • 一个开源的JavaScript地图库,支持绘制矢量图层
  • Github地址:https://github.com/Leaflet/Leaflet

GeoJson

  • 地图数据的json格式规范,如点、线、面如何用json来表示
  • 官网地址:http://geojson.org/

MapBox

  • An open source mapping platform for custom designed maps.
  • 官网地址:https://www.mapbox.com/

全球十大地图API

  • Google Maps API
  • Bing Maps API
  • OpenLayers API
  • Foursquare API
  • OpenStreetMap API
  • MapQuest API
  • MapBox API
  • CartoDB API
  • Esri ArcGIS API
  • Yahoo BOSS PlaceFinder API

你可能感兴趣的:(web地图,切片地图,矢量渲染,栅格地图)