開發者教程之資料檢索服務系列 | 第一期:資料檢索在網約車行業的應用
為滿足開發者多樣性的地圖服務使用需求,百度地圖開放平臺對外開放了多類地圖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時觸發。