高德开放平台调用手册

把地址转成坐标并反查地址

先解析一条结构化地址,再用高德坐标取得行政区及地址描述,处理地址录入与位置核对。

官方资料核对 2026-10-15示例代码,未进行真实接口实测
← 返回平台功能

接入准备

  • 已申请 Web 服务 Key,并确认地理编码服务权限、出口 IP 白名单及适用用途许可。
  • 地址在官方支持范围内;普通地理编码暂不支持台湾省详细地址返回,不用于承诺全球地址解析。

准备环境变量

示例值需要替换为自己的凭证或资源 ID。代码在本机或服务端运行;密钥不应放进公开网页。

AMAP_KEY
控制台应用管理中创建的 Web 服务类型 Key,仅在本地或服务器使用,不能使用 JS API / Android / iOS Key。
终端
export AMAP_KEY='replace_with_your_web_service_key'

以上 export 适用于 macOS / Linux 的终端。按调用步骤保存代码文件,再在同一终端执行。

调用步骤

  1. 01

    注册并完成适用的开发者认证;在控制台应用管理创建应用,添加 Key,服务平台选择 Web 服务。

  2. 02

    先判断个人研究学习或商业用途。商业项目办理适用技术服务许可;确认免费期、LBS 服务组月配额和当前服务 QPS。

  3. 03

    在服务器设置 AMAP_KEY,按实际出口 IP 配置白名单。本页最小例子面向仅 Key + IP 白名单的调用;如果已启用数字签名,须另外按官方规则计算并附带 sig。

  4. 04

    准备公开的测试地址或高德 GCJ-02 坐标;经度在前、纬度在后,坐标小数不超过 6 位。不要直接混入 GPS 或百度坐标。

  5. 05

    先查看 geocodes 数组、count、level 和行政区是否吻合,再取 location;零结果、低匹配级别或多结果要交给用户补地址,不能一律取第一项。

调用 01

地理编码:地址转高德坐标

示例解析官方文档采用的公开地址,URL 内中文已做 UTF-8 编码;实际结果以接口为准。

GEThttps://restapi.amap.com/v3/geocode/geo?key=${AMAP_KEY}&address=%E5%8C%97%E4%BA%AC%E5%B8%82%E6%9C%9D%E9%98%B3%E5%8C%BA%E9%98%9C%E9%80%9A%E4%B8%9C%E5%A4%A7%E8%A1%976%E5%8F%B7&city=110000&output=JSON

请求头

Accept
application/json

参数说明

参数表可左右滑动,查看完整说明。

字段 / 位置类型 / 必填说明
keyQuerystring必填Web 服务 Key,通过 AMAP_KEY 替换。
addressQuerystring必填完整结构化地址,建议省市区道路门牌;本例地址已经 UTF-8 URL 编码,修改时也要编码。
cityQuerystring可选限定城市,可填名称、拼音、citycode 或 adcode;本例 110000 即北京,不支持县级市。
outputQuerystring可选本例 JSON;接口也支持 XML。

调用代码

替换示例 ID 与请求体内容后运行。cURL 会报 HTTP 错误,业务状态还需按下方返回示例核对。

cURL
# 执行后核对返回 JSON 的业务状态;HTTP 200 仍可能包含业务错误。
curl --silent --show-error --fail-with-body \
  --request GET \
  --url "https://restapi.amap.com/v3/geocode/geo?key=${AMAP_KEY}&address=%E5%8C%97%E4%BA%AC%E5%B8%82%E6%9C%9D%E9%98%B3%E5%8C%BA%E9%98%9C%E9%80%9A%E4%B8%9C%E5%A4%A7%E8%A1%976%E5%8F%B7&city=110000&output=JSON" \
  --header "Accept: application/json"
Python 3
import json
import os
import re
import urllib.request
import urllib.error

def expand(value):
    return re.sub(r"\$\{([A-Z][A-Z0-9_]*)\}",
                  lambda match: os.environ[match.group(1)], value)

url = expand("https://restapi.amap.com/v3/geocode/geo?key=${AMAP_KEY}&address=%E5%8C%97%E4%BA%AC%E5%B8%82%E6%9C%9D%E9%98%B3%E5%8C%BA%E9%98%9C%E9%80%9A%E4%B8%9C%E5%A4%A7%E8%A1%976%E5%8F%B7&city=110000&output=JSON")
headers = {
    "Accept": expand("application/json"),
}
data = None
request = urllib.request.Request(url, data=data, headers=headers, method="GET")
try:
    with urllib.request.urlopen(request, timeout=30) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    print(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}")
    raise SystemExit(1)
print(json.dumps(result, ensure_ascii=False, indent=2))
if isinstance(result, dict) and "status" in result and result["status"] != "1":
    raise SystemExit("平台返回业务错误,请结合下方排错说明检查响应")
Node.js
// Node.js 22+,保存为 request.mjs 后运行 node request.mjs
function expand(value) {
  return value.replace(/\$\{([A-Z][A-Z0-9_]*)\}/g, (_, name) => {
    if (!process.env[name]) throw new Error(`缺少环境变量 ${name}`);
    return process.env[name];
  });
}

