地图坐标偏移
政府与人民为敌的典范
作者:@nixzhu
在中国大陆,将一个经纬度坐标正确地显示在地图上是一件很有挑战性的事情。已有很多开发者面临这样的问题,并想出了一些办法,但我还想再说一说。
首先,GPS 设备没有问题。也就是说,设备接收到的 GPS 信息没有被人干扰(也很难做到。当然可以修改接收设备,但这将固化偏移信息,很容易被“破解”(很讨厌在这里用这个词,它们不配))。以 iPhone 为例,用 CLLocationManager
获取到的经纬度没有问题(不考虑WiFi或蜂窝网络)。
那么,自然是地图有问题,目前中国大陆的地图提供商只有几家(高德、百度等),而且必须有牌照才能运营。也就是说,政府强制地图提供商“偏移”它们的地图数据,这样,当某个 iOS 开发者用 MKMapView
(目前 iOS 9 中使用高德的地图数据) 来显示一个正常的经纬度时,他将发现位置“偏移”了。而如果直接用 MKMapView
来定位用户位置,开发者却会发现位置是对的(除开可能的误差)。
需要说明的是,偏移量并不是固定的,更不是“全国”一样,它处处不同,而且还会更新。那为何 MKMapView
能得到“正确的”位置呢?事实上,MKMapView
在后面一样要获取硬件提供的 GPS 信息,不过它还会用私有方法根据当前经纬度去做一个网络请求,进而得到一个可“正确”显示在地图上的经纬度。但是,如果你把这个“正确的”经纬度拿到百度地图上去显示,有很大可能,它会是错的。
为什么呢?因为不同的地图提供商所用的偏移数据并不一样。
假如你的应用有用到第三方地图数据,为了把它们正确的显示在你目前所用的地图上,对不起,你得做转化。这是一种多么可悲的现实啊。
进一步,假如你想将某些经纬度存储在服务器上,你该以谁家的数据为标准呢?稍微有些理智的人都能想出,谁家的也不行,目前,还得以不会变的 GPS 来做标准。
被偏移的地图是可以杀人的。