百度地图开发之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 ...
随机推荐
- APIO 2016
我好菜啊都不会 T1.boats 题目大意:给你N段区间,按顺序决定每段区间可以选一个数或不选,若选则选的这个数必须大于所有在这之前选的数,求有多少种方案.(N<=500,区间在[1,1e9]范 ...
- oracle 分页查询数据重复问题
最近在做项目的时候发现一个问题,oracle 在查询分页数据的时候,有几条数据重复查询了,并且有几条数据在分页的时候消失了.百度了一下发现,ORACLE 在查询数据的时候返回的行不是固定的,他只是按照 ...
- C++ 中私有继承、保护继承与公有继承
区别 下面通过一个示例来介绍三种继承的区别. 定义一个基类(假设为一个快退休的富豪): class RichMan { public: RichMan(); ~RichMan(); int m_com ...
- python2.7入门---条件语句
前段时间呢,把MongoDB的基础内容了解的差不多了.接下来,就开始学习python2.7的基础内容喽.接着前面的知识点来学习.首先,来看一下条件语句.Python条件语句是通过一条或多条语句 ...
- Miox带你走进动态路由的世界——51信用卡前端团队
写在前面: 有的时候再做大型项目的时候,确实会被复杂的路由逻辑所烦恼,会经常遇到权限问题,路由跳转回退逻辑问题.这几天在网上看到了51信用卡团队开源了一个Miox,可以有效的解决这些痛点,于是乎我就做 ...
- Java 实现32位MD5加密
MD5介绍[链接] Java代码实现 public class Md5Util { private String Md5Util(String s) { try { MessageDigest md ...
- Python从入门到实践 学习笔记(二)元祖686gffs
列表是可以修改的,而不可变的列表被称为元组 . 定义 * 用圆括号来标识.定义元组后,使用索引来访问其元素,就像访问列表元素一样 修改变量 * 不能修改元组的元素,但可以给存储元组的变量赋值 修改元素 ...
- 借助Bodymovin播放svg动画
svg动画,截取工具有点不忍直视了~~~ 为了实现上面的svg动画,可以使用bodymovin插件,简单配置之后,就可以直接可以实现在 AE(可视化操作,不用码代码)上面导出 svg的json数据,在 ...
- 用一个div模拟textarea的实现
<textarea> 标签定义一个多行的文本输入控件.但是它不能像div一样随着内容增加而自动增加,一言不合就出现滚动条,有是有为了更好的交互,可能需要使用div来模拟textarea的实 ...
- TortiseGit 添加SSH-Key
TortoiseGit 使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥.使用命令ssh-keygen -C "邮箱地址" -t rsa产生的密钥在Tortoi ...