首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python采用高德api实现地图功能

Python采用高德api实现地图功能

原创
作者头像
ddAshley
发布2025-07-21 11:52:37
发布2025-07-21 11:52:37
33900
代码可运行
举报
运行总次数:0
代码可运行

前言

最近打算做一些地图可视化的工作,然后发现可以借助高德api来在地图上进行批量标记、画多边形。

介绍

高德地图为个人开发者开放了一定免费次数的api,包括地理/逆地理编码、路径规划、行政区域查询、交通事件、IP定位、坐标转换等服务。(详情可见高德开放平台高德开放平台 | 高德地图API (amap.com))

准备工作

  1. 申请高德地图api服务 搜索“高德地图开放平台”或者“高德地图api”,进入官网,登录账号

2.进入控制台(右上方),点击应用管理-我的应用,然后添加key

3.添加key,服务平台选择Web服务,其他的自己随意填写咯

4.记下key,后面的每次调用都需要这个key

开冲

1.地理/逆地理编码

地理编码/逆地理编码 API 是通过 HTTP/HTTPS 协议访问远程服务的接口,提供结构化地址与经纬度之间的相互转化的能力。

  • 适用场景
    • 地理编码:将详细的结构化地址转换为高德经纬度坐标。且支持对地标性名胜景区、建筑物名称解析为高德经纬度坐标。
    • 逆地理编码:将经纬度转换为详细结构化的地址,且返回附近周边的POI、AOI信息。

I. 地理编码

  • 地理api服务地址

parameters代表可选参数,参数间使用符号“&”连接,参数见下表。

  • 请求参数

参数名

含义

是否必须

缺省值

key

高德key,用户在官网申请Web服务API类型的key

必须

address

结构化的地址信息

必须

city

指定查询的城市,可选输入内容包括:指定城市的中文(如北京)、指定城市的中文全拼(beijing)、citycode(010)、adcode(110000)

可选

无,会进行全国范围内的搜索

sig

数字签名

可选

output

返回数据格式类型,json或xml

可选

json

callback

回调函数,只在 output 参数设置为 JSON 时有效

可选

  • 返回参数

参数名

含义

规则说明

status

返回结果状态值

返回值为0或1,0表示请求失败,1表示请求成功

count

返回结果数目

返回结果个数

info

返回状态说明

当 status 为 0 时,info 会返回具体错误原因,否则返回“OK”(info详情见官网)

geocodes

地理编码信息列表

返回结果对象列表

country

国家

默认返回中国

province

例如:北京市。此处需要注意的是,中国的四大直辖市也算作省级单位。

city

例如:北京市

citycode

城市编码

例如:010

district

行政区

例如:朝阳区

street

街道

例如:阜通东大街

number

门牌

例如:6号

adcode

区域编码

例如:110101

location

坐标点

经度,纬度

level

匹配级别

  • 示例
  • 查询北京市朝阳区阜通东大街6号的地址信息
代码语言:python
代码运行次数:0
运行
复制
import requests
url = 'https://restapi.amap.com/v3/geocode/geo?address=北京市朝阳区阜通东大街6号&key=<your key>'
response = requests.get(url)
json_response = response.json()
  • 使用特定浏览器查询
代码语言:python
代码运行次数:0
运行
复制
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
}
url = 'https://restapi.amap.com/v3/geocode/geo?address=北京市朝阳区阜通东大街6号&key=<your key>'
response = requests.get(url, headers=headers)
json_response = response.json()
  • 模糊查找 全国有很多同名街道,当地址不规范的时候,往往会返回很多个结果,此时添加限定条件将提高搜索的准确性。

1、添加城市

代码语言:python
代码运行次数:0
运行
复制
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
}
url = 'https://restapi.amap.com/v3/geocode/geo?address=北京路&key=<your key>'
response = requests.get(url, headers=headers)
json_response = response.json()

若要查找广州市的北京路,则需加上city=广州的限定条件。以下几种写法均可:

代码语言:python
代码运行次数:0
运行
复制
# 拼音
url = 'https://restapi.amap.com/v3/geocode/geo?address=北京路&city=guangzhou&key=<your key>'
 
