廢話
在LBS系統(tǒng)中怎能少了公交這個(gè)角色,大多數(shù)城市中,主要的公共交通工具還是公交車,高德地圖當(dāng)然會(huì)有相應(yīng)的api來查詢公交信息,這篇文章就來記錄下公交信息查詢。
1、公交站臺(tái)查詢
根據(jù)公交站名和所在城市,查詢公交站臺(tái),依據(jù)模糊匹配,先看代碼:
public void searchBusStation(View view) {
BusStationQuery busStationQuery = new BusStationQuery("望京站", "010");
busStationSearch = new BusStationSearch(this, busStationQuery);
busStationSearch.setOnBusStationSearchListener(
new BusStationSearch.OnBusStationSearchListener() {
@Override
public void onBusStationSearched(BusStationResult busStationResult, int i) {
}
});
busStationSearch.searchBusStationAsyn();
}
在構(gòu)建BusStationQuery對(duì)象時(shí)傳了兩個(gè)參數(shù),第一個(gè)是站臺(tái)名,可以傳具體的,比如“望京站”,也可以傳簡(jiǎn)略的“望京”,第二個(gè)參數(shù)傳城市編號(hào),我怎么知道每一個(gè)城市的編號(hào)呢?
http://lbs.amap.com/api/android-sdk/download 這里有所有你可以下載的。
查詢結(jié)果通過onBusStationSearched(BusStationResult busStationResult, int i)接口返回,老套路,我們用Marker的方式,把查詢到的公交站點(diǎn)顯示在地圖中。

2、公交線路查詢
這種查詢方式是根據(jù)一個(gè)公交線路號(hào)碼,查詢?cè)摼€路經(jīng)過哪些站,始發(fā)和末班的時(shí)間等。啥也不說了,上代碼。
public void searchBusLine(View view) {
BusLineQuery busLineQuery = new BusLineQuery("854", BusLineQuery.SearchType.BY_LINE_NAME, "010");
busLineQuery.setPageSize(20);
busLineQuery.setPageNumber(0);
busLineSearch = new BusLineSearch(this,busLineQuery);
busLineSearch.setOnBusLineSearchListener(new BusLineSearch.OnBusLineSearchListener() {
@Override
public void onBusLineSearched(BusLineResult busLineResult, int i) {
// 結(jié)果中包含往返兩條線路
List<BusLineItem> busLines = busLineResult.getBusLines();
}
});
busLineSearch.searchBusLineAsyn();
}
BusLineQuery的構(gòu)造方法傳了三個(gè)參數(shù),第一個(gè)是公交線路,第二個(gè)查詢類型BusLineQuery.SearchType.BY_LINE_NAME:依據(jù)線路名查詢,第三個(gè)是城市編號(hào)。因?yàn)檫@個(gè)查詢結(jié)果可能很多,所以要分頁。查詢結(jié)果通過onBusLineSearched(BusLineResult busLineResult, int i)返回。
但是,這里打印一下返回結(jié)果你會(huì)發(fā)現(xiàn),結(jié)果中包含兩條公交線路。再打印一下,哦,原來是往返的兩條。

下面要做的很簡(jiǎn)單啦,把查詢結(jié)果在地圖上顯示出來,站臺(tái)我們用Marker的方式顯示,線路我們用折現(xiàn)的方式畫出來。
@Override
public void onBusLineSearched(BusLineResult busLineResult, int i) {
// 結(jié)果中包含往返兩條線路
List<BusLineItem> busLines = busLineResult.getBusLines();
List<MultiPointItem> list = new ArrayList<>();
List<LatLng> latlngList = new ArrayList<>();
List<BusStationItem> busStations = busLines.get(0).getBusStations();
for (BusStationItem station : busStations) {
LatLonPoint point = station.getLatLonPoint();
LatLng latLng = new LatLng(point.getLatitude(), point.getLongitude());
latlngList.add(latLng);
list.add(new MultiPointItem(latLng));
}
showLineOnMap(latlngList); // 顯示Line
showResultOnMap(list); // 顯示Marker
}
// 顯示Line
private void showLineOnMap(List<LatLng> list) {
polyline = aMap.addPolyline((new PolylineOptions())
.addAll(list)
.width(8)
.setDottedLine(false)
.color(Color.RED));
}
// 顯示Marker
private void showMarkerOnMap(List<MultiPointItem> list) {
MultiPointOverlayOptions overlayOptions = new MultiPointOverlayOptions();
overlayOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_blue_dot));
overlayOptions.anchor(0.5f,0.5f);
multiPointOverlay = aMap.addMultiPointOverlay(overlayOptions);
multiPointOverlay.setItems(list);
AMap.OnMultiPointClickListener multiPointClickListener = new AMap.OnMultiPointClickListener() {
@Override
public boolean onPointClick(MultiPointItem pointItem) {
Log.e("TAG", "pointItem=" + pointItem.getLatLng());
return true;
}
};
aMap.setOnMultiPointClickListener(multiPointClickListener);
}

3、公交線路ID查詢
有過前面的經(jīng)歷,這次我絲毫不慌,這里的ID查詢就是前面查詢出來的公交線路ID,比如上面的回調(diào):
@Override
public void onBusLineSearched(BusLineResult busLineResult, int i) {
// 結(jié)果中包含往返兩條線路
List<BusLineItem> busLines = busLineResult.getBusLines();
String id_1 = busLines.get(0).getBusLineId();
String id_2 = busLines.get(1).getBusLineId();
}
每一個(gè)BusLineItem都有一個(gè)Id,用戶偏好的線路我們可以保存它的ID,將來直接用ID查詢公交線路,方法和前面一樣,只是換下參數(shù),第一個(gè)參數(shù)傳ID,第二個(gè)參數(shù)傳SearchType.BY_LINE_ID即可。
busLineQuery = new BusLineQuery(公交線路ID, SearchType.BY_LINE_ID, cityCode);
busLineQuery.setPageSize(10);
busLineQuery.setPageNumber(currentpage);
BusLineSearch busLineSearch = new BusLineSearch(this,busLineQuery);
busLineSearch.setOnBusLineSearchListener(this);
busLineSearch.searchBusLineAsyn();
總結(jié)
完美,公交查詢就是這么簡(jiǎn)單,恭喜男女嘉賓獲得了由娃哈哈營養(yǎng)快線提供的愛情海甜蜜之旅,本期節(jié)目就到這里,感謝大家收看,我們下期再見~