百度地图开发之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 的公共质因数, ...
- hdu5634 BestCoder Round #73 (div.1)
Rikka with Phi Accepts: 5 Submissions: 66 Time Limit: 16000/8000 MS (Java/Others) Memory Limit: ...
- JVM学习记录-对象已死吗
前言 先来回顾一下,在jvm运行时数据区,分为两部分,一个部分是线程共享区,主要包括堆和方法区,另一部是线程私有区分包括本地方法栈,虚拟机栈和程序计数器.在线程私有部分的三个区域是随着线程生和灭的.栈 ...
- Android技术分享-文字转语音并朗读
Android技术分享-文字转语音并朗读 最近在做一个项目,其中有一个功能是需要将文本转换成语音并播放出来.下面我将我的做法分享一下. 非常令人开心的是,Android系统目前已经集成了TTS,提供了 ...
- 基于Spark环境对比Python和Scala语言利弊
在数据挖掘中,Python和Scala语言都是极受欢迎的,本文总结两种语言在Spark环境各自特点. 本文翻译自 https://www.dezyre.com/article/Scala-vs-Py ...
- shell基本命令
linux基本命令和shell基本命令,好多人傻傻分不清. linux基本命令积累如下: pwd:显示当前工作目录 cd:改变当前目录 ls:显示当前目录中所有目录文件和文本文件 ls -F:显示当前 ...
- 一日一练-JS toString 和valueOf 方法的联系与区别
子曰:类型转换中toString 和valueOf 的联系与区别分析 首先是看看ES5 的规范是如何进行说明的 在这里有几个基础知识点需要了解一下: [[Class]] [[Class]] 属于Obj ...
- chrome 如何卸载干净
安装位置C:\Users\你电脑的用户名\AppData\Local\Google,删除整个文件夹,用CCleaner扫描注册表删除无用注册表项,重启安装即可.
- Log4j使用详解
1 Log4j配置说明 1.1 配置文件Log4j可以通过java程序动态设置,该方式明显缺点是:如果需要修改日志输出级别等信息,则必须修改java文件,然后重新编译,很是麻烦: log4j也可以通过 ...
- JavaScript判断不同平台
function getPlatformType() { let UA = navigator.userAgent; if(/MicroMessenger/i.test(UA)){ return 'w ...
