piapia123
zh

经纬度坐标转换(WGS84 / GCJ-02 / BD-09)

转换

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

同一栋楼在三套坐标系里是三个不同的数字,彼此差出几百米:WGS84 是 GPS 采到的原始坐标,GCJ-02 是国测局加密坐标(高德、腾讯、Google 中国区用它),BD-09 是百度在 GCJ-02 上又加的一层。把 GPS 坐标直接标到高德地图上会偏到马路对面,反过来也一样 —— 这不是精度问题,是三套人为定义的偏移。工具一次给出三套坐标,并算出与输入的直线距离(米),你会直观看到自己之前偏了多少。还有两件事写在这里:偏移只在中国境内施加,境外的点三套坐标完全相同(这是 GCJ-02 算法本身的规定,不是没算);顺序是一个显式选项,因为 Google 地图给的是「纬度,经度」而高德与百度的拾取工具给的是「经度,纬度」,猜错顺序会让结果偏到几百公里外。

功能

  • 一次给出 WGS84、GCJ-02、BD-09 三套坐标,任意一套都能作为输入
  • 算出与输入的直线距离(米),一眼看出偏移有多大
  • GCJ-02 → WGS84 用迭代反解,精度到 1e-9 度(约 0.1 毫米)
  • 境外的点会明确说明「三套坐标本就相同」,而不是让你以为工具没生效
  • 输入顺序可选「纬度,经度」或「经度,纬度」,顺序写反时直接指出是顺序问题
  • 逗号、空格、分号都能分;全角逗号与全角空格会自动归一半角
  • ⚠️ 度分秒可以直接粘进来:`39°54′31.4″N 116°23′51.0″E`、`39d54m31.4sN`、`N39°54′31.4″`,以及十进制后缀半球字母(`39.908722N`)都认。分或秒 ≥ 60 会直接报错,而不是算出一个看着合理的坐标
  • 同时给出度分秒写法(39°54′31.40″N 116°23′51.00″E),三套坐标系各一行
  • 给出 Open Location Code(Plus Code 完整码),一种给人念、不依赖门牌号的地址写法
  • 输入两行坐标即得两点之间的大圆距离与初始方位角(北京—上海 1068.3 km),距离同时给出公里、法定英里与海里
  • ⚠️ 距离按球面公式算,结果里写明它与椭球测地线差千分之几 —— 长距离下是几公里
  • 给出可直接打开的地图链接:OpenStreetMap、Google 地图、高德、百度、Bing 五家
  • ⚠️ 每条链接用它自己那套坐标:OSM / Google / Bing 用 WGS84、高德用 GCJ-02、百度用 BD-09 —— 拿 WGS84 去拼百度链接会偏出几百米
  • ⚠️ 每条链接标出坐标系与参数顺序:高德是「经度, 纬度」,与其余几家相反(写反会偏到另一个洲)
  • 缩放在「世界 / 国家 / 城市 / 街区 / 建筑」五档里选,写进 OSM 与 Bing 的链接
  • 小数位数可调,默认 6 位(约 0.1 米),与各家拾取工具一致
  • 结果逐行可复制,且「(输入)」这类旁注不会混进复制文本
  • 全部在浏览器本地完成,坐标不外传

使用方法

  1. 选输入的是哪套坐标系
  2. 按你手上数据的顺序选「纬度,经度」或「经度,纬度」
  3. 把坐标粘进输入框
  4. 三套坐标实时出现,点任意一行右边的按钮单独复制

常见问题