# 中文字符
url = 'https://restapi.amap.com/v3/geocode/geo?address=北京路&city=广州&key=<your key>'
url = 'https://restapi.amap.com/v3/geocode/geo?address=北京路&city=广州市&key=<your key>'
 
# 区号
url = 'https://restapi.amap.com/v3/geocode/geo?address=北京路&city=020&key=<your key>'
 
# adcode
url = 'https://restapi.amap.com/v3/geocode/geo?address=北京路&city=440100&key=<your key>'

II.逆地理编码

  • 逆地理api服务地址

parameters代表可选参数,参数间使用符号“&”连接,参数见下表。

  • 请求参数

参数名

含义

是否必须

确省值

参数名

含义

是否必须

缺省值

key

高德key,用户在官网申请Web服务API类型的key

必须

location

经纬度坐标,经度在前,纬度在后,经纬度间以“,”分割,经纬度小数点后不要超过 6 位。

必须

poitype POI

类型,逆地理编码在进行坐标解析之后不仅可以返回地址描述,也可以返回经纬度附近符合限定要求的 POI 内容(在 extensions 字段值为 all 时才会返回 POI 内容)。设置 POI 类型参数相当于为上述操作限定要求。

可选

radius

搜索半径,radius 取值范围:0~3000,默认值:1000。单位:米

可选

1000

extensions

返回结果控制,取值为base时返回基本地址信息,取值为all时返回基本地址信息、附近POI内容、道路信息以及道路交叉口信息

可选

base

roadlevel

道路等级,该参数需要extensions为all时生效。可选值:0或1,当roadlevel为0显示所有道路,当roadlevel为1时过滤非主干路,仅输出主干路信息 可选 无

sig 数字签名,详情参考官网

可选

output

返回数据类型格式,可选输入json或xml。设置 JSON 返回结果数据将会以 JSON 结构构成;如果设置 XML 返回结果数据将以 XML 结构构成

可选

json

callback

回调函数,callback 值是用户定义的函数名称,此参数只在 output 参数设置为 JSON 时有效

可选

homeorcorp

是否优化poi的返回顺序,以下内容需要 extensions 参数为 all 时才生效。 homeorcorp 参数的设置可以影响召回 POI 内容的排序策略,目前提供三个可选参数: 0:不对召回的排序策略进行干扰。 1:综合大数据分析将居家相关的 POI 内容优先返回,即优化返回结果中 pois 字段的poi 顺序。 2:综合大数据分析将公司相关的 POI 内容优先返回,即优化返回结果中 pois 字段的poi 顺序

可选

0

  • 示例
  • 查询特定坐标的地址信息
代码语言:python
代码运行次数:0
运行
复制
import requests
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
}
url = 'https://restapi.amap.com/v3/geocode/regeo?location=116.310003,39.991957&key=<your key>'
response = requests.get(url, headers=headers)
json_response = response.json()
print(json_response)
  • 查询特定坐标方圆三公里内的地址信息
代码语言:pythonimport requests
复制
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
}
url = 'https://restapi.amap.com/v3/geocode/regeo?location=116.310003,39.991957&radius=3000&key=<your key>'
response = requests.get(url, headers=headers)
json_response = response.json()
print(json_response)
  • 返回详细的道路信息、附近POI等
代码语言:python
代码运行次数:0
运行
复制
url = 'https://restapi.amap.com/v3/geocode/regeo?location=116.310003,39.991957&extensions=all&key=<your key>'
  • 仅返回主干路
代码语言:python
代码运行次数:0
运行
复制
url = 'https://restapi.amap.com/v3/geocode/regeo?location=116.310003,39.991957&roadlevel=1&key=<your key>'

一些小问题

  • 如何知道headers的值 不输入headers的话自动使用默认浏览器进行,而如果我想要指定浏览器就需要输入相应的headers。本人用的是火狐浏览器,就以这个作为例子,其他浏览器也是这种操作。先随便打开一个网页

然后打开开发者模式(按F12),等左边的事务加载完成后,随便点击一个

接着右边往下拉,找到User-Agent这一项,这个就是headers啦。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 介绍
  • 准备工作
  • 开冲
    • 1.地理/逆地理编码
  • 一些小问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档