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

前言

        最近打算做一些地图可视化的工作,然后发现可以借助高德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服务地址
URLhttps://restapi.amap.com/v3/geocode/geo?parameters
请求方式GET

        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号的地址信息
import requests
url = 'https://restapi.amap.com/v3/geocode/geo?address=北京市朝阳区阜通东大街6号&key=<your key>'
response = requests.get(url)
json_response = response.json()
  • 使用特定浏览器查询
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. 添加城市
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=广州的限定条件。以下几种写法均可:

# 拼音
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服务地址

URLhttps://restapi.amap.com/v3/geocode/regeo?parameters
请求方式GET

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

  • 请求参数
参数名含义是否必须缺省值
key高德key,用户在官网申请Web服务API类型的key必须
location经纬度坐标,经度在前,纬度在后,经纬度间以“,”分割,经纬度小数点后不要超过 6 位。必须
poitypePOI类型,逆地理编码在进行坐标解析之后不仅可以返回地址描述,也可以返回经纬度附近符合限定要求的 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
  • 返回参数

示例

  • 查询特定坐标的地址信息
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)

  • 查询特定坐标方圆三公里内的地址信息
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&radius=3000&key=<your key>'
response = requests.get(url, headers=headers)
json_response = response.json()
print(json_response)
  • 返回详细的道路信息、附近POI等

url = 'https://restapi.amap.com/v3/geocode/regeo?location=116.310003,39.991957&extensions=all&key=<your key>'
  • 仅返回主干路
url = 'https://restapi.amap.com/v3/geocode/regeo?location=116.310003,39.991957&roadlevel=1&key=<your key>'

2. 行政区域查询

行政区域查询是一类简单的 HTTP 接口,根据用户输入的搜索条件可以帮助用户快速的查找特定的行政区域信息。

例如:中国>山东省>济南市>历下区>舜华路街道(国>省>市>区>街道)。

  • 行政区域查询 API 服务地址

URL

请求方式

https://restapi.amap.com/v3/config/district?parameters

GET

parameters 代表的参数包括必填参数和可选参数。所有参数均使用和号字符(&)进行分隔。下面的列表枚举了这些参数及其使用规则。

  • 常用的请求参数

参数名

含义

规则说明

是否必须

缺省值

key

请求服务权限标识

用户的key

必填

keywords

查询关键字

规则:只支持单个关键词语搜索关键词支持:行政区名称、citycode、adcode

例如,在 subdistrict=2,搜索省份(例如山东),能够显示市(例如济南),区(例如历下区)

可选

subdistrict

子级行政区

规则:设置显示下级行政区级数(行政区级别包括:国家、省/直辖市、市、区/县、乡镇/街道多级数据)

可选值:0、1、2、3等数字,并以此类推

0:不返回下级行政区;

1:返回下一级行政区;

2:返回下两级行政区;

3:返回下三级行政区;

部分城市和省直辖县因为没有区县的概念,故在市级下方直接显示街道。例如:广东-东莞

可选

1

page

需要第几页数据

最外层的 districts 最多会返回20个数据,若超过限制,请用 page 请求下一页数据。

例如:page=2;page=3。默认:page=1

可选

1

extensions

返回结果控制

此项控制行政区信息中返回行政区边界坐标点; 可选值:base、all;

base:不返回行政区边界坐标点;

all:只返回当前查询 district 的边界值,不返回子节点的边界值;

目前不能返回乡镇/街道级别的边界值

可选

base

filter

根据区划过滤

按照指定行政区划进行过滤,填入后则只返回该省/直辖市信息

需填入 adcode,为了保证数据的正确,强烈建议填入此参数

可选

output

返回数据格式类型

可选值:JSON,XML

可选

JSON

  • 返回结果参数说明

行政区域查询的响应结果的格式由请求参数output指定。

名称

含义

规则说明

status

返回结果状态值

值为0或1,0表示失败;1表示成功

info

