应用高德地图API 将地址转换为经纬度

首先进入高德开放平台 并注册

 

 注册完成后,点击控制台。

 

 

 

进入控制台后,选择管理Key。

进入管理Key 的界面后,选择添加Key,并在里面选择Web 服务。来创建后面需要使用的Key。

 

 

 创建好之后 会生成一个key

其中可以选择需要的功能进行使用

其中选择  地址编码功能

(正)地理编码:将详细的结构化地址转换为高德经纬度坐标。且支持对地标性名胜景区、建筑物名称解析为高德经纬度坐标。
结构化地址举例:北京市朝阳区阜通东大街6号转换后经纬度:116.480881,39.989410
地标性建筑举例:天安门转换后经纬度:116.397499,39.908722

步骤:

    申请Web 服务API 类型Key。
    参考接口参数文档发起HTTP/HTTPS请求,第一步申请的 Key 需作为必填参数一同发送
    接收请求返回的数据(JSON或XML格式),参考返回参数文档解析数据。如无特殊声明,接口的输入参数和输出数据编码全部统一为 UTF-8 编码方式。

根据文档可知,我们需要访问的网址是https://restapi.amap.com/v3/geocode/geo?parameters

在文档里可以看到需要我们设置的参数。

 

 

 通过python 的requests 包可以设置参数并进行访问。

 

代码示例如下

# 执行一次高德地图地理编码的查询
# 输入值:locationList -> 地址的序列,currentKey -> 当前使用的Key
# 返回值:resultList -> 查询成功,返回结果坐标的序列
# -1 -> 执行当前查询时Key的配额用完了
# -2 -> 执行当前查询出错
import requests


def ExcuteSingleQuery(locationList,currentkey):
# 1-locationList中的地址连接成高德地图API能够识别的样子
locationString = "" # 当前locationList组成的string
for location in locationList:
locationString += location + '|'
# 2-地理编码查询需要的Url
output = 'json' # 查询返回的形式
batch = 'true' # 是否支持多个查询
base = 'https://restapi.amap.com/v3/geocode/geo?' # 地理编码查询Url的头
currentUrl = base + "output=" + output + "&batch=" + batch + "&address=" + locationString + "&key=" + currentkey
print(currentUrl)
# 3-提交请求
response = requests.get(currentUrl) # 提交请求
answer = response.json() # 接收返回
# 4-解析Json的内容
resultList = [] # 用来存放地理编码结果的空序列
if answer['status'] == '1' and answer['info'] == 'OK':
# 4.1-请求和返回都成功,则进行解析
tmpList = answer['geocodes'] # 获取所有结果坐标点
for i in range(0,len(tmpList)):
try:
# 解析','分隔的经纬度
coordString = tmpList[i]['location']
coordList = coordString.split(',')
# 放入结果序列
resultList.append((float(coordList[0]), float(coordList[1])))
except:
# 如果发生错误则存入None
resultList.append(None)
return resultList
elif answer['info'] == 'DAILY_QUERY_OVER_LIMIT':
# 4.2-当前账号的余额用完了,返回-1
return -1
else:
# 4.3-如果发生其他错误则返回-2
return -2


if __name__ == '__main__':

# 创建测试地址数据集
locationList = [
"四川省成都市崇州市崇阳街道晋康北路313",
"四川省成都市成都高新区盛华北路1071",
"四川省成都市四川省成都市金堂县赵镇迎宾大道一段8",
"四川省成都市崇州市三江镇崇新村5",
"四川省成都市大邑县鹤鸣乡联和村二十组",
"四川省成都市成都市蒲江县复兴乡庙峰村352",
]

# 进行地理编码
lists = ExcuteSingleQuery(locationList=locationList, currentkey="你的key")
for l in lists:
print(l)

原文链接:https://blog.csdn.net/qq_41103204/article/details/105707546

posted @ 2022-04-19 09:20  黄某人233  阅读(4931)  评论(0编辑  收藏  举报