百度地圖進階【POI資料檢索】,地圖進階poi檢索

來源:互聯網
上載者:User

百度地圖進階【POI資料檢索】,地圖進階poi檢索

前面學習百度地圖的一些基本的用法,這次我們一起來看一看百度地圖的檢索功能吧 

poi檢索api的基本用法

百度地圖的POI類中共有如下幾個方法

PoiBoundSearchOption POI範圍內檢索參數
PoiCitySearchOption poi城市內檢索參數
PoiDetailResult 詳情檢索結果
PoiDetailSearchOption poi 詳情檢索參數
PoiNearbySearchOption 附近檢索參數
PoiResult poi搜尋結果。
PoiSearch POI檢索介面

我們現在先看下PoiSearch中的內容

void destroy()釋放檢索對象
static PoiSearch newInstance()建立PoiSearch執行個體
boolean searchInBound(PoiBoundSearchOption option)範圍內檢索
boolean searchInCity(PoiCitySearchOption option)城市內檢索
boolean searchNearby(PoiNearbySearchOption option)周邊檢索
boolean searchPoiDetail(PoiDetailSearchOption option)POI 詳情檢索
void setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener listener)設定poi檢索監聽者
從api中我們不難看出,百度的poi檢索主要有範圍檢索(指定座標範圍)、城市檢索(指定某一城市)周邊檢索(根據自身位置周邊)和poi詳情檢索


2.指定座標範圍搜尋無論是什麼搜尋基本步驟都是不變的
<span style="color:#ff6666;"> // 第一步,建立POI檢索執行個體</span>    poiSearch = PoiSearch.newInstance();
 <span style="color:#ff6666;"> // 第二步,建立POI檢索監聽者;</span>  OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener() {    public void onGetPoiResult(PoiResult result) {      // 擷取POI檢索結果      if (result == null || result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {        Toast.makeText(POISearchMapActivity.this, "未找到結果", Toast.LENGTH_LONG).show();        return;      }      if (result.error == SearchResult.ERRORNO.NO_ERROR) {        List<PoiInfo> allPoi = result.getAllPoi();        totalpages = result.getTotalPageNum();        String[] datas = new String[10];        for (int i = 0; i < 10; i++) {          datas[i] = allPoi.get(i).name;        }        adapter = new ArrayAdapter<String>(POISearchMapActivity.this, android.R.layout.simple_list_item_1, datas);        listView.setAdapter(adapter);        return;      }      if (result.error == SearchResult.ERRORNO.AMBIGUOUS_KEYWORD) {        // 當輸入關鍵字在本市沒有找到,但在其他城市找到時,返回包含該關鍵字資訊的城市列表        String strInfo = "在";        for (CityInfo cityInfo : result.getSuggestCityList()) {          strInfo += cityInfo.city;          strInfo += ",";        }        strInfo += "找到結果";        Toast.makeText(POISearchMapActivity.this, strInfo, Toast.LENGTH_LONG).show();      }    }    public void onGetPoiDetailResult(PoiDetailResult result) {      // 擷取Place詳情頁檢索結果    }  };

<span style="color:#ff6666;">// 第三步,設定POI檢索監聽者;</span>    poiSearch.setOnGetPoiSearchResultListener(poiListener);

  // 這是範圍        LatLngBounds.Builder b = new LatLngBounds.Builder();        b.include(new LatLng(39.976446, 116.320331));        b.include(new LatLng(39.900766, 116.32838));        b.include(new LatLng(39.910065, 116.491081));        b.include(new LatLng(39.976004, 116.475558));        LatLngBounds build = b.build();<pre name="code" class="java">獲得LatLngBounds
// 第四步,發起檢索請求; poiSearch.searchInBound(new PoiBoundSearchOption().bound(build).keyword("美食").pageNum(currentPage));
下面使用一個簡單的例子來進行說明xml檔案裡面只有一個簡單的listview
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".IndexActivity" >    <ListView        android:id="@+id/mylistView"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></RelativeLayout>


