坐标系转换接口说明:WGS84 / GCJ02 / BD09 互转、参数与调用示例

简介: 本教程讲解一套坐标系转换与地理编码接口的用法:支持 WGS84(GPS)、GCJ02(国测局加密坐标)、BD09(百度坐标)三种坐标系互转,并提供经纬度转地址(逆地理编码)与地址转经纬度(地理编码)两个方向。文章覆盖接入流程、参数与 from 取值对照、返回字段结构、多语言调用示例、在线调试实录、调用限制与计次规则、能力边界与免责、错误码排查表,并附工程最佳实践。

坐标系转换接口说明:WGS84 / GCJ02 / BD09 互转、参数与调用示例

1 技术简介

本接口提供坐标系经纬度转换与地理编码 / 逆地理编码两类能力,服务于地图、导航、定位、LBS 等场景中的坐标系统一与地址结构化。

  • 坐标系互转:支持 WGS84(GPS 原始坐标)、GCJ02(国测局加密坐标,国内主流地图采用)、BD09(百度坐标系)三者之间的相互换算;
  • 经纬度 → 地址(逆地理编码):输入坐标与坐标系类型,返回省 / 市 / 区 / 街道 / 门牌 / 商圈等结构化地址;
  • 地址 → 经纬度(地理编码):输入地址文本,返回 GCJ02 坐标与置信度。

适用于需要在多套地图坐标系之间做坐标对齐、对 GPS 轨迹做地址解析、或把文本地址转成可定位坐标的工程场景。

2 能力概览

能力 说明
坐标系互转 WGS84 ↔ GCJ02 ↔ BD09,覆盖主流国内地图坐标系
逆地理编码 经纬度 + 坐标系类型 → 结构化地址(省市区 / 街道 / 门牌 / 商圈)
地理编码 地址文本 → GCJ02 坐标 + 置信度
多语言接入 Java / C# / PHP / Python / Objective-C / curl 示例
在线调试 控制台可在线发起请求并查看返回

3 适用场景

  • 多源轨迹归一:GPS 设备(WGS84)采集的轨迹需与国内地图(GCJ02)或百度地图(BD09)叠加展示时,先做坐标系换算再渲染;
  • 地址解析:物流、O2O、外卖等场景将经纬度转成省市区 / 街道门牌,用于区域划分与展示;
  • 文本定位:把用户输入或历史数据里的文本地址转成坐标,写入地理数据库;
  • 地图开发:小程序 / App / Web 地图在切换底图(高德 / 百度 / 自研)时统一坐标基准。

4 接入流程

  1. 开通服务,获取 appcode(调用凭证);
  2. 明确业务要用的坐标系类型(from 参数取值见 §5 参数表);
  3. 按下方参数表与示例发起 GET 请求,Authorization 头携带 APPCODE <appcode>;
  4. 解析 JSON 返回,按 ret_code 判定成功 / 失败,再做坐标使用;
  5. 异常时按 §8 错误码排查表定位。
![接入流程示意图](https://res-showapi.oss-cn-hangzhou.aliyuncs.com/1day-delete/coordinat_convert_01.png)

5 调用示例与返回结构

本服务提供两个接口,均使用 appcode 鉴权:

接口 路径 方法 作用
经纬度转地址(逆地理编码) /location_address GET 坐标 + 坐标系类型 → 结构化地址
地址转经纬度(地理编码) /address_location GET 地址文本 → GCJ02 坐标 + 置信度

调用地址与鉴权信息以控制台开通页为准;本文示例统一用占位符 <调用地址> 与 YOUR_APPCODE。

5.1 经纬度转地址(/location_address)

请求参数(Query)

字段 类型 必填 说明
lng string Y 经度,示例 116.32298703399
lat string Y 纬度,示例 39.983424051248
from string Y 输入坐标的坐标系类型,取值见下

from 取值对照

取值 含义
1 GPS 设备获取的角度坐标(WGS84)
2 GPS 获取的米制坐标、搜狗地图所用坐标
3 高德 / 天地图等国内地图所用坐标(GCJ02)
4 第 3 类地图坐标对应的米制坐标
5 百度地图采用的经纬度坐标(BD09)
6 百度地图采用的米制坐标
7 其他地图坐标
8 其他坐标

返回字段

字段 说明
ret_code 0 为成功,其余为失败
location.lng / location.lat 经纬度坐标值
formatted_address 结构化地址信息
addressComponent 地址分层对象,见下
business 坐标所在商圈信息,如"人民大学,中关村,苏州街",最多返回 3 个

addressComponent 内字段:country(国家)、province(省)、city(城市)、district(区县)、town(乡镇,需设 extensions_town=true 才返回)、street(街道)、street_number(门牌号)、adcode(行政区划代码)、direction(与当前坐标点的方向)、distance(与当前坐标点距离,有门牌号时返回)、country_code / country_code_iso / country_code_iso2(国家编码及英文缩写)、city_level(城市所在级别,主要对国外地址有参考意义)。

返回示例(成功)

{
   
  "showapi_res_error": "",
  "showapi_fee_num": 0,
  "showapi_res_code": 0,
  "showapi_res_id": "63d9d6e50de376870ecd5dd8",
  "showapi_res_body": {
   
    "ret_code": 0,
    "location": {
    "lng": 116.32298703399, "lat": 39.983424051248 },
    "formatted_address": "北京市海淀区中关村大街",
    "addressComponent": {
   
      "country": "中国",
      "province": "北京市",
      "city": "北京市",
      "district": "海淀区",
      "adcode": "110108",
      "street": "中关村"
    },
    "business": "人民大学,中关村,苏州街"
  }
}

5.2 地址转经纬度(/address_location)

请求参数(Query)

字段 类型 必填 说明
address string Y 要转换的地址文本,示例"清华大学"

返回字段

字段 说明
ret_code 0 为成功,其余为失败
location.lng / location.lat 位置坐标(GCJ02 坐标系)
precise 是否精确查找,1 为精确、0 为不精确
confidence 置信度
level 地址类型

返回示例(成功)

{
   
  "showapi_res_error": "",
  "showapi_fee_num": 1,
  "showapi_res_code": 0,
  "showapi_res_id": "620b52030de37618171c3260",
  "showapi_res_body": {
   
    "ret_code": 0,
    "location": {
    "lng": 116.327252, "lat": 39.999652 },
    "precise": 1,
    "confidence": 0.9,
    "level": "POI"
  }
}

5.3 多语言调用示例

以下示例中 调用地址 与 YOUR_APPCODE 为占位符,替换为控制台实际值后即可运行。

Python

import requests

url = "<调用地址>/location_address"
headers = {
   "Authorization": "APPCODE YOUR_APPCODE"}
params = {
   "lng": "116.32298703399", "lat": "39.983424051248", "from": "5"}
resp = requests.get(url, headers=headers, params=params, timeout=5)
print(resp.status_code, resp.text)

Java(HttpClient)

// 使用 JDK 内置 HttpClient,无需额外依赖
// 调用地址与 appcode 替换为控制台实际值
Map<String, String> q = new LinkedHashMap<>();
q.put("lng", "116.32298703399");
q.put("lat", "39.983424051248");
q.put("from", "5");
String host = "<调用地址>"; // 控制台开通后获取的完整调用地址
String path = "/location_address";
var sb = q.entrySet().stream()
    .map(e -> URLEncoder.encode(e.getKey(), StandardCharsets.UTF_8)
        + "=" + URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8))
    .collect(Collectors.joining("&"));
HttpRequest req = HttpRequest.newBuilder()
    .uri(URI.create(host + path + "?" + sb))
    .header("Authorization", "APPCODE YOUR_APPCODE")
    .GET().timeout(Duration.ofSeconds(5)).build();
HttpResponse<String> resp =
    HttpClient.newHttpClient().send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(resp.statusCode() + " " + resp.body());

