获得经过一个站点的所有公交线路-百万公交

简述
这个需求其实就是输入站点名称,经过该站点的所有公交线路。有的地方公交牌上线路可能不全,更换不及时,有这个功能就可以确定是否在这里等车。

遇到的困难
因为想偷懒,所有就直接去百度其他人是否有现成的做法。翻了很久,只看到零星的说在JavaScript上有这个方法,可以 获得所有线路。怎样都不死心,看到其他人在贴吧也提过问题,没有解决。在百度LBS论坛上发帖子问,版主回答我说没有。这个版主误导了我,不过他一个人回复论坛所有人的提问也是非常的辛苦。

如何解决?
当时的情况是,认为Android没有接口可以得到通过一个站点的所有线路。不过看到百度公交上是有这个功能的,确定自己也能够做出来这个功能。想了两种方式

  • 通过在项目里加入网页,代码和网页中的JavaScript交互,得到结果
  • 在自己的服务器上面添加方法,对百度LBS查询,获得结果,返回给客户端

我选择的是第一种,后备的方式第二种,一样也可以学到很多东西。又折腾两天,这种资料的查询还是GOOGLE DOCS的最权威。这里遇到的最大的问题是,我将加载网页的WebView设置为Gone,但是Gone的情况下得不到webview的焦点,获得不了网页的JavaScript的内容。最后给WebView设置了1dp大小。的确是能够获得到线路了。不过这样并不好,因为加载网页也要时间,再获得内容,耗费的时间太长了。

更好的解决方法
翻LBS DOCS是时候,看到PoiInfo的所有字段。address,city,location,type等等。PoiInfo.POITYPE里有枚举,poi类型,0:普通点,1:公交站,2:公交线路,3:地铁站,4:地铁线路。 在JavaScript里明确说明,如果一个PoiInfo.POITYPE = BUS_STATION, address是所有经过这站点的车辆。

困惑我的地方
糟糕的是,LBS Android的DOCS里,很模糊的说 address(POI地址信息)。这是什么鬼东西。其实试一试就可以了。如果一个poi时公交站点,address也同样是经过这个站点的所有车辆。问题迎刃而解。

代码中的实现

List info = result.getAllPoi();
for(PoiInfo poiInfo: info){

if(poiInfo.type == POITYPE.BUS_STATION){
String[] lineArray = poiInfo.address.split(";");
for(int i =0;i

很简单吧

结论:对获得的PoiInfo.type 类型比较,如果是 POITYPE.BUS_STATION
String[] lineArray = poiInfo.address.split(“;”);
这个数组里就是所有的公交车线路了。

你可能感兴趣的:(百万公交)