Android高德之旅(13)公交搜索

廢話

在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é)果中包含兩條公交線路。再打印一下,哦,原來是往返的兩條。

BusLine查詢結(jié)果.png

下面要做的很簡(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é)目就到這里,感謝大家收看,我們下期再見~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 【 申請(qǐng)密鑰AndroidSDK:應(yīng)用程序包名+數(shù)字簽名 As查看數(shù)字簽名:cmd-----cd .android...
    征程_Journey閱讀 2,471評(píng)論 0 5
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,425評(píng)論 6 13
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,728評(píng)論 18 399
  • 廢話 前后兩千萬,拍照更清晰。大家好,這里是OPPO R11獨(dú)家冠名贊助播出的大型情感類電視連續(xù)劇《Android...
    大公爵閱讀 3,388評(píng)論 1 2
  • 轉(zhuǎn)眼間還有二十幾天就要高考了,想一想自己高考也要一周年了,回想自己那年今日又在做什么呢? 還記得那時(shí)候,抬頭桌...
    我期待的太空旅行閱讀 262評(píng)論 0 0

友情鏈接更多精彩內(nèi)容