ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

搞懂geo是什么坐标系,别再被高德地图忽悠了

搞懂geo是什么坐标系,别再被高德地图忽悠了

你是不是遇到过这种情况?自己明明定位在小区门口,导航却让你往反方向跑,或者朋友给你发个坐标,你点开发现他在太平洋中央?别慌,这大概率不是你手机坏了,也不是网不好,而是你掉进了“坐标系”的坑里。

很多人问我,为什么百度地图能导航,把数据导到谷歌地球就不准了?这里就要扯到那个让人头大的geo是什么坐标系问题了。其实没那么玄乎,就是地图商为了安全,或者是算法不同,大家用的“尺子”不一样。

先说咱们国内最常用的。高德、腾讯、甚至早期的百度,他们用的都不是原始的GPS数据。原始的GPS数据,也就是WGS-84坐标,是全球通用的,你在野外用户外手表测出来的就是这种。但是呢,根据国家规定,国内所有的互联网地图都不能直接公开WGS-84坐标,得加密。这个加密算法叫GCJ-02,也就是常说的“火星坐标系”。

所以,当你问geo是什么坐标系时,你得先看你用的是什么APP。如果你是在高德地图里拿到的数据,那基本就是GCJ-02。这个坐标系把真实的地球坐标,加了一点点私货,也就是非线性偏移。这个偏移量不是固定的,你在北京偏移一点,在深圳又偏移一点,而且越往偏远地区,偏移越乱。

那百度地图呢?百度比较特别,它自己在高德那个GCJ-02的基础上,又做了一次加密,搞出了BD-09坐标系。所以,百度的坐标和高德的坐标,就算都是在中国的同一个地方,数值也是不一样的。这就好比你用米尺量桌子,别人用尺子量,刻度还不一样,当然对不上号。

以前做地图开发的朋友都懂,最头疼的就是数据融合。比如你有个项目,需要从野外采集点位,然后发到手机端给用户看。如果你直接在野外用GPS拿到WGS-84数据,直接扔进高德APP里,那个点位可能就在你家隔壁的河里或者山上。因为高德不认WGS-84,它只认经过它加密体系处理过的GCJ-02。

这时候,很多小白就蒙了,到底geo是什么坐标系才最准?其实没有一个绝对“准”的,只有“兼容”。如果你是自己开发APP,一定要在后台做好转换。

我讲个真事。去年有个做物流的朋友找我,说他系统里的车辆位置老是漂移。他直接把GPS模块出来的数据传给前端页面展示。我一看,好家伙,全用的是WGS-84原生数据。但他前端用的是高德地图的SDK,高德SDK内部期待的是GCJ-02数据。结果就是车明明在大马路中间,图标却飘到了隔壁小区的花坛里,还是歪的。

这就是典型的坐标系没对齐。后来让我们帮忙写个转换脚本,把WGS-84转成GCJ-02,问题立马解决。

所以,如果你正在研究geo是什么坐标系,记住这三点。第一,搞清楚你的数据源是什么。是手机GPS原始数据,还是互联网地图APP导出的数据。第二,搞清楚你的接收端支持什么。高德系要GCJ-02,百度系要BD-09,开源地图如OpenStreetMap通常用WGS-84。第三,不要混用。拿着百度的坐标去高德地图里搜,肯定搜不准。

现在市面上有些工具号称能一键转换,其实大部分算法都是近似值,精度也就几十米。对于普通开车导航来说,偏差个一百米你可能没感觉,反正也不影响你找路。但如果你是做精确定位、无人机航拍或者测绘相关的,那这几米的误差都能让你崩溃。

如果你还在纠结具体的转换算法,或者想知道怎么批量处理那些乱飘的坐标数据,别自己瞎琢磨了,那里面公式多得很,稍微漏个常数就不对了。我是干这行挺久的,见过太多因为坐标系搞混导致项目延期的人。有具体技术细节拿不准的,可以直接留言或者私信我,咱们对着代码聊,比看那些干巴巴的技术文档管用多了。别让你的数据,死在坐标系不匹配的这个小细节上。

返回列表