百度地圖開發-在地圖上檢索數據 08

上一篇簡單介紹了與地圖的交互功能,可以實現在地圖上標記點,繪製線,添加資訊框等功能。對於一些不常使用的功能點,可通過查看官方文檔進行了解,這裡不做過於詳細的說明。

檢索地圖數據

今天這篇推文主要說說其餘幾個比較常用的功能,比如POI檢索(查找目標物,美食,風景等)、地點輸入提示檢索(關鍵字搜索提示)、公交資訊查詢。官網羅列的其餘功能目前不是很常見,這裡不做說明,需要的話可以閱讀官方文檔。

POI檢索

POI即興趣點。在地理資訊系統中,可以理解為一棟房子,一個景點,一個公交站等。那麼我們的POI檢索說白了就是檢索目標物,比如搜索我的房子,周邊的餐館,景點等。

百度地圖SDK提供三種類型的POI檢索:城市內檢索,周邊檢索和區域檢索。這裡簡單說下關鍵字檢索。

比如在天津市查詢小吃

  //POI搜索
  mPoiSearch=PoiSearch.newInstance();
  mPoiSearch.setOnGetPoiSearchResultListener(listener);
  
  //進行POI檢索
  mPoiSearch.searchInCity(new PoiCitySearchOption()
      .city("天津市")
      .keyword("美食")
      .pageNum(0));
    /**
     * POI監聽器
     * */
    OnGetPoiSearchResultListener listener = new OnGetPoiSearchResultListener() {
        /**
         * 返回監聽得到的檢索值
         * 並將其標記出來
         * */
        @Override
        public void onGetPoiResult(PoiResult poiResult) {
            List<PoiInfo> list=poiResult.getAllPoi();
            if (list!=null){
                for (int i=0;i<list.size();i++){
                     PoiInfo info=list.get(i);
                    LatLng point=new LatLng(info.getLocation().latitude,info.getLocation().longitude);

                    //構建Marker圖標
                    BitmapDescriptor bitmap = BitmapDescriptorFactory
                            .fromResource(R.drawable.location);
                    OverlayOptions option = new MarkerOptions()
                            .position(point)
                            .icon(bitmap);
                    mBaiduMap.addOverlay(option);
                }
            }
        }

        @Override
        public void onGetPoiDetailResult(PoiDetailSearchResult poiDetailSearchResult) {

        }
        @Override
        public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {

        }
        //廢棄
        @Override
        public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {

        }
    };

標記的天津美食

上面通過簡單的程式碼邏輯,就能拿到天津市的美食地點。這裡我將獲取到的美食地點在地圖上面標記出來,其實百度SDK在得到美食地點時可以設置的參數特別多,我們可以根據自己的業務邏輯來進行相對應的展示。

地點輸入提示檢索

地點檢索輸入提示服務也被叫做POI熱詞建議檢索,在線建議檢索簡稱Sug檢索,是指根據關鍵詞查詢在線建議詞。就是查詢時百度SDK根據你輸入的關鍵字進行推薦提示,可以幫助你快速尋找到你的目的地。下面我們可以簡單看下,如何去實現這個功能。

        //Sug檢索
        mSuggestionSearch=SuggestionSearch.newInstance();
        mSuggestionSearch.setOnGetSuggestionResultListener(suggesttionlistener);

        //Sug檢索    天津的好利來  只搜索好
        mSuggestionSearch.requestSuggestion(new SuggestionSearchOption().city("天津市").keyword("好"));
    /**
     * Sug監聽器
     * */
    OnGetSuggestionResultListener suggesttionlistener = new OnGetSuggestionResultListener() {
        @Override
        public void onGetSuggestionResult(SuggestionResult suggestionResult) {
            //處理sug檢索結果
            List<SuggestionResult.SuggestionInfo> info=suggestionResult.getAllSuggestions();
            if (null!=info){
                for (int i=0;i<info.size();i++){
                    Log.d("Tag",""+info.get(i).getKey());
                }
            }
        }
    };

列印出的關於好的推薦資訊

這裡我沒有在介面上做下拉適配器顯示,就直接通過獲取天津市 好 把獲取到的資訊列印到Log中。我們可以看到百度SDK推薦了一些關於好的店鋪。

在實際的項目中,我們可以根據用戶輸入的內容,及時在下拉的是列表中將獲取到的提示目標地址顯示出來,可以推薦給用戶,方便其快速定位到他想去的位置。

公交資訊查詢

這塊在實際的業務需求中還是很常見的,開發者可以通過POI檢索獲取公交類型的POI資訊,根據POI對應的UID請求BusLineSearch檢索詳細的公交路線資訊等。

目前根據官方給的教程操作,沒有明確說調用開源的BusLineOverlay程式碼,只能通過官方給的DEMO來找,主要找這個路線下的這兩個文件即可。

BaiduMap_AndroidSDK_v7.3.0_Simple\BaiduMapsApiASDemo\app\src\main\java\com\baidu\mapapi\overlayutil

OverlayManager.java和BusLineOverlay.java,添加到自己的項目中就可以使用。

獲取公交的路線,需要兩個步驟。

第一、先POI檢索獲取公交路線UID。

        //公交路線檢索
        mPoiSearch.searchInCity(new PoiCitySearchOption().city("北京").keyword("963").scope(2));
        mBusLineSearch=BusLineSearch.newInstance();

        overlay= new BusLineOverlay(mBaiduMap);
  /**
   * 返回監聽得到的檢索值
   * 並將其標記出來
   * */
  @Override
  public void onGetPoiResult(PoiResult poiResult) {
      if (poiResult==null||poiResult.error!= SearchResult.ERRORNO.NO_ERROR)
          return;
      for (PoiInfo poi:poiResult.getAllPoi()){
          if (poi.type == PoiInfo.POITYPE.BUS_LINE ||poi.type == PoiInfo.POITYPE.SUBWAY_LINE) {
              //獲取該條公交路線POI的UID
              busLineId = poi.uid;
              break;
          }
      }
  }

第二、根據UID的值來獲取SDK中的公交路線資訊,使用BusLineOverlay將其顯示在地圖上。

    //北京市公交查詢
    mBusLineSearch.searchBusLine(new BusLineSearchOption()
            .city("北京")
            .uid(busLineId));
    /**
     * 繪製公交路線的監聽器
     * */
    OnGetBusLineSearchResultListener buslineListener=new OnGetBusLineSearchResultListener() {
        @Override
        public void onGetBusLineResult(BusLineResult busLineResult) {
            if (busLineResult == null || busLineResult.error != SearchResult.ERRORNO.NO_ERROR) {
                return;
            }

            overlay.setData(busLineResult);
            overlay.addToMap();
            overlay.zoomToSpan();
        }
    };

顯示的公交路線

這樣就簡單實現了公交資訊的展示,我們可以根據自己的業務進行擴展,很方便。這裡官方教程沒有很明確的指示出程式碼,此時你就需要去參考DEMO來實現,有時候還需要在百度找找看,是不是別人也遇到過同樣的問題,是否寫了部落格,你也可以參考參考進行學習。

小寄語

人生短暫,我不想去追求自己看不見的,我只想抓住我能看的見的。

原創不易,給個關注。

我是阿輝,感謝您的閱讀,如果對你有幫助,麻煩點贊、轉發 謝謝。