调地图页面,把 GPS 模块读到的 30.2741, 120.1551 直接标到高德地图上,标记落在一条巷子里,实际位置在几百米外的另一条街。坐标没写错,是坐标系不一样。

高德经纬度查询看着简单,坑主要在坐标来源。国内地图用 GCJ-02,GPS 设备输出的是 WGS-84,两套坐标之间有偏移,城市里一般差几百米。

三种常用的取点方式

  • 高德开放平台的坐标拾取器,地图上点一下,页面直接给出经纬度,适合少量取点。
  • 地图 JS API 绑定 click 事件,回调里拿 e.lnglat,适合做选点功能。
  • 手机端在高德地图里长按地点,看详情里的坐标,适合临时查一个位置。

拿到的是经纬度对,顺序别反。高德接口里的 location 参数就是经度在前,写成 120.15,30.27 才对,反过来点会跑到几千公里外。

批量地址转坐标

几十个地址用手点太慢,用地理编码接口:地址换成经纬度叫正地理编码,经纬度换地址叫逆地理编码。调用时注意并发和配额,免费额度按天算,超了会返回错误码。

批量结果要抽查。门牌号不规范的地址,接口可能只匹配到街道中心点,误差几十米到几百米。重要点位最好人工复核一遍。

精度看小数点后几位

小数点后 6 位大约精确到 0.1 米,5 位约 1 米,4 位约 10 米。存数据库用 decimal 类型或 double 都行,别用 float 再四舍五入到 2 位,那精度只剩公里级。

从百度地图拿到的坐标是 BD-09,直接塞给高德会偏;两家的接口一般都有坐标转换参数,转换后再用。转换本身有误差,别来回转多次。

网页上取点和接口取点的区别

坐标拾取器给的是人工点的位置,适合做数据校对;接口返回的是算出来的位置,适合批量。两者对同一个地址可能差几十米,对账时以实际踏勘为准。

用高德经纬度查询做门店定位时,最好把坐标和地址一起存。只存坐标,地图改版或道路施工后对不上;只存地址,每次都要重新编码,接口一限流页面就空。

结论:取点用高德自己的工具,存库统一 GCJ-02,外部坐标先转再入,偏移问题基本就没了。