百度地图开发(五)之公交信息检索 + 路线规划

转载请注明出处:

在上一篇blog中介绍过POI检索的使用,本篇blog主要介绍公交信息检索和线路规划的内容。

公交信息检索

实际上,公交信息检索与POI检索、在线建议检索非常相似,也是把你需要检索的信息发送给百度地图服务器,然后解析得到的结果。

一般步骤:

1. 设置检索参数

2. 添加检索结果监听器

3. 发起检索

4. 解析返回结果

打开程序包com.baidu.mapapi.search.busline

在BusLineSearchOption这个类中,我们看到一个参数是城市,另一个是公家路线uid。

一开始,我以为第二个参数是公交线号,代码编写完毕去查询的时候,总是出错。后来仔细查看了api之后,发现不是公交线号,而是uid。uid我们在之前poi检索的时候,曾经见到过,它实际上即是一个id,是i一个唯一标识。

所以注意:公交信息检索设置查询参数时,第二个参数是uid。

所以进行公交信息检索之前,需要先进行POI检索。使用searchInCity()方法在每一个城市内查询公交路线号:

city = cityEt.getText().toString();busline = buslineEt.getText().toString();poiSearch.searchInCity((new PoiCitySearchOption()).city(city).keyword(busline)); 得到poi检索的结果时,在PoiResult类中有通过getAllPoi()获取poi检索结果。@Overridepublic void onGetPoiResult(PoiResult poiResult) {if (poiResult == null|| poiResult.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {// 没有找到检索结果Toast.makeText(BusLineSearchActivity.this, "未找到结果",Toast.LENGTH_LONG).show();return;}if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) {// 检索结果正常返回// 得到检索结果}} 此时如果直接取出PoiInfo中的uid的话,你会发现很多个。但是,我们都知道,一个公交线号最多有两个线路(正向和反向)。所以我们需要筛选出是公交路线的uid。

在PoiInfo类中有个type字段:0:普通点、1:、公交站 2:、 公交路线 3:、地铁站 4:地铁线路

if (poi.type == PoiInfo.POITYPE.BUS_LINE|| poi.type == PoiInfo.POITYPE.SUBWAY_LINE) {buslineIdList.add(poi.uid);} 通过判断type,将正确的uid添加到一个list中。 得到了uid,就可以结合城市参数,进行公交线路检索了。private void searchBusline() {if (buslineIndex >= buslineIdList.size()) {buslineIndex = 0;}if (buslineIndex >= 0 && buslineIndex < buslineIdList.size()&& buslineIdList.size() > 0) {boolean flag = busLineSearch.searchBusLine((new BusLineSearchOption().city(city).uid(buslineIdList.get(buslineIndex))));if (flag) {Toast.makeText(BusLineSearchActivity.this, "检索成功~", 1000).show();} else {Toast.makeText(BusLineSearchActivity.this, "检索失败~", 1000).show();}buslineIndex++;}}/** * 公交信息查询结果监听器 */OnGetBusLineSearchResultListener busLineSearchResultListener = new OnGetBusLineSearchResultListener() {@Overridepublic void onGetBusLineResult(BusLineResult busLineResult) {if (busLineResult.error != SearchResult.ERRORNO.NO_ERROR) {Toast.makeText(BusLineSearchActivity.this, "抱歉,未找到结果",Toast.LENGTH_SHORT).show();} else {bdMap.clear();BusLineOverlay overlay = new MyBuslineOverlay(bdMap);// 用于显示一条公交详情结果的Overlayoverlay.setData(busLineResult);overlay.addToMap();// 将overlay添加到地图上overlay.zoomToSpan();// 缩放地图,,使所有overlay都在合适的视野范围内bdMap.setOnMarkerClickListener(overlay);// 公交线路名称Toast.makeText(BusLineSearchActivity.this,busLineResult.getBusLineName(), Toast.LENGTH_SHORT).show();}}};

BusLineResult用来存储查询得到的结果,它又两个内部类和几个普通函数:

我们可以通过这两个内部类,得到自己想要的信息,这里就不在代码里写了。

我们依旧通过使用overlayutil包下的相关类(BusLineOverlay)添加覆盖物到地图上。

class MyBuslineOverlay extends BusLineOverlay {public MyBuslineOverlay(BaiduMap arg0) {super(arg0);}/** * 站点点击事件 */@Overridepublic boolean onBusStationClick(int arg0) {MarkerOptions options = (MarkerOptions) getOverlayOptions().get(arg0);bdMap.animateMapStatus(MapStatusUpdateFactory.newLatLng(options.getPosition()));return true;}}

路线规划 路线规划分为三种:驾车、换成(公交)、步行。而路线规划又与之前的各种检索相似。

路线规划先关类都在此包结构下。

我将这个包下面的类做了一下标注,这样就很清楚了,三种路线规划方式就相当于一个poi检索,只有参数设置的时候需要注意下。

关于爱情的句子:情不知所起,一往而情深。

百度地图开发(五)之公交信息检索 + 路线规划

相关文章:

你感兴趣的文章:

标签云: