您的位置:首页 > 其它

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

2015-04-04 16:05 141 查看
简述

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

遇到的困难

因为想偷懒,所有就直接去百度其他人是否有现成的做法。翻了很久,只看到零星的说在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<PoiInfo> info = result.getAllPoi();
for(PoiInfo poiInfo: info){

if(poiInfo.type == POITYPE.BUS_STATION){
String[] lineArray = poiInfo.address.split(";");
for(int i =0;i<lineArray.length;i++){
arrayListLine.add(lineArray[i]);
}
Intent intent = new Intent(getActivity().getBaseContext(),LineListActivity.class);
intent.putExtra("stationLine", arrayListLine);
intent.putExtra("stationName", poiInfo.name);
startActivity(intent);
return;
}


很简单吧

结论:对获得的PoiInfo.type 类型比较,如果是 POITYPE.BUS_STATION

String[] lineArray = poiInfo.address.split(“;”);

这个数组里就是所有的公交车线路了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