curl

curl -G "<调用地址>/location_address" \
  -H "Authorization: APPCODE YOUR_APPCODE" \
  --data-urlencode "lng=116.32298703399" \
  --data-urlencode "lat=39.983424051248" \
  --data-urlencode "from=5"
![返回字段结构](https://res-showapi.oss-cn-hangzhou.aliyuncs.com/1day-delete/coordinat_convert_02.png)

6 在线调试实录

用例 1:百度坐标反查地址

在控制台调试面板切到"经纬度转地址",Query 填 lng=116.32298703399、lat=39.983424051248、from=5(百度坐标系),发起请求。返回 showapi_res_code=0,showapi_res_body.ret_code=0,addressComponent 逐层给出国家 / 省 / 市 / 区县,business 给出最多 3 个商圈名。

用例 2:坐标系选错的排查

同一组 WGS84 坐标若误按 from=5 提交,得到的地址偏移可达数百米——因为 GCJ02 / BD09 相对 WGS84 存在非线性偏移。排查方法:先确认坐标来源(GPS 芯片输出为 WGS84),再按来源选 from,最后用已知地标的坐标做对照验证。

用例 3:地址文本转坐标

切到"地址转经纬度",address=清华大学,返回 location(GCJ02 坐标)与 confidence。若 precise=0,说明命中的是区县级而非 POI 级,地址粒度需要细化。

![在线调试示意](https://res-showapi.oss-cn-hangzhou.aliyuncs.com/1day-delete/coordinat_convert_06.png)

7 调用限制与规范

项目 说明
请求方式 GET,参数走 Query
鉴权 Authorization: APPCODE <appcode>,appcode 不进入 URL 与日志
计次规则 HTTP 200 才计次扣减,非 200 不计次(与平台扣减规则一致)
坐标范围 经度 / 纬度为十进制度数,字符串传递,注意保留足够小数位(官方示例为 8 位)
结果使用 返回的坐标与地址仅用于业务定位展示,不作为测绘成果直接使用
频控建议 生产环境设置超时(≤5s)、失败重试(指数退避)、结果缓存,避免对同一坐标重复请求

8 能力边界与免责

支持

  • WGS84 / GCJ02 / BD09 主流坐标系之间的换算;
  • 中国大陆地址的逆 / 正地理编码;国外地址按 city_level 说明参考使用。

不支持 / 边界

  • 不返回测绘级精度的坐标(定位用途以地图服务为准);
  • town 字段需显式设置 extensions_town=true 才返回;
  • 地址文本过于模糊(如只有"某市")时置信度低,建议补充区 / 街道。

免责

返回数据仅供业务参考,涉及导航、测绘、法律地址认定等用途,请以权威测绘成果为准。

9 错误码排查

网关层(showapi_res_code ≠ 0 的常见取值)

场景 现象 处理
鉴权失败 showapi_res_error 非空 检查 APPCODE 格式(APPCODE 与 appcode 间为单个空格)与是否开通
参数缺失 网关错误 三个参数 lng / lat / from 均为必填
限流 网关错误 按退避策略重试

业务层(showapi_res_code=0 时看 showapi_res_body)

现象 原因 处理
ret_code=-1,msg="查询不到" 坐标无对应地址(如海域、无人区) 业务侧兜底展示上级行政区
ret_code=-1,error_info="地址转经纬度失败" 地址文本无法解析 细化地址(省市区 + 街道)再试
![坐标体系对照](https://res-showapi.oss-cn-hangzhou.aliyuncs.com/1day-delete/coordinat_convert_03.png)

坐标系换算示意
地理编码示意

10 技术 FAQ

Q1:from 该传几?按什么原则选?
按坐标来源选:GPS 原始 → 1;高德 / 国内地图 → 3;百度地图 → 5。拿不准时用已知地标坐标对照验证。

Q2:返回的坐标是 WGS84 还是 GCJ02?
地址转经纬度返回的是 GCJ02 坐标;坐标系换算结果取决于输入与目标体系,使用前标注好坐标基准。

Q3:business 为什么只有 0~3 个值?
商圈信息最多返回 3 个,属正常设计;需要更多 POI 时建议叠加 POI 检索。

Q4:计次规则?
HTTP 200 才计次,非 200(含网关错误)不计次。

Q5:能否批量调用?
接口为单次查询;批量场景在业务层做并发 + 缓存,结果按坐标 key 去重。

Q6:国外地址支持吗?
字段层面有 country / country_code 支持,城市层级参考意义有限(city_level 说明),国内地址为主要使用范围。

11 内容小结

要点 说明
核心能力 三坐标系互转 + 双向地理编码
鉴权 Authorization: APPCODE <appcode>
关键参数 lng / lat / from(坐标),address(文本)
关键返回 ret_code 判定成败;addressComponent 分层地址;confidence 置信度
工程实践 前置校验坐标合法、超时 5s、指数退避重试、坐标结果缓存、日志脱敏 appcode
使用边界 定位展示用途,不作测绘 / 法律用途

工程落地时,建议把「坐标来源判定 → from 选择 → 调用 → 结果缓存」封装成统一服务,上层业务只关心"地址"与"坐标"两种实体。

相关文章
|
2月前
|
存储 缓存 JSON
身份证二要素核验接口接入指南:参数设计、调用示例与常见问题
本文面向需要在业务系统中校验姓名与身份证号码是否一致的开发者,介绍身份证二要素核验接口的能力、参数设计、接入流程与调用规范。接口通过 AppCode 鉴权,以 GET 方式调用,Query 携带 name 与 idcard 两个参数;校验一致时返回生日、性别、籍贯等附加信息,不一致时返回明确失败标识。文章给出多语言调用示例、返回结构说明、错误码排查思路,以及参数前置校验、频控幂等、重试降级、合规脱敏等工程实践,供在金融、电商、社交、政务等实名核验场景中落地参考。
214 0
身份证二要素核验接口接入指南:参数设计、调用示例与常见问题
|
24天前
|
存储 缓存 JavaScript
实名认证接口技术解析:二要素与三要素核验的接入流程、参数设计与工程实践
梳理实名认证类接口的技术实现:二要素(姓名+身份证)、三要素(姓名+身份证+手机号)核验的能力边界、请求参数、鉴权方式与返回结构,并给出参数前置校验、幂等、重试、结果缓存及数据合规方面的工程实践,供接入方参考。
196 0
|
2月前
|
存储 JSON 缓存
商品条码查询接口
商品条码查询接口以 HTTP GET + JSON 提供条码到商品信息的映射能力。本文介绍其接入流程:鉴权使用 Authorization: APPCODE 请求头;入参 code 支持 69 开头 13 位、069 开头 14 位国内商品及 8 位短码、UPC-A、UPC-E;返回体 showapi_res_body 覆盖名称、商标、规格、参考价、厂商、产地、分类、生产许可、图片等字段。附 cURL、Python、Java、Node.js 调用示例与完整返回结构,讲解系统级与业务级两级错误码排查,并总结入参校验、图片时效处理、缓存、重试、监控等实践要点。
257 0
商品条码查询接口
|
2月前
节假日查询接口实践:快速查询 2026 国庆假期与调休信息
以 2026 国庆假期为例,介绍节假日查询接口(编号 894)的返回结构、参数与批量查询方法,便于排班、出行与日程类业务快速核对放假与调休信息。
159 0
|
2天前
|
缓存 JavaScript 前端开发
银行卡二三四要素核验接口接入指南|输入卡号、姓名、身份证号与手机号,获取匹配结论与银行卡归属信息
银行卡二三四要素核验接口用于校验卡号、持卡人姓名、身份证号与手机号的一致性。本文给出二要素 /bank2、三要素 /bank3、四要素 /bank4 三条路径的参数设计、Python 与 Node.js 调用示例、返回结构与错误码分类排查,并补充频控、缓存、日志脱敏等工程实践与能力边界说明。
34 0
银行卡二三四要素核验接口接入指南|输入卡号、姓名、身份证号与手机号,获取匹配结论与银行卡归属信息
|
3天前
|
JSON 自然语言处理 前端开发
快递物流地图轨迹查询接口|输入快递单号与寄收地址,获取轨迹经纬度、时效预估与订阅推送回调
地图轨迹、时效预估、订阅推送三类能力的接入教程:输入快递单号与寄收地址,返回轨迹节点的 GCJ-02 经纬度、省市区地址与状态码,可直接连线打点;delivery_time 给出预计到达时间,物流时效查询按寄收地返回预计用时;配合设置回调地址与批量提交订阅单号,轨迹更新时主动 POST 至自有服务器,应答 200 与 success。含多语言示例、渲染与幂等要点、错误码排查与技术 FAQ。
55 1
快递物流地图轨迹查询接口|输入快递单号与寄收地址,获取轨迹经纬度、时效预估与订阅推送回调
|
5天前
|
缓存 JSON 监控
电商订单治理:快递地址解析接口,实现地址结构化、异常识别、智能路由
以电商订单收货地址为切入点,讲清快递地址解析接口的接入方式:请求方式、鉴权头、必传与可选参数、响应结构与两层状态判断,并给出 Python / Java / curl 示例。同时覆盖地址要素缺失的处理方式、置信度分档与路由决策,以及缓存、重试、熔断、日志脱敏等工程实践和常见错误码排查。
64 0
电商订单治理:快递地址解析接口,实现地址结构化、异常识别、智能路由
|
8天前
|
存储 监控 数据可视化
包裹轨迹可视化落地:快递按单计费支持物流轨迹,附 Python 调用示例
本文以支持按单查询物流轨迹的快递查询接口为例,梳理包裹轨迹可视化的完整落地过程:传入快递单号(可选快递公司编码与手机尾号),同步返回物流状态码与按时间排列的轨迹节点列表。文章详解请求参数、10 种物流状态机映射、返回字段结构与错误码排查,对比同步查询与订阅推送两种模式的选型,并附 Python 调用示例与时间线渲染思路,适用于电商订单详情页、物流看板与售后异常预警等场景。
80 1
包裹轨迹可视化落地:快递按单计费支持物流轨迹,附 Python 调用示例
|
2天前
|
JSON 缓存 API
图书ISBN信息查询接口|输入ISBN书号,返回书名、作者、出版社与出版日期
接入 ISBN 图书查询接口时,常被 isbn 入参校验、返回字段解析与空结果排查卡住?本文给出参数设计、Java / PHP / Python / Node.js 调用示例、完整返回结构与错误码排查清单。内容覆盖 ISBN 图书查询接口的接入流程、在线调试走查、调用限制与能力边界,并说明 978 开头 13 位书号与部分 10 位书号的适用范围,附纯技术 FAQ。
28 0
图书ISBN信息查询接口|输入ISBN书号,返回书名、作者、出版社与出版日期
|
4天前
|
JSON 缓存 自然语言处理
快递查询API接口|输入运单号,获取物流轨迹、签收状态与预计送达时间
本文介绍快递物流查询接口的接入方式与工程实践:输入运单号(可选快递公司编码、手机号后四位、收寄件地址),返回全链路物流轨迹节点、当前状态与子状态、轨迹经纬度坐标、预计送达时间与预测轨迹,并支持批量订阅推送。内容覆盖能力概览、请求参数与完整返回结构、Python / Java / PHP / Node.js 多语言调用示例、状态码与错误排查、调用限制与能力边界,以及前置校验、结果缓存与幂等重试等接入建议,适合电商订单物流展示、售后回溯与物流监控看板场景参考。
66 0
快递查询API接口|输入运单号,获取物流轨迹、签收状态与预计送达时间

热门文章

最新文章