本人整理了谷歌地图离线发布这个系列,很多内容来源于网络,参考了若干牛人的资料,膜拜下!!!
数学之美~Google中国地图经纬度偏移
以前一直以为Google手机地图是在客户端程序内置有矫偏算法的,看了dongmeng110的blog 才知道Google地图偏移其实是有接口可以取到的:
http://ditu.google.cn/maps/vp?spn=0.0,0.0&z=18&vp=39.111195,117.148067
给定经纬度坐标,返回地图tile的偏移像素值。没想到居然就是直接从服务器取,这样所有的偏移量其实都是公开的了。
接下来,我对偏移数据做了一些分析。纵坐标是18级地图的偏移量。
首先是较小尺度,在经纬度1度的范围内每0.01度取得一个偏移值。
图一:纬度不变,经度1度变化范围内,偏移量的变化(横坐标数字为经度0.01度)
图二,与图一相同的数据,可以看出偏移在平面上的变化
图三,经度不变,纬度1度变化范围内,偏移量的变化(横坐标数字为纬度0.01度)。可见偏移量变化不如经度变化时大。
图四,与图三相同的数据,可以看出偏移在平面上的变化
图五,经度纬度均1度范围内,偏移在平面上的变化。其实是图二与图四“相乘”的结果。
接下来从大尺度上看看。
图六,北纬40度的纬线上偏移值变化图,横坐标为经度。看得出以经度1度为周期呈现出一定的规律性,在y向偏移量上特别明显。
图七,东经116度的经线上偏移值变化图,横坐标为纬度。这个就没有奇怪的小波动了,而且x向偏移似乎可以非常理想的用二次曲线来拟合。
图八,刚才在图六中发现纬线上的偏移值呈现出规律性,这里放大来看看。很明显是一1度为周期的。
已经发现在纬线上的偏移值呈现出明显的规律性,这个规律不难拟合出来。利用拟合出来的函数将这个高频扰动抵消之后,得到了这样的曲线:
看起来相当完美。那在看看将它应用到大尺度上效果如何:
有微小的抖动,看来参数细节还需要微调一下,不过要求不高的话其实已经可以接受了。
接下来,在这张图上又发现了规律…… 嗯,我不能继续写下去了,嘿嘿。
其实对于离线应用,进一步的分析不做也没有关系了,并不需要将整个函数拟合出来,剩余的工作可以通过查表法来做,然后插值再加回高频扰动。因为知道了高频扰动的函数后,就能够用较低的采样频率来记录偏移量,即使将整个表放内存里,占用的空间大小也可以接受。
看了最后的曲线,熟悉高等数学的,应该可以用傅立叶变换做出这个函数。呵呵,理论上Fourier transform可以拟合出任何的曲线函数。