百度地图提供了稳定高速的地图服务。但是,由于百度地图开发团队尚处于成长期,没能给广大二次开发者提供足够丰富的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)中已经得到了全部的公交站点名称,可以在百度地图上逐个查询这些站点的坐标值,存储到数据库中。
- 计算任意点附近的公交站时,只需要计算该点与数据库中存储的所有公交站点之间的距离,选出“附近”的若干个即可。
至此,全部搞定。
标签:公交,地图,接口,API,全城,station,公交站,百度,标注 From: https://blog.51cto.com/maray/6566235