一、任务:自定义程序loc(amapkey, adrs),查询地址的位置信息,返回formatted_address,country,province,citycode,city,district,township,经纬度,level的结果。
1、请大家使用自己注册得到的api key
2、阅读高德地图web api的开发文档https://lbs.amap.com/api/webservice/summary/
程序:
def loc(amapkey,adrs):
'''获取输入地点的具体地址、经纬度等具体信息,amapkey参数是输入高德地图key,
adrs是输入字符型的汉字表示的地址'''
import requests,json
url = f'https://restapi.amap.com/v3/geocode/geo?key={amapkey}&address={adrs}&output=json'
r = requests.get(url)
r_json = json.loads(r.text)
formatted_address = r_json["geocodes"][0]["formatted_address"]
country = r_json["geocodes"][0]["country"]
province = r_json["geocodes"][0]["province"]
citycode = r_json["geocodes"][0]["citycode"]
city = r_json["geocodes"][0]["city"]
district = r_json["geocodes"][0]["district"]
township = r_json["geocodes"][0]["township"]
lat_long = r_json["geocodes"][0]["location"]
level = r_json["geocodes"][0]["level"]
return formatted_address,country,province,citycode,city,district,township\
,lat_long,level
测试:
with open(r'E:\ProgramData\高德地图key\amapkey.txt','r') as f:
amapkey = f.read()
loca = loc(amapkey,'北京市地坛公园')
print(loca)
结果:
('北京市东城区地坛公园', '中国', '北京市', '010', '北京市', '东城区', [], '116.414867,39.953679', '兴趣点')
二、任务:自定义程序amapdir(amapkey, method, origin, destination),获取任意两个地点间的导航信息,返回时间、距离等结果。
1、注意:高德地图的地址参数只能填入坐标,并要求经纬度小数点不超过6位。
2、利用高德地图获取更多出行方式的导航信息
程序:
def amapdir(amapkey, origin, destination, method="walk"):
"""获取输入两个地点的距离和所选出行方式需要的时间,amapkey参数是输入高德地图key,
origin, destination是输入字符型的汉字表示的地址,method是出行方式,
可输入:'walk'、'bus'、'drive'、'bike'"""
import requests,json
result = {}
#汉字表示的起始、终点转换成经纬度
origin_ll = loc(amapkey,origin)[7]
destination_ll = loc(amapkey,destination)[7]
#请求参数编成一个字典
param = {'key':amapkey,'origin':origin_ll,'destination':destination_ll,'output':json}
#不同路径规划的url
url_walk = 'https://restapi.amap.com/v3/direction/walking'
url_bus = 'https://restapi.amap.com/v3/direction/transit/integrated'
url_drive = 'https://restapi.amap.com/v3/direction/driving'
url_bike = 'https://restapi.amap.com/v4/direction/bicycling'
#设置不同路径规划的信息请求
if method == 'walk':
r = requests.get(url_walk,params=param)
r_json = json.loads(r.text)
result['dist'] = r_json['route']['paths'][0]['distance']
result['time'] = r_json['route']['paths'][0]['duration']
elif method == 'bus':
#添加公交出行的一个请求参数:所在城市
city = loc(amapkey,origin)[3]
param['city'] = city
r = requests.get(url_bus,params=param)
r_json = json.loads(r.text)
result['dist'] = r_json['route']['distance']
result['time'] = r_json['route']['transits'][0]['duration']
elif method == 'drive':
r = requests.get(url_drive,params=param)
r_json = json.loads(r.text)
result['dist'] = r_json['route']['paths'][0]['distance']
result['time'] = r_json['route']['paths'][0]['duration']
elif method == 'bike':
r = requests.get(url_bike,params=param)
r_json = json.loads(r.text)
result['dist'] = r_json["data"]['paths'][0]['distance']
result['time'] = r_json["data"]['paths'][0]['duration']
else:
print('出行方式输入错误')
try:
if r.status_code != 200:
print('地址信息获取失败')
except:
pass
return result
测试:
with open(r'E:\ProgramData\高德地图key\amapkey.txt','r') as f:
amapkey = f.read()
a =amapdir(amapkey, '北京市地坛公园', '中国社会科学院', method='drive')
print(a)
结果:
{'dist': '43710', 'time': '3310'}