今天想和大家分享的是高德路径规划API~
高德地图作为国内领先的地图服务提供商,其路径规划API为开发者提供了强大的支持,比如支撑GIS或者规划领域的科学研究,为页面开发提供服务调用等。今天,我们就来详细了解一下高德路径规划API的功能和使用方法。
|一、功能介绍
高德路径规划api实际包含两个版本,分别是路径规划和路径规划2.0,官方对路径规划和路径规划2.0的介绍如下:
路径规划介绍
路径规划2.0介绍
二者的主要功能和区别如下:
功能 | 路径规划 | 路径规划2.0 |
步行路径规划 | 参数包括起点和终点,返回结果包括距离、时间、步行方案和道路类型等 | 参数包括起点、终点、线路条数、返回结果控制以及是否考虑室内道路等,返回结果包括距离、路线分段、时间及费用成本、导航动作指令等 |
公交路径规划 | 参数包括起点、终点、换乘策略、是否考虑夜班车、日期、时间等,返回结果包括距离、费用和换乘方案等 | 参数包括起点、终点、换乘策略、方案条数、地铁出入口数量、是否考虑夜班车、日期、时间以及结果控制等,可以返回所需时间及费用成本、分段耗时、导航动作指令和道路类型等 |
驾车路径规划 | 参数包括起点、终点、驾车策略、途经点、避让区域、车牌信息、车辆类型、是否使用轮渡以及返回结果控制参数,返回结果包括费用、换乘方案、导航策略、距离、时间、红绿灯个数、导航信息等 | 参数包括起点、终点、驾车策略、途经点、避让区域、车牌信息、车辆类型、是否使用轮渡以及返回结果控制参数,返回结果包括费用、距离、路线分段、时间及费用成本、分段路况、导航动作指令和途径城市等 |
骑行路径规划 | 参数包括起点和终点,返回结果包括距离、时间、骑行结果和骑行动作等 | 参数包括起点、终点、方案条数、是否考虑室内道路以及结果控制等,可以返回所需时间及费用成本、分段耗时、导航动作指令和道路类型等 |
距离测量 | 参数包括起点、终点、路径计算方式,返回结果包括距离和时间 | 无 |
电动车路线规划 | 无 | 参数包括起点、终点、方案条数以及结果控制等,可以返回所需时间及费用成本、分段耗时、导航动作指令和道路类型等 |
需要注意的是,高德对不同类型开发者的调用配额和并发数有限制,个人认证开发者,每天的配额仅有5000,且并发数上限为3次/秒,如果想要提高配额或者提升并发数需要另外购买或者成为企业认证开发者。
|二、应用领域
路径规划API在很多领域都有应用,大致可以分为两个版块,一是科学研究,二是应用开发。
-
路径规划API在应用开发领域的应用很好理解,比如现在有一个web页面需要提供导航和路线推荐功能,那么可以直接调用高德路径规划API,并在页面中展示路线和其他信息;又比如需要在应用中帮用户评估到达目的地大概的时间和费用时,也可以直接调用路径规划API。
-
路径规划API在科学研究领域的应用一般涉及以下研究方向:
-
可达性研究
-
生活圈研究
-
设施服务范围
-
等时圈研究
-
可步行性研究
以设施服务范围为例,将研究区划分为网格,通过遍历设施中心点到周边网格所需的时间或距离,最终确定设施的服务范围,通过路径规划确定的服务范围相比传统以设施中心为圆心,距离阈值为半径确定的服务范围更具实际意义。
设施服务范围分析,图片来源:雪球
此外,由于步行路径规划返回的结果中包含道路类型,比如阶梯、斜坡和天桥等,因此路径规划API在可步行性研究中也可以发挥一定的作用,通过引入道路类型,可以对可步行性进行更细致的探讨。
步行路径规划涉及的道路类型
|三、使用路径规划API
那么如何使用路径规划API呢?
可以分为四步,分别是注册开发者平台、创建key、调用服务、数据解析。
-
注册开发者平台:
高德开放平台官网:https://lbs.amap.com/
-
进入“高德开放平台官方网站”后,点击右上角“注册”按钮。
-
注册成为高德开发者,填写手机号并验证手机号(企业用户请使用企业公用手机号),设置密码。
-
选择认证方式,可以选择成为“个人认证开发者”或者“企业认证开发者”。选择成为个人认证开发者可以直接通过支付宝扫码认证。
-
创建key:
-
点击开放平台右上角“控制台”进入控制台
-
进入“控制台—应用管理—我的应用”创建新应用。
-
点击“我的应用—添加Key”,在服务平台选择对应的服务类型,路径规划服务在“Web服务”里面,填写信息并提交。
-
调用服务(以步行路径规划为例)
步行路径规划URL:
https://restapi.amap.com/v3/direction/walking?parameters
此处parameters代表请求需要添加的参数,对于步行路径规划,其参数有Key、出发点(origin)、目的地(destination)等。
请求参数说明
通过将参数拼接到URL中,便得到了一个完整的请求地址:
https://restapi.amap.com/v3/direction/walking?origin=116.434307,39.90909&destination=116.434446,39.90816&key=你创建的Key
试着请求便会得到如下结果:
{
"status" :"1",
"info" :"ok",
"infocode" :"10000",
"count" :"1",
"route" :{
"origin" :"116.481028,39.989643",
"destination" :"116.434446,39.90816",
"paths" :[
"0" :{
"distance" :"11068",
"duration" :"8854",
"steps" :[
"0" :{
"instruction" :"向南步行16米左转",
"orientation" :"南",
"road" :[ ],
"distance" :"16",
"duration" :"13",
"polyline" :"116.480885,39.989371;116.480907,39.989353;116.48089,39.989227",
"action" :"左转",
"assistant_action" :[ ],
"walk_type" :"0"
},
"1" :{
"instruction" :"步行292米右转",
"orientation" :[ ],
"road" :[ ],
"distance" :"292",
"duration" :"234",
"polyline" :"116.480885,39.989223;116.480933,39.989201;116.480933,39.989201;116.480955,39.989184;116.481155,39.989058;116.481155,39.989058;116.481428,39.98888;116.481428,39.98888;116.481489,39.988841;116.481489,39.988841;116.482574,39.988125;116.48322,39.987665;116.48322,39.987665;116.48332,39.987565;116.48332,39.987565;116.48342,39.987435",
"action" :"右转",
"assistant_action" :[ ],
"walk_type" :"0"
}
]
}
]
}
}
-
数据解析
请求得到的数据格式一般是json或者xml,返回结果可以通过在请求中添加output参数进行控制。
请求的结果中包含了返回状态(status)、返回状态信息(info)、返回结果总数(count)和线路信息列表(route)等。
route中包含了起点(origin)、终点(destination)以及步行方案(paths)。
paths就包含了一般研究所需的步行时间(duration)和步行距离(distance)。如果数据量小可以直接复制取得数据,如果数据量大则需要编写代码进行批处理,此处给出一个简单的示例,展示如何通过代码进行批量请求和数据处理。
#导入requests,用于请求url
import requests
#导入ElementTree,通过ElementTree可以将返回的xml格式数据格式化为树状结构,方便提取数据
import xml.etree.ElementTree as ET
#定义函数,参数为url
def getinformation(url):
#请求url
responce = requests.get(url)
#获取返回内容
str = responce.content
#转成element tree
root = ET.fromstring(str)
#对返回的结果进行处理,获取最小耗时以及对应
#准备两个空的list,方便存放数据
duration = []
distance = []
#获取返回状态,root[0].text代表提取根节点下面的第0个子节点的文字信息
status = int(root[0].text)
#状态判断,如果为0则调用失败
if status == 0:
return ['调用失败','调用失败']
else:
count = int(root[3].text)
for i in range(count):
#提取duration的数据
time = int(root[4][2][i][1].text)
#提取distance的数据
long = int(root[4][2][i][0].text)
#添加进list
duration.append(time)
distance.append(long)
#返回数据
return [duration,distance]
import time
import pandas as pd
#读文件,该文件保存了起点和终点的经纬度信息,坐标系为高德的gcj02坐标系
file = pd.read_csv("F:\\python文件集\\你的文件.csv",encoding="utf-8")
#根据文件组装url并请求处理
key = '你的key'
mindur = []
dis = []
for i in range(0,len(file)):
#设置暂停1秒,个人认证开发者并发数低,不设置暂停容易超出并发数导致请求失败
time.sleep(1)
#拼接起点
origin = str(file['o_lon'][i]) + ',' + str(file['o_lat'][i])
#拼接终点
destination = str(file['d_lon'][i]) + ',' + str(file['d_lat'][i])
#拼接url 步行
url = 'https://restapi.amap.com/v3/direction/walking?origin='+ origin +'&destination='+ destination +'&key=' + key +'&output=XML'
#请求刚才定义的函数
mindur_dis = getinformation(url)
mindur.append(mindur_dis[0])
dis.append(mindur_dis[1])
#将提取出来的数据添加到原来的DataFrame中
file['minduration'],file['distance'] = [mindur,dis]
#保存成文件
file.to_csv('F:\\python文件集\\你的文件.csv', encoding='utf-8')
实际上,请求返回的结果不仅有duration和distance,还包括了每个分段的信息,比如分段距离、分段步行时间、道路名称、方向以及分段坐标点等,这些信息可以通过处理保存成空间数据,此处挖个坑,后面详细聊。
至此一个完整的关于路径规划API的介绍就结束了,下期为大家分享如何将json转换为Geojson以及如何将分段信息存成空间数据。
欢迎关注微信公众号:小白鸽gis