const url = expand("https://restapi.amap.com/v3/geocode/geo?key=${AMAP_KEY}&address=%E5%8C%97%E4%BA%AC%E5%B8%82%E6%9C%9D%E9%98%B3%E5%8C%BA%E9%98%9C%E9%80%9A%E4%B8%9C%E5%A4%A7%E8%A1%976%E5%8F%B7&city=110000&output=JSON");
const headers = Object.fromEntries(
  Object.entries({
  "Accept": "application/json"
}).map(([key, value]) => [key, expand(value)])
);
const response = await fetch(url, {
  method: "GET",
  headers,
  signal: AbortSignal.timeout(30000),
});
const text = await response.text();
if (!response.ok) throw new Error(`HTTP ${response.status}: ${text}`);
const result = JSON.parse(text);
console.log(JSON.stringify(result, null, 2));
if (Object.hasOwn(result, "status") && result["status"] !== "1") {
  throw new Error('平台返回业务错误,请结合下方排错说明检查响应');
}

返回示例

根据官方字段整理的结构示意;地址及坐标沿用文档的公开位置示例,其他字段为示意,未进行真实接口实测。必须检查 count 与 level,location 是 GCJ-02,经度在前。 以下为结构示意,非本站实测结果。

JSON
{
  "status": "1",
  "info": "OK",
  "infocode": "10000",
  "count": "1",
  "geocodes": [
    {
      "formatted_address": "北京市朝阳区阜通东大街6号",
      "province": "北京市",
      "city": "北京市",
      "district": "朝阳区",
      "adcode": "110105",
      "location": "116.480881,39.989410",
      "level": "门牌号"
    }
  ]
}

常见错误与排查

10001 INVALID_USER_KEYKey 不正确或已过期。
核对 AMAP_KEY 与控制台状态;不要把应用名称、其他平台 Key 当成 Web 服务 Key。
10009 USERKEY_PLAT_NOMATCHKey 类型与请求平台不符。
重新选择 Web 服务类型 Key,不能用 JavaScript API Key 调 REST 服务。
10005 INVALID_USER_IP请求服务器出口 IP 不在白名单。
检查实际公网出口 IP,更新控制台白名单;本地开发与生产主机可能不是同一出口。
10007 INVALID_USER_SIGNATURE启用了数字签名但 sig 未按规则生成。
按 Key 控制台签名设置与官方算法生成 sig;只设置 Key 的本页最小示例不适用于已强制签名的配置。
10019 / 10020 / 10021服务、Key 或账号维度的 QPS 超限。
降低并发并排队,检查账号下其他 Key 的共同用量;确需扩容时单独购买服务 QPS。
40000 QUOTA_PLAN_RUN_OUT所购服务余额耗尽。
核对当前服务组配额、流量包及有效期,需要时购买额度;增加 Key 不会复制账号配额。
20000 / 20001参数非法或缺少必填字段。
检查 key、address、中文 URL 编码和 city 类型;补齐地址省市信息,不能把 POI 搜索参数直接套入。

调用注意

  • status=1 但 geocodes 为空时是没有匹配结果,不是 Key 失效。level 低于门牌或地址行政区不符时应人工确认。
  • 部分不存在的字段可能以空数组而不是空字符串返回,解析逻辑要兼容;不要假定每个地址都有 city、street 和 number。
调用 02

逆地理编码:高德坐标转地址

示例查询基本地址信息,不请求周边 POI 和道路扩展,输入必须已是 GCJ-02。

GEThttps://restapi.amap.com/v3/geocode/regeo?key=${AMAP_KEY}&location=116.480881,39.989410&extensions=base&output=JSON

请求头

Accept
application/json

参数说明

参数表可左右滑动,查看完整说明。

字段 / 位置类型 / 必填说明
keyQuerystring必填Web 服务类型 Key。
locationQuerystring必填经度,纬度,最多 6 位小数;示例为公开测试点,替换为需要核对的 GCJ-02 坐标。
extensionsQuerystring可选base 返回基本地址;all 才返回附近 POI、道路和交叉口等扩展。
radiusQueryinteger可选扩展周边查询半径 0–3000 米,默认 1000;本例仅基本地址,未额外传入。

调用代码

替换示例 ID 与请求体内容后运行。cURL 会报 HTTP 错误,业务状态还需按下方返回示例核对。

cURL
# 执行后核对返回 JSON 的业务状态;HTTP 200 仍可能包含业务错误。
curl --silent --show-error --fail-with-body \
  --request GET \
  --url "https://restapi.amap.com/v3/geocode/regeo?key=${AMAP_KEY}&location=116.480881,39.989410&extensions=base&output=JSON" \
  --header "Accept: application/json"
Python 3
import json
import os
import re
import urllib.request
import urllib.error

def expand(value):
    return re.sub(r"\$\{([A-Z][A-Z0-9_]*)\}",
                  lambda match: os.environ[match.group(1)], value)

