为满足开发者多样性的地图服务使用需求,百度地图开放平台对外开放了多类地图API服务。在众多的地图API服务中,和地理数据检索相关的服务是开发者使用次数最多,同时也是应用范围最广的服务,以此为代表的有地点检索服务、逆地理编码服务等。为了方便广大开发者快速接入服务,满足业务需求,今天我们就结合网约车行业相关应用场景,介绍如何接入百度地图相关数据检索类Web API服务。同时针对该行业,我们也支持SDK形式的服务调用方式,来满足开发者的场景功能。
01
注册地图开发者,获取服务秘钥
登录百度账号,进入百度地图开放平台控制台
地址:http://lbsyun.baidu.com/apiconsole/key
成为地图开发者后,需要根据实际使用,创建「服务端」、「移动端」、「浏览器端」APP Key(简称AK)。本文中,我们以「服务端」AK为例。
-
填写应用名称,应用类别选择「服务端」,启动服务默认开启全部;
-
请求校验方式分「IP白名单校验」和「SN校验」,顾名思义,如果设置了IP白名单,则只有白名单中的IP才能访问服务;
-
SN校验相对复杂,具体可查看相应介绍文档 SN校验(详情可复制该链接查看http://lbsyun.baidu.com/index.php?title=lbscloud/api/appendix);
-
点击页面下方「提交」,即可成功创建AK。
至此,服务正式使用前,在百度地图开放平台的必要准备已完成,接下来开始介绍如何调用服务。
在这里我们模拟一个场景,一个网约车应用,如何结合地图数据检索API相关服务,满足核心场景「用户打车」的相关需求。
02
「推荐上车点」,更合适的上车位置推荐
用户当前位于「北京体育大学」内,准备打车前往「清华大学」——
直接将用户当前位置作为打车起点,很可能由于坐标位于大学内部,导致司机导航规划复杂或错误,网约车用户一般会结合「推荐上车点服务」,让用户选择合适的上车位置。我们以「北京体育大学」为例,假设用户当前位置坐标为:
116.321054,40.032039(bd09ll),需要通过推荐上车点,为用户推荐合适的上车位置。
服务文档:http://lbsyun.baidu.com/index.php?title=webapi/parking-api
请求示例:
http://api.map.baidu.com/parking/search?ak=你的ak&location=116.321054,40.032039&coordtype=bd09ll
请求结果:
{
"status": 0,
"message": "OK",
"recommendStops": [
{
"name": "信息路/农大南路路口",
"address": "",
"distance": 795,
"bd09ll_x": 116.32017012757473,
"bd09ll_y": 40.03218144373815,
"gcj02ll_x": 116.31365320875128,
"gcj02ll_y": 40.02625015658436
}
]
}
即表示,在用户当前位置附近,有一个推荐上车地点,网约车应用可通过选点吸附等交互方式,引导用户将上车起点设置为推荐上车点,以便司机能顺利接到乘客。
初始位置:
推荐位置:
03
设置乘车终点
终点的选择一般是结合地图检索服务,对于相对较大的地点,同样存在位置选择不当(比如大型地点的内部),导致路线规划异常,影响用户乘车体验等。
用户检索目的地后,再结合推荐上车点让用户选择,路径较长,用户的操作成本较高,这里还有更简单的方式,即使用POI检索时的子点对用户进行推荐。
这里我们以地点输入提示服务为例。
服务文档:http://lbsyun.baidu.com/index.php?title=webapi/place-suggestion-api
请求示例:
http://api.map.baidu.com/place/v2/suggestion?query=清华大学®ion=北京&output=json&ak=你的AK
发起一个「清华大学」检索请求。
返回结果:
{
"name": "清华大学",
"location": {
"lat": 40.009627,
"lng": 116.333369
},
"uid": "d8cf2f3ebd4968cfd618b7a7",
"province": "北京市",
"city": "北京市",
"district": "海淀区",
"business": "",
"cityid": "131",
"tag": "高校",
"address": "北京市-海淀区-双清路30号",
"children": [
{
"uid": "c535939af3d1d980d8eced28",
"name": "清华大学-东门 北京市海淀区",
"show_name": "东门"
},
{
"uid": "3f826ed31d0e9046d0f49ead",
"name": "清华大学-西门 北京市海淀区",
"show_name": "西门"
},
{
"uid": "cd9d05ddf866ffb684420eab",
"name": "清华大学-东北门 北京市海淀区",
"show_name": "东北门"
},
{
"uid": "6ed3083a41cee9b72a3a9fad",
"name": "清华大学-南门 北京市海淀区",
"show_name": "南门"
},
{
"uid": "e3e2cd9d83e4b8e3c6f50dab",
"name": "清华大学-西北门 北京市海淀区",
"show_name": "西北门"
},
{
"uid": "39d43f8278e7cd86a9059dad",
"name": "清华大学-西南门 北京市海淀区",
"show_name": "西南门"
}
]
}
在children字段中,召回了清华大学的子点POI,同时这些子点POI也是适合进行路线规划的。在APP中,我们可以将检索到的子点信息同时展示给用户,让用户选择,下图以百度地图APP为例:
返回结果中的「show_name」是子点的简称,方便用户展示。细心的用户可能会发现地点输入提示的子点返回结果中没有坐标信息,那么如何实现用户点击地点,获取对应子点坐标以用于展示呢?其实很简单,结合地点详情检索功能即可。
04
「地点详情检索」,获取POI坐标信息
取上一步获取到的子点POI,每一个POI有对应的UID,这个字段是POI的唯一标识,通过UID可检索到对应的POI的坐标。
服务文档:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi
请求示例:
http://api.map.baidu.com/place/v2/detail?uid=你的AK
返回结果:
{
"status": 0,
"message": "ok",
"result": {
"name": "清华大学-东门",
"location": {
"lng": 116.33924402813,
"lat": 40.002402058081
},
"address": "北京市海淀区中关村东路",
"province": "北京市",
"city": "北京市",
"area": "海淀区",
"detail": 1,
"uid": "c535939af3d1d980d8eced28",
"street_id": "c535939af3d1d980d8eced28"
}
}
通过清华大学-东门的UID,即可检索到其对应坐标,该请求可在用户点击某一子点POI时触发。