2014年7月4日星期五

目前的离线地图确实不等于 0 流量


为何使用了离线地图还会消耗手机流量,有办法避免吗?

贺滨,蓄力的芦苇

做地图有段时间了,值得欣慰的是,终于有人意识到了「离线地图」文字上的猫腻了。

先直接解答题主的疑惑:

1、 即使下载了「离线地图」,大多数地图 APP 在正常使用过程中依然会消耗流量。

2、 完全不消耗流量的地图 APP(即「零流量地图」)是完全可以实现的。

要详细解释这个问题,需要搞清楚手机离线地图的发展的几个时代:

一、「先下再用」时代

早期的手机地图,必须先下载从几百 Mb 到几 G 容量不等的地图数据包,然后配合导航应用使用。用过塞班手机的同学应该还记得著名的 R66 导航吧?当时就是这么用的。

印象中,那时的地图,等同于 400 Mb 左右客户端 + 1Gb 以上地图包 + 零流量(GPS 定位时)。

二、「即需即下」时代

所谓「离线地图」,只相当于一张画满了建筑和道路的图层,由于平常人去的地方非常有限,没必要预置全世界的地图图层在手机中(会占据大量手机容量),因此部分地图 APP 采用了全在线地图的方式,「即需即下」,Goolge Map 就是如此。在网络通畅、流量便宜的地区,这种服务非常方便。

看了早期的 Google Map for Android,客户端 15 Mb,因为要下载图层,流量消耗没有上限,根据使用情况而定。

三、「离线地图」时代

由于每次都需要加载图层、流量消耗较大,工程师发现:与其每次下载图层文件,不如把一些常去地的图层做成大小能接受的数据包(即离线地图包),供用户在 WiFi 等流量不敏感的环境下下载,这样使用地图时,就不用消耗读取图层所需要的流量了。「提前预知所需,先下再用」,百度、高德地图都是这个思路。

在制作离线地图包的过程中,工程师花了不少心思在减少地图包的大小上,比如通过矢量绘制等方法。目前主流的地图 APP 已经把城市地图包压缩在几十 Mb 大小。

比如百度地图 for iOS,客户端 46 Mb,北京市 18.6 Mb 地图包,根据搜索、导航、定位的使用情况,耗费几百 KB 到数 Mb 不等的流量。

四、「零流量地图」时代

随着 LBS 服务的兴起、人们出行需求日益增多,用户又提出了新的问题:为何我下载了离线地图,定位、搜索地点、规划路线还需要联网?随着网络变化,地图部分服务的速度也会受到影响,这个有办法解决吗?

其实,地图定位分为 GPS 卫星定位和基站定位:在户外卫星信号较好时,采用 GPS 卫星定位,室内等卫星信号不好的地方,则通过手机接收到的基站或 WiFi 信号,采用了多源融合及指纹等方式进行定位。后者需要耗费少许流量。同时,搜索地点、规划路线因为涉及到云端算法,必须请求到云端才能返回相应结果,该步骤也需要联网、消耗流量。

为了尽可能节省流量,工程师们再次脑洞大开:手机地图的使用场景主要是在室外,如果只通过 GPS 定位,关掉基站定位,同时把搜索、路线规划等服务从云端搬到手机上,不就解决了流量耗费的问题了嘛(当然室内定位时需要借助 WiFi 或基站)?同时,由于运算都是在手机上进行,不需要去云端请求结果,等待时间也减少了很多。

事实上,这样做还得克服一堆困难——比如说,如何保证云端复杂的服务迁移到手机本机时,能够高效并且占用更少的资源?

工程师们再一次给出了解决办法:在选择合适的数据结构和算法后,采用漏洞模型只加载必要的数据,同时合理设计缓存、提升运行速度,并且提前做大量离线计算、存储中间结果。这也是为何部分地图存在「离线导航包」的原因。

在这个过程中,「提前做离线计算、存储中间结果」是非常有必要的:在离线公交路线的计算过程中,很多中间计算信息是固定不变、可以提前算好的,因此可以存储成中间数据。为了不让中间数据过大导致离线地图包太大,对这些数据做合理压缩,便可大大提升运行效率。比如目前,全北京公交离线数据,也只要 8MB。

五、可预期的未来

技术永无止境,手机离线地图的发展,也许还有几个值得期待的方向:

1、 地图包增量更新:城市发展日新月异,地图底图的更新也愈发频繁,但是总不能每次都下载完整的地图包吧?通过增量更新,可以让用户只更新增加的数据部分,可以想见,未来不用在 WiFi 网络下,都可以通过极少的流量获得最新的地图数据。

2、 离线街景地图:相比虚拟图层,人们可能更倾向于在街景照片中查看路口、参照建筑物,随着图片数据压缩技术、手机硬件技术的提升,未来可能在离线数据包中,就能看到关键路径上的街景参照物。

一家之言,希望能抛砖引玉。

利益相关:本人腾讯员工。



华海。華海。

没有评论:

发表评论