url = expand("https://restapi.amap.com/v3/geocode/regeo?key=${AMAP_KEY}&location=116.480881,39.989410&extensions=base&output=JSON")
headers = {
    "Accept": expand("application/json"),
}
data = None
request = urllib.request.Request(url, data=data, headers=headers, method="GET")
try:
    with urllib.request.urlopen(request, timeout=30) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    print(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}")
    raise SystemExit(1)
print(json.dumps(result, ensure_ascii=False, indent=2))
if isinstance(result, dict) and "status" in result and result["status"] != "1":
    raise SystemExit("平台返回业务错误,请结合下方排错说明检查响应")
Node.js
// Node.js 22+,保存为 request.mjs 后运行 node request.mjs
function expand(value) {
  return value.replace(/\$\{([A-Z][A-Z0-9_]*)\}/g, (_, name) => {
    if (!process.env[name]) throw new Error(`缺少环境变量 ${name}`);
    return process.env[name];
  });
}

const url = expand("https://restapi.amap.com/v3/geocode/regeo?key=${AMAP_KEY}&location=116.480881,39.989410&extensions=base&output=JSON");
const headers = Object.fromEntries(
  Object.entries({
  "Accept": "application/json"
}).map(([key, value]) => [key, expand(value)])
);
const response = await fetch(url, {
  method: "GET",
  headers,
  signal: AbortSignal.timeout(30000),
});
const text = await response.text();
if (!response.ok) throw new Error(`HTTP ${response.status}: ${text}`);
const result = JSON.parse(text);
console.log(JSON.stringify(result, null, 2));
if (Object.hasOwn(result, "status") && result["status"] !== "1") {
  throw new Error('平台返回业务错误,请结合下方排错说明检查响应');
}

返回示例

根据官方字段整理的结构示意,地址与行政区用于说明解析位置,非接口实测。regeocode 为对象,addressComponent.city 对直辖市等情况可能为空。 以下为结构示意,非本站实测结果。

JSON
{
  "status": "1",
  "info": "OK",
  "infocode": "10000",
  "regeocode": {
    "formatted_address": "北京市朝阳区阜通东大街附近",
    "addressComponent": {
      "country": "中国",
      "province": "北京市",
      "city": [],
      "district": "朝阳区",
      "adcode": "110105"
    }
  }
}

常见错误与排查

10001 INVALID_USER_KEYKey 不正确或已过期。
核对 AMAP_KEY 与控制台状态;不要把应用名称、其他平台 Key 当成 Web 服务 Key。
10009 USERKEY_PLAT_NOMATCHKey 类型与请求平台不符。
重新选择 Web 服务类型 Key,不能用 JavaScript API Key 调 REST 服务。
10005 INVALID_USER_IP请求服务器出口 IP 不在白名单。
检查实际公网出口 IP,更新控制台白名单;本地开发与生产主机可能不是同一出口。
10007 INVALID_USER_SIGNATURE启用了数字签名但 sig 未按规则生成。
按 Key 控制台签名设置与官方算法生成 sig;只设置 Key 的本页最小示例不适用于已强制签名的配置。
10019 / 10020 / 10021服务、Key 或账号维度的 QPS 超限。
降低并发并排队,检查账号下其他 Key 的共同用量;确需扩容时单独购买服务 QPS。
40000 QUOTA_PLAN_RUN_OUT所购服务余额耗尽。
核对当前服务组配额、流量包及有效期,需要时购买额度;增加 Key 不会复制账号配额。
20000 INVALID_PARAMS坐标参数不符合接口格式。
检查经纬度顺序、数值范围和逗号分隔,移除地址字符串;WGS-84 坐标先转换再用。

调用注意

  • 获取经纬度不会自动获得访问用户位置的权利,设备定位与用户授权应由自己的客户端流程完成。
  • 需要附近 POI 时才改为 extensions=all 并按需设 radius,不能把基本返回视作全部周边数据。

注意事项

  • 地理编码、逆地理编码、基础路线和坐标转换共享基础 LBS 服务组配额;本例运行会消耗实际调用量。
  • 个人非商业免费额度不是永久免费:公开价格页限定为自注册认证起 1 年;商业许可、超额流量和 QPS 另行核算。
  • 示例只展示请求及字段读取。HTTP 2xx 后仍要检查 status、info 与 infocode;返回结构示意不是实际定位或路况结果。

核验来源

本站按官方资料整理本场景的必要调用步骤与代码,覆盖范围以本页列出的接口为准。官方资料用于追溯规范及查看变更。

  1. 01
    创建 Web 服务类型 Key核验日期 2026-10-15
  2. 02
  3. 03
  4. 04
    高德使用 GCJ-02 坐标核验日期 2026-10-15
  5. 05
  6. 06
    Web 服务 infocode 错误码核验日期 2026-10-15
  7. 07
    非高德坐标的转换 API核验日期 2026-10-15

高德开放平台的其他调用手册

← 返回高德开放平台的全部功能