百度地图开发之POI数据检索
来源:互联网 发布:怎么制作表白软件 编辑:程序博客网 时间:2024/06/05 23:06
前面学习百度地图的一些基本的用法,这次我们一起来看一看百度地图的检索功能吧
poi检索api的基本用法
百度地图的POI类中共有如下几个方法
PoiBoundSearchOptionPOI范围内检索参数
PoiCitySearchOptionpoi城市内检索参数
PoiDetailResult详情检索结果
PoiDetailSearchOptionpoi 详情检索参数
PoiNearbySearchOption附近检索参数
PoiResultpoi搜索结果。
PoiSearchPOI检索接口
我们现在先看下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;">
- poiSearch = PoiSearch.newInstance();
- <span style="color:#ff6666;">
- OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener() {
-
- public void onGetPoiResult(PoiResult result) {
-
- 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) {
-
-
- }
- };
- <span style="color:#ff6666;">
- 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);
-
-
- SDKInitializer.initialize(getApplicationContext());
-
- setContentView(R.layout.activity_index);
-
- listView = (ListView) findViewById(R.id.mylistView);
-
-
- poiSearch = PoiSearch.newInstance();
-
- poiSearch.setOnGetPoiSearchResultListener(poiListener);
-
- }
-
-
- OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener() {
-
- public void onGetPoiResult(PoiResult result) {
-
- 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) {
-
-
- }
- };
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
-
- poiSearch.destroy();
- }
-
- @Override
- protected void onResume() {
- super.onResume();
-
-
- }
-
- @Override
- protected void onPause() {
- super.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));
-
-
-
- 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)
- );
0 0