百度地圖提供了穩定高速的地圖服務。但是,由於百度地圖Team Dev尚處於成長期,沒能給廣大二次開發人員提供足夠豐富的API介面,當開發人員需要實現特定功能的時候,百度地圖提供的API往往捉襟見肘。
我希望實現這樣一個功能:在地圖任意位置點擊滑鼠,即可獲得所有可以直達該處的公交線路。例如,黑點為滑鼠點擊處,則系統自動列出可以直達到該處的公交線路(藍線)。
百度地圖API中LocalSearch
TransitRoute等相關函數都不能直接滿足上述需求,並且百度地圖API中並沒有直接查詢大眾運輸路線的介面。百度API唯一提供的相似介面為:使用者給出起始、終點座標(經緯度、名稱等均可),系統返回兩點間的公交方案。
為了實現上述功能,通過調研我們發現,ABCMap.com提供了完整的公交查詢方案。不過個人擔心ABCMap.com如果沒有CDN,那麼在部分地區訪問速度可能存在問題,影響使用者體驗。百度訪問速度雖好,但是又不提供相應API介面。能不能把二者結合起來呢?這便是本文的思路。
(1)利用ABCMap.com提供的介面獲得全城大眾運輸路線,儲存到本機資料庫。個人感覺,這一招有點陰。。。
(2)在百度地圖上尋找滑鼠點擊點附近的全部公交站。這裡,可以把“附近”定義為滑鼠點擊點周圍500m以內範圍(參數可調)。
(3)利用百度地圖提供的API介面在百度地圖上尋找公交線路。對從(2)中獲得的公交站target_station進行如下操作:
- 在資料庫中查詢包含該公交站的全部線路,得到這些線路的終點站terminal_station。
- 利用百度地圖API,調用search_bus_routing(target_station, terminal_station)得到target_station到terminal_station之間公交線路
- 將2中獲得的公交線路繪製於百度地圖上
剩下的問題是,在(2)中,如何尋找附近的公交站?這裡我能想到的還是陰招:
- 在(1)中已經得到了全部的公交網站名稱,可以在百度地圖上逐個查詢這些網站的座標值,儲存到資料庫中。
- 計算任意點附近的公交站時,只需要計算該點與資料庫中儲存的所有公交網站之間的距離,選出“附近”的若干個即可。
至此,全部搞定。