百度地图进阶【POI数据检索】
来源:互联网 发布:php 判断文件大小 编辑:程序博客网 时间:2024/05/16 19:34
前面学习百度地图的一些基本的用法,这次我们一起来看一看百度地图的检索功能吧
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;"> // 第一步,创建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) );//可以为定位的坐标也可自己制定
0 0
- 百度地图进阶【POI数据检索】
- 百度地图开发之POI数据检索
- 百度地图POI检索
- 百度地图POI检索实例
- 百度地图Android POI检索
- 百度poi检索 查询POI数据
- Android百度地图学习笔记---poi检索
- 百度地图开发(二)POI检索
- [Android]百度地图之POI检索
- Android 跳转百度地图网页POI检索
- Android百度地图Poi检索开发总结
- 第一次尝试百度地图POI公交检索
- 新版百度地图POI检索以及POI覆盖物
- 关于百度地图poi检索不出数据,onGetPoiResult不执行(其他功能类似)
- 百度地图开发(四)之POI检索
- 百度地图开发(四)之POI检索
- 百度地图POI周边检索/自定义覆盖物
- 百度地图开发(四)之POI检索
- android Camera照相机技术(一)
- Acunetix Web Vulnerability Scanner
- spring两个重要属性lazy-init和abstract
- Fast RCNN ubuntu下安装笔记
- std::nth_elelment排序
- 百度地图进阶【POI数据检索】
- java语言实现结构型设计模式—外观模式
- LeetCode OJ #2 Add Two Numbers
- H - Towers (五一训练)
- js 测试性能
- Z-Stack的运行角度的理解(仅作个人学习笔记,希望别人评指正)
- 关于在xcode中添加第三方文件夹的问题
- 第九周 项目五:方程类
- 整数中1出现的次数(从1到n整数中1出现的次数)