在activity中實現對資料的擷取和展示工作,在例子中為了方便示範,監聽了onKeyDown方法,修改了meun按鍵的相應操作,修改為按下menu鍵顯示資料再次點擊顯示下頁資料。這裡僅展示“美食”搜尋結果僅展示“美食名”。
package com.flyou.hellomap;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.KeyEvent;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.model.LatLng;import com.baidu.mapapi.model.LatLngBounds;import com.baidu.mapapi.search.core.CityInfo;import com.baidu.mapapi.search.core.PoiInfo;import com.baidu.mapapi.search.core.SearchResult;import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;import com.baidu.mapapi.search.poi.PoiBoundSearchOption;import com.baidu.mapapi.search.poi.PoiDetailResult;import com.baidu.mapapi.search.poi.PoiResult;import com.baidu.mapapi.search.poi.PoiSearch;public class POISearchMapActivity extends Activity {  private int totalpages = 0;  private ListView listView = null;  private PoiSearch poiSearch;  private int currentPage = 0;  ArrayAdapter<String> adapter = null;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    // 在使用SDK各組件之前初始化context資訊,傳入ApplicationContext    // 注意該方法要再setContentView方法之前實現    SDKInitializer.initialize(getApplicationContext());    setContentView(R.layout.activity_index);    listView = (ListView) findViewById(R.id.mylistView);    // 第一步,建立POI檢索執行個體    poiSearch = PoiSearch.newInstance();    // 第三步,設定POI檢索監聽者;    poiSearch.setOnGetPoiSearchResultListener(poiListener);  }  // 第二步,建立POI檢索監聽者;  OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener() {    public void onGetPoiResult(PoiResult result) {      // 擷取POI檢索結果      if (result == null || result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {        Toast.makeText(POISearchMapActivity.this, "未找到結果", Toast.LENGTH_LONG).show();        return;      }      if (result.error == SearchResult.ERRORNO.NO_ERROR) {        List<PoiInfo> allPoi = result.getAllPoi();        totalpages = result.getTotalPageNum();        String[] datas = new String[10];        for (int i = 0; i < 10; i++) {          datas[i] = allPoi.get(i).name;        }        Toast.makeText(POISearchMapActivity.this, "當前第"+currentPage+"頁,共"+result.getTotalPageNum()+"頁", 0).show();        adapter = new ArrayAdapter<String>(POISearchMapActivity.this, android.R.layout.simple_list_item_1, datas);        listView.setAdapter(adapter);        return;      }      if (result.error == SearchResult.ERRORNO.AMBIGUOUS_KEYWORD) {        // 當輸入關鍵字在本市沒有找到,但在其他城市找到時,返回包含該關鍵字資訊的城市列表        String strInfo = "在";        for (CityInfo cityInfo : result.getSuggestCityList()) {          strInfo += cityInfo.city;          strInfo += ",";        }        strInfo += "找到結果";        Toast.makeText(POISearchMapActivity.this, strInfo, Toast.LENGTH_LONG).show();      }    }    public void onGetPoiDetailResult(PoiDetailResult result) {      // 擷取Place詳情頁檢索結果    }  };  @Override  protected void onDestroy() {    super.onDestroy();    // 在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命週期管理    poiSearch.destroy();  }  @Override  protected void onResume() {    super.onResume();    // 在activity執行onResume時執行mMapView. onResume (),實現地圖生命週期管理  }  @Override  protected void onPause() {    super.onPause();    // 在activity執行onPause時執行mMapView. onPause (),實現地圖生命週期管理  }  @Override  public boolean onKeyDown(int keyCode, KeyEvent event) {    switch (keyCode) {      case KeyEvent.KEYCODE_MENU:                // 這是範圍        LatLngBounds.Builder b = new LatLngBounds.Builder();        b.include(new LatLng(39.976446, 116.320331));        b.include(new LatLng(39.900766, 116.32838));        b.include(new LatLng(39.910065, 116.491081));        b.include(new LatLng(39.976004, 116.475558));        LatLngBounds build = b.build();        // 第四步,發起檢索請求;        poiSearch.searchInBound(new PoiBoundSearchOption().bound(build).keyword("美食").pageNum(currentPage));        // poiSearch.searchInCity((new        // PoiCitySearchOption()).city("開封").keyword("美食").pageNum(currentPage));        currentPage++;        if (currentPage == totalpages) {          currentPage = 0;        }        break;    }    return super.onKeyDown(keyCode, event);  }}


3.城市搜尋核心代碼
  poiSearch.searchInCity((new         PoiCitySearchOption()).city("開封").keyword("美食").pageNum(currentPage));


4.周邊搜尋
PoiNearbySearchOption keyword(java.lang.String key)檢索關鍵字
PoiNearbySearchOption location(LatLng location)檢索位置
PoiNearbySearchOption pageCapacity(int pageCapacity)設定每頁容量,預設為每頁10條
PoiNearbySearchOption pageNum(int pageNum)分頁編號
PoiNearbySearchOption radius(int radius)設定檢索的半徑範圍----------單位為米




poiSearch.searchNearby(new PoiNearbySearchOption()        .keyword("大學")        .location(new LatLng(34.82336,114.31496))        .radius(3000)            );//可以為定位的座標也可自己制定



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.