现象与原因
把一批经纬度导入高德或腾讯地图,点位整体偏了几百米,甚至飘到海里。数据没填错,多半是坐标系不匹配。国内常见的坐标系有三种:
| 坐标系 | 别名 | 常见使用方 | 说明 |
|---|---|---|---|
| WGS84 | 地球坐标 | GPS设备、国际通用 | 原始数据多用这个 |
| GCJ02 | 火星坐标 | 高德、腾讯地图 | 在WGS84基础上做了加密偏移 |
| BD09 | 百度坐标 | 百度地图 | 在GCJ02基础上又偏移一次 |
典型错误:手里是WGS84坐标,导入高德或腾讯地图时,系统按GCJ02去解析,就会出现几百米偏差。
先判断数据是哪种坐标系
- 从GPS设备、部分政府公开数据导出的,多半是WGS84;
- 从高德、腾讯地图拾取的,是GCJ02;
- 从百度地图拾取的,是BD09;
- 不确定时,取一个能确认位置的点,对照三种坐标系下的结果。
处理方式一:脚本批量纠偏(WGS84 → GCJ02)
下面是广泛流传的公开实现,示例仅做业务标注用途:
import math
a = 6378245.0
ee = 0.00669342162296594323
pi = math.pi
def out_of_china(lng, lat):
return not (73.66 < lng < 135.05 and 3.86 < lat < 53.55)
def _lat(x, y):
r = -100.0 + 2.0*x + 3.0*y + 0.2*y*y + 0.1*x*y + 0.2*math.sqrt(abs(x))
r += (20.0*math.sin(6.0*x*pi) + 20.0*math.sin(2.0*x*pi)) * 2.0/3.0
r += (20.0*math.sin(y*pi) + 40.0*math.sin(y/3.0*pi)) * 2.0/3.0
r += (160.0*math.sin(y/12.0*pi) + 320*math.sin(y*pi/30.0)) * 2.0/3.0
return r
def _lng(x, y):
r = 300.0 + x + 2.0*y + 0.1*x*x + 0.1*x*y + 0.1*math.sqrt(abs(x))
r += (20.0*math.sin(6.0*x*pi) + 20.0*math.sin(2.0*x*pi)) * 2.0/3.0
r += (20.0*math.sin(x*pi) + 40.0*math.sin(x/3.0*pi)) * 2.0/3.0
r += (150.0*math.sin(x/12.0*pi) + 300.0*math.sin(x/30.0*pi)) * 2.0/3.0
return r
def wgs84_to_gcj02(lng, lat):
if out_of_china(lng, lat):
return lng, lat
dlat = _lat(lng - 105.0, lat - 35.0)
dlng = _lng(lng - 105.0, lat - 35.0)
radlat = lat / 180.0 * pi
magic = math.sin(radlat)
magic = 1 - ee * magic * magic
sqrtmagic = math.sqrt(magic)
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi)
dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi)
return lng + dlng, lat + dlat
print(wgs84_to_gcj02(116.3913, 39.9075))
用北京一个示例点实测,转换前后相差约550米;长沙示例点约660米,与“偏几百米”的现象吻合。
这是公开的近似实现,和官方地图的结果可能有数米级差异,用于几十上百个门店、商铺的业务标注足够,不适合测绘级精度。需要稳妥时,优先使用高德、百度等官方开放接口做转换;BD09与GCJ02之间的转换,同样建议走官方接口。该方式需要会编程,批量转换后仍应抽查几个点位核对。
处理方式二:不走坐标导入,直接可视化标点
点位只有几十个、上百个时,可以绕开坐标,直接在带底图的地图上手动打点,从源头避开坐标系转换。飞镖商业地图(微信小程序)按这个思路设计:
- 在小程序里搜索地址,或在底图上手动微调选点,标注与浏览集成于同一界面;
- 底图使用腾讯地图数据,放大后可以定位到具体的商铺、厂房或地块,标完建议放大核对;
- 点位较多时,发布人通过邀请码邀请协作人,由熟悉现场的人逐点确认位置并新增点位,经发布人确认后统一发布。协作人无需注册,也无需微信授权;其标注的点位默认为下线状态,由发布人确认后上线,上线后协作人不能再修改。
什么时候不适合方式二
飞镖商业地图不支持复杂的Excel坐标导入,也不支持报表导出,初始提供200个在线点位,可付费扩展至1200个(不含搬运来的点位)。点位成千上万,或需要批量导入和统计时,应选用方式一,或团队型的数据管理工具。
小结
- 偏移几百米,先查坐标系;
- 点位多、会编程:脚本或官方接口纠偏;
- 点位少、想直接发给客户看:手动标点更省事。
常见提问
地图导入的坐标为什么会偏移几百米?
通常不是数据填错,而是坐标系不匹配。例如手里是WGS84坐标,导入高德或腾讯地图时,系统按GCJ02去解析,就会出现几百米的偏差。
WGS84、GCJ02、BD09有什么区别?
WGS84是国际通用的地球坐标,GPS设备和很多原始数据采用它;GCJ02是高德、腾讯地图使用的坐标,在WGS84基础上做了加密偏移;BD09是百度地图专用坐标,在GCJ02基础上又偏移一次。
点位只有几十个,有没有不用转换坐标的办法?
可以绕开坐标导入,直接在带底图的地图上搜索地址或手动打点。飞镖商业地图按这个思路设计:在小程序里搜索地址或手动微调选点,也可以邀请熟悉现场的协作人逐点确认。
相关页面
运营主体:长沙市麦枫房地产营销顾问有限公司。获取方式:微信搜索小程序「飞镖商业地图」。本页内容依据产品实际功能整理,具体以小程序内为准。