去除logo 高德地图api_通过高德地图API获取详细地址所属的行政区域

本文介绍了如何利用高德地图API获取详细地址的行政区域信息,包括注册开发者账户、构造请求URL、解析返回的JSON数据,以及在Python中实现这一过程。通过示例展示了如何从详细地址中提取出区、省等信息。
摘要由CSDN通过智能技术生成

需求:现有一份商家地址数据,地址十分详细,可以具体到门牌号,但是,我们做分析不需要这么详细的地址,我们往往更希望得到地址所在的区,如:

上海闸北区广中西路777弄91、99号504室506室

对应的区为:静安区

高德地图提供了一个API接口,方便我们调用接口直接获取行政区域信息。

地理/逆地理编码-API文档-开发指南-Web服务 API | 高德地图API​lbs.amap.com

在正式使用该接口之前需要在高德地图上注册,获得开发者账户,同时创建一个自己的“应用”,具体操作参见下面文章:

大咪:Python玩转高德地图API(一)​zhuanlan.zhihu.com
cde3e7eda97ce89580a483aef92bb8b2.png
大咪:Python玩转高德地图API(二)​zhuanlan.zhihu.com
cde3e7eda97ce89580a483aef92bb8b2.png

成功创建的应用和Key(密钥)如下:

c791b0f76194a030f0d49e0909d10bb9.png

根据高德地图API官方文档可知,进行地区查询的关键是构造出一个请求URL,高德地图会根据这个URL返回我们需要的地址。以下信息是我们在构造这个URL时必须知道的:

c33ff2fdf35f2cf4cd2ade3b3398c759.png

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

61f6b0dfb4934e0c7e8298378175e90b.png

其中,city参数支持中文输入行政区名称,如city=北京。

city参数提到了“城市编码表”,点击蓝色字体可以进入相关页面下载一份高德地图自己设计的城市编码表。通过这张表,获知每个行政区域的唯一编码。

城市编码表中数据示例:

f29a7d7a11ba7a6e2452a47f92e194ed.png

最终,以请求"上海闸北区广中西路777弄91、99号504室506室"的行政区域信息为例,我们想要返回该地址的行政区域信息,并以JSON格式返回查询结构,一个完整的请求URL应该长这样:

url = 'https://restapi.amap.com/v3/geocode/geo?address=上海闸北区广中西路777弄91、99号504室506室&city=上海&output=JOSON&key=<申请的key>'

在python中,通过调用requests库进行数据请求,通过json库对返回的内容进行解析。

具体代码如下:

#获取单个地址的行政区域
import requests
import json
address = '上海闸北区广中西路777弄91、99号504室506室'
url = 'https://restapi.amap.com/v3/geocode/geo?address='+address+'&city=上海&output=JOSON&key=<申请的key>'
request=requests.get(url).text
result = json.loads(request)
print(result)

43c511606e9c69b36588cb276c9d6d87.png

可以看到,我们需要的结果为“静安区”,该信息处于geocodes下的district键中。

返回结果result是一个字典格式,geocodes是其中一个键值对的键,geocodes的值是一个列表,该列表中包含一个字典,该字典中包含多个键值对,district是其中一个键值对的键。

0713a3adb447ed28b8766e336c2abbf0.png
人工调整了下JSON的显示格式

所以,我们提取目标信息的代码为:

district = result['geocodes'][0]['district']
print(district)

运行结果:

f46c21a14baf4e8cb66651a3e6dc664a.png

同理,如果我们给出某个全国的具体地址信息,假装我们事先不知道该地址属于哪个城市,我们想要返回该地址所属的省份,那么,在url构建时,可以不指明city参数。如下:

#获取全国范围内某详细地址的行政区域信息
import requests
import json
address = '成都市成华区二仙桥东三路1号'
url = 'https://restapi.amap.com/v3/geocode/geo?address='+address+'&output=JOSON&key=<申请的key>'
request=requests.get(url).text
result = json.loads(request)
print(result)

181f307b8661882864a85a70b36c30b5.png
province= result['geocodes'][0]['province'] 
print(province)
#四川省

最后,如何批量导入地址数据,并返回地址的行政区域?

现有一份店铺地址信息如下:

链接:https://pan.baidu.com/s/1ERzmhbguZg29or9KF22tcQ

提取码:1o9t

1.将获取地址的行政区域信息功能封装为函数

import requests
import json
def get_district(address):
    url = 'https://restapi.amap.com/v3/geocode/geo?address='+address+'&city=上海&output=JOSON&key=<申请的key>'
    request=requests.get(url).text
    result = json.loads(request)
    district = result['geocodes'][0]['district']
    return district

2.读入数据

import pandas as pd
data=pd.read_excel('D:Jupyter工作空间shop_info.xlsx')
data.head()

99d90a202313e83fe15c52926aa8b7be.png

3.向data中新增district列,用于存储获取到的区域信息

data['district'] = data['address'].apply(get_district)
data.head()

运行效果如下:

1c0b55f11a226a35a95bd54943fb5995.png

特别注意,这个API接口对地址数据有严格的格式要求,输入的地址信息必须为“省-市-区(县)-街道”这样的结构,如果地址信息不规范,记得自己进行预处理~

完毕~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值