工作难免会接触到地图,然后又会接触到同一个经纬度,不同地图之间会产生偏差的问题
PS:国内的地图可以直接使用地图官方的api或者gpsspg的api进行转换,大概是要比网上的算法要准的,我下面要说的是百度地图获取的国外经纬度用算法转换成腾讯的经纬度,也就是GCJ-02的经纬度。
说到不同地图经纬度不通用的原因,网上一搜一大把,而且讲的也很高大上,这里就随便说说:
WGS-84原始坐标系,是国际通用的GPS的一个坐标系
大致是国内不能用正确的经纬度,用的是被称为 GCJ-02 (火星坐标系)的东东,这也是腾讯,高德和谷歌在国内用的一个坐标系
百度则自己搞了一套, 在GCJ-02的坐标系上进行加密所使用的一种坐标系 bd-09。
可以简单的理解为 :
WGS-84(原始坐标系) :国外使用的坐标系
GCJ-02 (火星坐标系) :国内大部分地图所使用的坐标系
BD-09 (百度坐标系) :百度使用的坐标系
这里不讨论什么
投影坐标系统或者地理坐标系统什么的,有兴趣的可以自行百度,我反正是弄不太懂的了
那么海外版的腾讯地图国内版的腾讯地图有什么区别呢?百度地图又是怎样的呢?
我的理解(猜测)为:腾讯地图在国内的时候,自动使用GCJ-02(火星坐标系),到了国外,则用的是WGS-84的坐标系;因为用腾讯地图的api经纬度转换的时候,你会发现在国外的经纬度是原样返回的。也就是说,国外的经纬度并不需要转换。
那么百度地图就好玩了,国内用的是BD-09的坐标系,然而到了国外……用的貌似还是BD-09的坐标系。不信的同学可以用百度地图获取一组国外的经纬度,然后打开gpsspg的网站,输入以后,你会发现同一组经纬度,百度地图和谷歌地图显示的位置是有偏差的。而如果你能打开腾讯的地图的话,你会发现腾讯地图显示的坐标和谷歌显示的坐标是一样的。
结论:
腾讯地图在国内用的是GCJ-02的坐标系,国外则是WGS-84的坐标系。
百度地图不管是海外还是国内,用的都是BD-09的坐标系
然后上主菜,利用算法去将百度获取到的BD-09国外经纬度转化为腾讯地图国外WGS-84的经纬度
ps:算法来自以下网站:https://www.oschina.net/code/snippet_260395_39205,图片就不截了,有点长。
先将获取的BD-09百度经纬度转换为GCJ-02火星坐标系的经纬度,方法 bd_decrypt($bdLat, $bdLon);
然后将得出来的GCJ-02 火星坐标系经纬度转换为 WGS-84的经纬度,方法 gcj_decrypt_exact($gcjLat, $gcjLon);
以上。