Plus Code 是什么?和经纬度有什么区别?
Open Location Code(Google 推的开放位置编码)把一块地方编成几个字母数字,天安门是 `8PFRW95W+FX`。它与经纬度的用途不同:经纬度是给机器算的,Plus Code 是给人念的 —— 很多地方没有门牌号,也没有正规地址,念一串坐标对方多半抄错,念 `8PFRW95W+FX` 就短得多。⚠️ 两点要知道:它代表一块地而不是一个点(10 位的码约 14 米见方,那块地里任意位置编出来都是同一个码);短码(省略前几位的那种)必须配一个参考位置才能还原,而各家地图挑的参考点还不一样 —— 所以这里只给完整码,不猜参考点。
两点的距离为什么和地图软件差几公里?
因为这里按球面公式算(把地球当成半径 6371.0088 km 的球),而地图软件走的是 WGS84 椭球上的测地线。地球是扁的,中长距离上这个差别是千分之几 —— 北京到上海约 1068 km,会差出几公里。日常问「大概多远」够用;要精确到米的测量结果请用 GIS 软件。方位角同理,而且它只描述出发点的朝向:沿大圆走的时候方位角是一路在变的。
度分秒是怎么算的?会不会出现 60 秒?
十进制度的小数部分乘 60 得分,剩下的再乘 60 得秒,秒四舍五入到两位小数(约 3 毫米,任何测绘表单都够用)。四舍五入带来一个必须处理的边界:`39.9999999` 的秒会舍入成 `60.00`,直接写出来就是 39°59′60.00″ —— 一个不存在的写法。所以秒进位到 60 时会往分上进位,分到 60 再往度上进位,结果是 40°00′00.00″。这条有专门的测试扫过一整段边界值。
为什么境外的坐标三套输出完全一样?
因为 GCJ-02 的偏移只在中国境内施加 —— 这是算法本身的规定,不是这里漏算了。落在境外的点时,WGS84 与 GCJ-02 定义上就是同一个值。BD-09 不一样:百度那一层偏移在全球都加,所以境外的 BD-09 仍然与另外两套不同。结果里会有一行说明把这件事讲清楚。
这三套坐标系到底是什么关系?
WGS84 是国际标准,也是 GPS 芯片直接吐出来的值。GCJ-02 是国测局在 WGS84 上施加的一次非线性偏移,中国大陆的地图服务(高德、腾讯、Google 中国区)用它,目的是让公开地图坐标与真实坐标不一致。BD-09 是百度在 GCJ-02 之上再加的一次偏移,所以百度与其他两套都要转两次。港澳台与部分边境地带的情况各家处理不一致,这个工具按通用的矩形范围判断。
为什么输入顺序要单独选?
因为 Google 地图的「复制坐标」给的是「纬度,经度」,而高德与百度的坐标拾取工具给的是「经度,纬度」—— 两个数字都是十位左右的小数,肉眼分不出哪个是哪个。猜错的后果不是偏几百米,而是偏几百公里(纬度 39.9 被当成经度,位置直接跑到中亚)。所以这里不做猜测:顺序是选项,而且当纬度超出 ±90 时,提示会直接说「十有八九是顺序颠倒了」,而不是只报一句范围错误。
地图链接为什么点了会偏?为什么每条用的坐标不一样?
因为它们本来就用不同的坐标系:OpenStreetMap、Google、Bing 用 WGS84,高德用 GCJ-02,百度用 BD-09 —— 同一栋楼在这三套里是三个数字,彼此差几百米。所以工具给每条链接都先换算成它自己那套坐标再拼 URL,而不是拿一份坐标到处拼(后者是这类工具最常见的错,而且打开后看着就是「地图定位错了」)。⚠️ 参数顺序也每家不同:高德是 `position=经度,纬度`(经度在前),其余几家是纬度在前 —— 写反不是偏几百米,而是偏到另一个洲。每条链接左侧都标明了它用的是哪套坐标系、哪个顺序。
转换的精度是多少?
GCJ-02 与 WGS84 之间的正反变换,正向是解析式、反向迭代到 1e-9 度(约 0.1 毫米)以内。BD-09 那一对是近似逆:反解式里用转换后的值代替原值去算两个微小扰动,往返残差在 1e-7 度量级(约 4 厘米)—— 对任何实际用途都够,但它确实不是精确逆,所以工具的精度声明按这个来写。另外,各家的实际偏移在边界地带略有出入,米级误差属于这个领域的常态。
坐标会被上传吗?
不会。三套坐标的换算全在浏览器内存里完成,页面不发送任何请求,断网也能用 —— 坐标常常对应具体的住址与作业地点,它们不会离开这台设备。

相关工具