高德、百度、GPS 分别用什么坐标系
GCJ-02 / BD-09 / WGS-84 高德、腾讯地图和微信小程序 gcj02 用 GCJ-02;百度地图用 BD-09(在 GCJ-02 上再加一层偏移);GPS、iOS 原生定位和 OpenStreetMap 用 WGS-84。三家国内地图的官方 API 都不提供转回 WGS-84 的接口。
经纬度转换在线免费:十进制、度分秒(含「北纬39度54分33.2秒」写法)粘贴即识别,经度在前的高德/百度格式自动判断;一次给出 GPS/WGS84、高德 GCJ-02、百度 BD-09 及 Web 墨卡托、UTM、CGCS2000 高斯投影。反算迭代到毫米以下,可批量导出 CSV,本地计算不上传。
每行一个点,先 X(北向)后 Y(东向),与国内测量成果表的顺序一致。
| WGS-84 / CGCS2000 GPS、iOS 原生定位、OpenStreetMap、天地图 | 39.909230, 116.397428 39°54′33.23″N 116°23′50.74″E 39°54.5538′N 116°23.8457′E | |
|---|---|---|
| GCJ-02(火星坐标) 高德地图、腾讯地图、微信 wx.getLocation gcj02 | 39.910634, 116.403672 | |
| BD-09(百度坐标) 百度地图(bd09ll) | 39.916973, 116.410044 | |
| Web 墨卡托(EPSG:3857) x, y,单位米——网页地图瓦片 | 12957302.415, 4852760.584 | |
| UTM(WGS-84) 带号+半球、东向、北向,单位米 | 50N 448496.425 4417856.475 | |
| CGCS2000 3° 带高斯投影 X(北向)、Y(东向,含带号) | X=4419624.325 Y=39448475.815 | |
| CGCS2000 6° 带高斯投影 X(北向)、Y(东向,含带号) | X=4419624.325 Y=20448475.815 |
GCJ-02 把这个点从 WGS-84 位置移动了 555 m。
此点在主流开源库用来近似「中国」的经纬度矩形内——该矩形也覆盖朝鲜半岛、日本部分地区、蒙古和越南等地,那里的坐标本不应加偏移。
每个链接都带入已换算成该地图坐标系的坐标,点位不会偏。
| 行 | 输入 | 输出 |
|---|
由构建地理与编码类工具的开发者撰写并审核。本页引用的每个坐标、距离和误差数字都由工具引擎实算或来自下述实测,并由测试核对。
GCJ-02 / BD-09 / WGS-84 高德、腾讯地图和微信小程序 gcj02 用 GCJ-02;百度地图用 BD-09(在 GCJ-02 上再加一层偏移);GPS、iOS 原生定位和 OpenStreetMap 用 WGS-84。三家国内地图的官方 API 都不提供转回 WGS-84 的接口。
约 17.6–715 m 偏移随位置变化,不是常数:按中国范围 0.05° 网格实测为 17.6–715 m,中位约 430 m。天安门一带约 555 m,广州约 621 m,乌鲁木齐约 265 m。BD-09 在 GCJ-02 之上再偏约 0.76–0.98 km。
度 + 分/60 + 秒/3600 十进制度 = 度 + 分 ÷ 60 + 秒 ÷ 3600。例如 39°54′33.2″ = 39 + 54/60 + 33.2/3600 = 39.909222°。南纬、西经取负值。
经度在前(lng,lat) 高德和百度的 API 都是经度在前,如 116.403672,39.910634;Google 地图、EPSG:4326 的官方轴序是纬度在前。顺序写反是最常见的坐标错误,本工具会自动识别并写出判定依据。
可视为相同(亚米级差异) 两者椭球只差扁率,半短轴相差约 0.1 mm,日常开发可视为同一坐标;但参考历元不同,受板块运动影响现今实际差异可达亚米级,测绘成果请用主管部门发布的转换参数。
下面六个公式与本工具引擎的实现一致,示例数值均由引擎实算。第 5、6 个公式就是 GCJ-02 的完整正算:先用两个多项式求出偏移,再按该纬度的弧长换算成度,系数与 gcoord、coordtransform 一致。
DD = D + M/60 + S/3600
S/W: DD = -(D + M/60 + S/3600)
39°54′33.2″N →
= 39.9092222°
T = round(|DD| × 3600 × 10^k); D = ⌊T / (3600·10^k)⌋
M = ⌊(T − D·3600·10^k) / (60·10^k)⌋; S = remainder / 10^k
116.397428°, k = 2 →
= 116°23′50.74″
z = √(x² + y²) + 0.00002·sin(y·π·3000/180); θ = atan2(y, x) + 0.000003·cos(x·π·3000/180)
lng_bd = z·cos θ + 0.0065; lat_bd = z·sin θ + 0.006
GCJ-02 (116.403672, 39.910634) →
= BD-09 (116.410044, 39.916973)
x = R·λ; y = R·ln(tan(π/4 + φ/2)), R = 6378137
|φ| ≤ 85.0511287798066°
(116.397428°, 39.90923°) →
= (12957302.415, 4852760.584)
T_lat = −100 + 2x + 3y + 0.2y² + 0.1xy + 0.2√|x| + ⅔(20·sin 6πx + 20·sin 2πx) + ⅔(20·sin πy + 40·sin(πy/3)) + ⅔(160·sin(πy/12) + 320·sin(πy/30))
T_lng = 300 + x + 2y + 0.1x² + 0.1xy + 0.1√|x| + ⅔(20·sin 6πx + 20·sin 2πx) + ⅔(20·sin πx + 40·sin(πx/3)) + ⅔(150·sin(πx/12) + 300·sin(πx/30))
(116.397428, 39.90923) → x = 11.397428, y = 4.90923 →
= T_lat = 155.8381, T_lng = 533.8815
Δφ = T_lat·180 / (a(1 − e²)/W³·π); Δλ = T_lng·180 / (a/W·cos φ·π)
a = 6378245, e² = 0.00669342162296594323, W = √(1 − e²·sin²φ)
WGS-84 (116.397428, 39.90923) →
= GCJ-02 (116.403672, 39.910634)
WGS-84 是 GPS 使用的全球大地坐标系,iOS 原生定位(Core Location 文档写明为 WGS 84)、GPS 接收机、OpenStreetMap 给出的经纬度都属于它。中国的 CGCS2000(2000 国家大地坐标系) 与它椭球参数几乎相同,日常开发可视为一致。
GCJ-02 俗称「火星坐标」,是国内地图服务使用的坐标系:高德开放平台、腾讯位置服务都在官方文档里写明使用国测局规定的 GCJ-02。它在 WGS-84 上叠加了一个随位置变化的非线性偏移,在中国范围实测为 17.6–715 m。所以把 GPS 坐标直接画到高德地图上,点会偏出几百米。
BD-09 是百度地图在 GCJ-02 之上再做一次偏移得到的坐标系(百度文档:「在GCJ02坐标系基础上再次加密」),分经纬度 bd09ll 与米制 bd09mc 两种;本工具处理 bd09ll。注意 bd09mc(百度墨卡托)不是 Web 墨卡托 EPSG:3857,同一点北向相差 17–30 km。
本工具使用公开的开源算法做换算,GCJ-02 / BD-09 的正算结果与 gcoord、coordtransform 等主流开源库一致;反算用迭代法,往返残差在毫米以下。这些公式来自逆向实现,与官方算法的一致性没有公开基准,因此结果适合开发和数据处理,不可作为测绘成果。
WGS-84 39.909230, 116.397428 (GPS / iOS / OSM) GCJ-02 39.910634, 116.403672 (AMap / Tencent) +555 m BD-09 39.916973, 116.410044 (Baidu) +1378 m AMap / Baidu API order: lng,lat → 116.403672,39.910634
十进制、度分秒、度分、d m s 字母、中文「北纬39度54分33.2秒」、半球字母前后缀、Google 地图 @lat,lng 链接都能直接读,不用先手工整理格式。
高德/百度的 lng,lat 与 Google 的 lat,lng 自动区分,并把判定依据写在输入框下方;新疆、西藏这类两个数都小于 90 的坐标,在 GCJ-02/BD-09 输入下按中国范围推断为经度在前。
同一个点同时给出 WGS-84、GCJ-02、BD-09、Web 墨卡托、UTM、CGCS2000 3° 带和 6° 带高斯投影,每行一键复制,不用来回切换转换方向。
GCJ-02→WGS-84 和 BD-09→GCJ-02 用不动点迭代而不是常见的一步近似。一步近似在北京约差 0.36 m、上海约 2.07 m,覆盖中国的经纬度网格上最大约 4.9 m;迭代 3–5 次后往返残差降到 1 mm 以下,由单元测试断言。
按 CGCS2000 椭球计算 3° 带(中央经线 3n)与 6° 带(中央经线 6n−3),X 为北向、Y 为东向并带带号前缀;输入带前缀的 Y 时自动识别带号。与 PROJ 对照的误差在 1 mm 以内。
一次粘贴多达 5,000 行,逐行给出结果或错误原因;选目标坐标系与角度格式后复制或下载 CSV(UTF-8 带 BOM,Excel 直接打开)。全部在浏览器本地完成。
支持 WGS84/GCJ02/BD09/BD09MC/EPSG:3857。GCJ-02 反算的停止条件是残差 < 1e-6°,实测最大误差 0.147 m;BD-09 反算只做一步。本工具的正算与它一致,反算更精确。
最常被复制的实现。gcj02towgs84 是一步近似,上海一带误差约 2.07 m,网格上最大约 4.9 m;境外判断用的矩形(73.66–135.05E、3.86–53.55N)把漠河北端、黑瞎子岛东端这类中国边缘点也排除在外。
UTM、高斯投影、EPSG 坐标系的权威实现,本工具的投影结果以它为准(差在 1 mm 内)。但 PROJ 不含 GCJ-02 / BD-09,国内地图坐标仍需另外处理。
/v3/assistant/coordinate/convert 可把 GPS、百度等坐标转成高德坐标,但没有转回 GPS 的选项,且需要 Key、会把坐标发到服务器。
可在 GPS、高德/腾讯、bd09ll、bd09mc 之间单向转到百度坐标;文档写明「根据法律规定,不支持将任何类型的坐标转换为GPS坐标」。
度分秒与十进制互换可以用 =D+M/60+S/3600 完成,但 GCJ-02、BD-09 和高斯投影公式太长,手写容易出错,批量数据建议粘贴到本工具后导出 CSV。
输入坐标系: GCJ-02 116.403672,39.910634
WGS-84: 39.909230, 116.397428 BD-09: 39.916973, 116.410044
高德 API 返回的是经度在前,工具因 116 > 90 判定为「经度、纬度」。反算用迭代法;同一个点若用常见的一步近似会差 0.074 m;上海一带约 2.07 m,覆盖中国的经纬度网格上最大约 4.9 m(东北角)。
输入坐标系: WGS-84 39°54′33.2″N 116°23′50.7″E
WGS-84: 39.909222, 116.397417
39 + 54/60 + 33.2/3600 = 39.909222;116 + 23/60 + 50.7/3600 = 116.397417。「北纬39度54分33.2秒,东经116度23分50.7秒」这种中文写法结果相同。
输入坐标系: WGS-84 31.2304, 121.4737
3°: X=3457455.489 Y=40640412.315 6°: X=3457523.539 Y=21354575.479
上海 121.47°E 落在 3° 带第 40 带(中央经线 120°E)和 6° 带第 21 带(中央经线 123°E),中央经线不同,所以两种分带的 X、Y 都不一样。Y 的前两位就是带号。
39.90923, 116.397428 31.239692, 121.499755 22.543096, 114.057865
39.910634, 116.403672 31.237678, 121.504188 22.540379, 114.062979
粘贴多行后批量表自动出现,「转换为」选 GCJ-02 即得上面结果。若要填回高德 API,把「输出顺序」切成 lng, lat 再导出 CSV。
按坐标从哪儿来选:GPS 接收机、iOS 原生定位、OSM 是 WGS-84;高德、腾讯地图和微信小程序 type: 'gcj02' 是 GCJ-02;百度地图是 BD-09。平面坐标(Web 墨卡托米制、UTM、国家 2000 高斯投影)也可以直接作为输入。
十进制、度分秒、度分、带 N/S/E/W 或「北纬/东经」都能读;逗号、空格、分号分隔均可。高斯投影按测量习惯输入「X(北向) Y(东向)」,Y 带带号前缀(如 39448475.815)时自动识别带号。
输入框下方会写明「按纬度、经度读取」还是「按经度、纬度读取」以及依据(半球字母、数值超过 90、或中国范围推断)。两个数都小于 90 时无法唯一判定,此时默认纬度在前,必要时在「数值顺序」里改。
右侧每一行都有「复制」按钮,「输出顺序」可切成 lng, lat 以便直接填进高德/百度 API。多行输入会生成批量表,选目标坐标系与角度格式后复制或下载 CSV(带 BOM,Excel 直接打开不乱码)。
高德、百度 API 是经度在前,Google 地图和多数表格是纬度在前。把 lng,lat 当成 lat,lng 用,点会跑到几千公里外。
lat=116.403672, lng=39.910634
lat=39.910634, lng=116.403672
GPS 设备和 iOS 原生定位给的是 WGS-84,直接在高德上打点会偏几百米,在百度上偏得更多。先转成目标地图的坐标系再用。
AMap marker ← 39.909230, 116.397428 (WGS-84)
AMap marker ← 39.910634, 116.403672 (GCJ-02)
BD-09 在 GCJ-02 之上又偏了约 0.76–0.98 km。从百度拾取的坐标要选「BD-09」作为输入坐标系,不能当 GCJ-02 用。
GCJ-02 ← 39.916973, 116.410044 (from Baidu)
BD-09 → GCJ-02: 39.910634, 116.403672
EPSG:4326 是度,EPSG:3857 是米。把 116.39、39.90 直接当 3857 坐标,点会落在几内亚湾附近(0°N 0°E 旁边几百米)。
EPSG:3857 x=116.397428, y=39.90923
EPSG:3857 x=12957302.415, y=4852760.584
先拆度分秒再四舍五入秒,会得到 39°59′60.00″ 这种非法值。正确做法是先按最末显示位取整,再拆分。
39°59′60.00″
40°00′00.00″
不带带号前缀的 Y(如 448475.815)无法反推中央经线。要么输入带前缀的 Y,要么在「带号」里填写。
X=4419624.325 Y=448475.815 (zone ?)
X=4419624.325 Y=39448475.815 (3° zone 39)
wgs ≈ 2·gcj − f(gcj) 在覆盖中国的经纬度网格(73.5–135°E、18–53.5°N,35,321 点)上中位误差 0.42 m、最大约 4.9 m(位于东北角 131°E、53.25°N 附近)。本工具用不动点迭代 w ← g − Δ(w),步长小于 1e-10° 即停(最多 10 次),实测 3–5 次收敛,往返残差在 1 mm 以内。BD-09→GCJ-02 同样迭代。lng_gcj02、lat_wgs84 这类后缀,接口文档写明是 lng,lat 还是 lat,lng。绝大多数「点偏了」的线上问题都是坐标系或顺序没约定清楚。x_pi 写成了 π,与主流公式能差到 90 m——对比结果时请注意对方用的是哪个库。 wx.getLocation({ type: 'gcj02' }) 拿到 GCJ-02。 59′60″ 这种非法值。批量时把「角度格式」选为度分秒即可导出。 转换工具
在线免费进制转换工具,支持二进制、八进制、十进制、十六进制及 2-36 任意进制互转。无需注册,数据不离开浏览器,即时获取结果。
转换工具
在线原码/反码/补码计算器,一次算出原码、反码、补码与移码四种表示,支持 4/8/16/32/64 位。也可反过来粘贴 11111011 或 0xFB,看它按无符号、原码、反码、补码、移码分别读作多少。-128 在 8 位下没有原码和反码,本工具会明确标出并解释为什么。全程浏览器本地计算。
转换工具
在线 chmod 计算器:Linux 文件权限在八进制(755、644)与 rwx 符号之间双向转换,实时生成可复制的 chmod 命令,并自动提示 777 等高危权限。免费使用,全部在浏览器本地完成,数据不上传。
转换工具
在浏览器中将 HEX 转 RGB、HSL、OKLCH、OKLAB 与 CMYK,一键复制任意格式。免费、免注册,您的颜色永远不会离开本页。
转换工具
在浏览器中把 HEX 颜色转成 CMYK。基于 sRGB 的朴素近似,适合印前预览。免费、免注册,您的颜色始终保留在本地。
转换工具
在浏览器中把任意 HEX 颜色转成 HSL —— 3 位、6 位以及带 alpha 的 8 位全部支持。免费、即时、免注册,您的颜色永远不会离开本页。