百度地图开发之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));
下面使用一个简单的例子来进行说明
- <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)
- );//可以为定位的坐标也可自己制定
百度地图开发之POI数据检索的更多相关文章
- 百度地图开发之poi检索,线路规划
官方文档 http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key 先去官方文档申请秘钥下载压缩文件等操作,参考 百度地图的秘钥申请 ...
- 顾维灏谈百度地图数据采集:POI自动处理率达90%
顾维灏谈百度地图数据采集:POI自动处理率达90% 发布时间:2015-12-21 22:37 来源:cnsoftnews.com 作者: 百度地图还创新研发高精地 ...
- Android应用中使用百度地图API之POI(三)
先看执行后的图吧: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFqaWFuamll/font/5a6L5L2T/fontsize/400/fill/ ...
- 零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)
好,现在进入高阶代码篇. 目的: 爬取昆明市中学的兴趣点POI. 关键词:中学 已有ak:9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 昆明市坐标范围: 左下角:24.390894 ...
- 将百度地图Demo抽取出来安到自己的程序中
今日所学: 使用百度地图ADK实现手机定位 [Android]使用百度.高德.腾讯地图SDK获取定位数据与屏幕截图分享到QQ_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 代码获取SHA1 (2 ...
- 从POI到O2O 看百度地图如何走出未来之路
近期O2O的烧钱融资大战如火如荼,有人已经把O2O大战,用乌合之众的群体心理失控来形容.其实厂商都不傻,O2O烧钱大家都知道,但是大家还知道O2O背后这块大蛋糕价值"万亿级". 有 ...
- 百度地图android studio导入开发插件
百度地图SDK v3.5.0开发包下载地址:http://lbsyun.baidu.com/sdk/download?selected=location 开发工具 Android开发工具很多,在这我们 ...
- [工具向]__申请,下载,使用百度地图api
前言 api即应用程序接口,在我们的日常开发中,我们不仅可以在开源代码仓库(,github,码云)中获得很大的帮助,在日常开发中占重要地位的另一个东西就是api,我们可以使用众多的第三方编写的优秀的a ...
- 地图调起URI API(通过连接直接调用百度地图)
网站:http://lbsyun.baidu.com/index.php?title=uri/api/web 地图调起URI API 百度地图URI API是为开发者提供直接调起百度地图产品(百度We ...
随机推荐
- Set 集合
[题目描述]现在给你一些连续的整数,它们是从 A 到 B 的整数.一开始每个整数都属于各自的集合,然后你需要进行如下操作:每次选择两个属于不同集合的整数,如果这两个整数拥有大于等于 P 的公共质因数, ...
- VK-Cup 2017 qualification 1
VK-Cup,cf里面只有切成俄文才能看到,题目也都是俄文的(百度翻译成英文和中文). 两人组队参赛的,赛期1天,乐多赛赛制(和时间基本无关,交上去挂了扣分).这次是第一场资格赛. 这次又和ditol ...
- bzoj 2004: [Hnoi2010]Bus 公交线路
Description 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距 离均为1km. 作为公交车线路的规划者,小Z调查了市民的需求,决 ...
- bzoj 1217: [HNOI2003]消防局的设立
Description 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了 ...
- 关于HttpClient重试策略的研究
一.背景 由于工作上的业务本人经常与第三方系统交互,所以经常会使用HttpClient与第三方进行通信.对于交易类的接口,订单状态是至关重要的. 这就牵扯到一系列问题: HttpClient是否有默认 ...
- 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 操作符重载和隐式类型转换
C#中,某些类型会定义隐式类型转换和操作符重载.Unity中,有些对象也定义了隐式类型转换和操作符重载.典型情况有:UnityEngine.Object.UnityEngine.Object的销毁是调 ...
- Java Servlet 笔记3
Servlet 表单数据 很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法. 1. ...
- 实现鼠标双击(OnGUI)
void OnGUI()//实现鼠标双击 { Event Mouse = Event.current; if (Mouse.isMouse && Mouse.type == Event ...
- Mysql--执行计划 Explain
0 介绍 0.1 是什么 使用 Explain 关键字可以模拟优化器执行 Sql 查询语句,从而知道 Mysql 是如何处理 Sql 的. 0.2 用法 Explain + Sql语句 0.3 执行计 ...
- js数组求差集
var arr1 = [2,3,5,88,99,444,66];var arr2 = [2,88,66]; arr_dive(arr1,arr2); function arr_dive(aArr,bA ...