返回状态说明

返回状态说明,status 为0时,info 返回错误原因,否则返回“OK”。

infocode

状态码

返回状态说明,10000代表正确,详情参阅 info 状态表

suggestion

建议结果列表

keywords

建议关键字列表

 cities

建议城市列表

districts

行政区列表

district

行政区信息

citycode

城市编码

adcode

区域编码

街道没有独有的 adcode,均继承父类(区县)的 adcode

name

行政区名称

polyline

行政区边界坐标点

当一个行政区范围,由完全分隔两块或者多块的地块组

成,每块地的 polyline 坐标串以 | 分隔 。

如北京 的 朝阳区

center

区域中心点

乡镇级别返回的center是边界线上的形点,其他行政级别返回的center不一定是中心点,若政府机构位于面内,则返回政府坐标,政府不在面内,则返回繁华点坐标。

level

行政区划级别

country:国家

province:省份(直辖市会在province显示)

city:市(直辖市会在province显示)

district:区县

street:街道

districts

下级行政区列表,包含 district 元素

  • 示例
  • 查询湖南省所有地级市的名称以及市中心的经纬度
import requests


header = {
    '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 = f'https://restapi.amap.com/v3/config/district?keywords=湖南省&subdistrict=1&key=<your key>'
response = requests.get(url, headers=header)
json = response.json()
count = len(json['districts'][0]['districts']) # 城市个数
for i in np.arange(count):
    print('城市名称:', json['districts'][0]['districts'][i]['name'], '\t经度:', json['districts'][0]['districts'][i]['center'].split(sep=',')[0], '\t纬度:', json['districts'][0]['districts'][i]['center'].split(sep=',')[1])

3. 静态地图

静态地图服务通过返回一张地图图片响应 HTTP 请求,使用户能够将高德地图以图片形式嵌入自己的网页中。用户可以指定请求的地图位置、图片大小、以及在地图上添加覆盖物,如标签、标注、折线、多边形。

  • 请求参数及用法

URL

请求方式

https://restapi.amap.com/v3/staticmap?parameters

GET

parameters 代表的参数包括必填参数和可选参数。所有参数均使用和号字符(&)进行分隔。下面的列表枚举了这些参数及其使用规则。

  • 请求参数

参数名称

含义

规则说明

是否必填

默认值

key

用户唯一标识

用户在高德地图官网申请

必填

location

地图中心点

中心点坐标。

规则:经度和纬度用","分隔 经纬度小数点后不得超过6位。

部分条件必填

zoom

地图级别

地图缩放级别:[1,17]

必填

size

地图大小

图片宽度*图片高度。最大值为1024*1024

可选

400*400

scale

普通/高清

1:返回普通图;

2:调用高清图,图片高度和宽度都增加一倍,zoom 也增加一倍(当zoom 为最大值时,zoom 不再改变)。

可选

1

markers

标注

使用规则见 markers 详细说明,标注最大数10个

可选

labels

标签

使用规则见 labels 详细说明,标签最大数10个

可选

paths

折线

使用规则见 paths 详细说明,折线和多边形最大数4个

可选

traffic

交通路况标识

底图是否展现实时路况。 可选值: 0,不展现;1,展现。

可选

0

sig

数字签名

数字签名认证用户必填

可选

注:如果有标注/标签/折线等覆盖物,则中心点(location)和地图级别(zoom)可选填。当请求中无 location 值时,地图区域以包含请求中所有的标注/标签/折线的几何中心为中心点;如请求中无 zoom,地图区域以包含请求中所有的标注/标签/折线为准,系统计算出 zoom 值。

  • 示例
  • 添加一个默认标签
https://restapi.amap.com/v3/staticmap?markers=mid,0xFF0000,1:116.37359,39.92437&key=<your key>

一些小问题

  1. 如何知道headers的值

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

然后打开开发者模式(按F12)

        等左边的事务加载完成后,随便点击一个

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值