前面学习百度地图的一些基本的用法,这次我们一起来看一看百度地图的检索功能吧

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.指定坐标范围搜索

无论是什么搜索基本步骤都是不变的
  1. <span style="color:#ff6666;"> // 第一步,创建POI检索实例</span>
  2. poiSearch = PoiSearch.newInstance();
  1. <span style="color:#ff6666;"> // 第二步,创建POI检索监听者;</span>
  2. OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener() {
  3. public void onGetPoiResult(PoiResult result) {
  4. // 获取POI检索结果
  5. if (result == null || result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
  6. Toast.makeText(POISearchMapActivity.this, "未找到结果", Toast.LENGTH_LONG).show();
  7. return;
  8. }
  9. if (result.error == SearchResult.ERRORNO.NO_ERROR) {
  10. List<PoiInfo> allPoi = result.getAllPoi();
  11. totalpages = result.getTotalPageNum();
  12. String[] datas = new String[10];
  13. for (int i = 0; i < 10; i++) {
  14. datas[i] = allPoi.get(i).name;
  15. }
  16. adapter = new ArrayAdapter<String>(POISearchMapActivity.this, android.R.layout.simple_list_item_1, datas);
  17. listView.setAdapter(adapter);
  18. return;
  19. }
  20. if (result.error == SearchResult.ERRORNO.AMBIGUOUS_KEYWORD) {
  21. // 当输入关键字在本市没有找到,但在其他城市找到时,返回包含该关键字信息的城市列表
  22. String strInfo = "在";
  23. for (CityInfo cityInfo : result.getSuggestCityList()) {
  24. strInfo += cityInfo.city;
  25. strInfo += ",";
  26. }
  27. strInfo += "找到结果";
  28. Toast.makeText(POISearchMapActivity.this, strInfo, Toast.LENGTH_LONG).show();
  29. }
  30. }
  31. public void onGetPoiDetailResult(PoiDetailResult result) {
  32. // 获取Place详情页检索结果
  33. }
  34. };

  1. <span style="color:#ff6666;">// 第三步,设置POI检索监听者;</span>
  2. poiSearch.setOnGetPoiSearchResultListener(poiListener);
  1. // 这是范围
  2. LatLngBounds.Builder b = new LatLngBounds.Builder();
  3. b.include(new LatLng(39.976446, 116.320331));
  4. b.include(new LatLng(39.900766, 116.32838));
  5. b.include(new LatLng(39.910065, 116.491081));
  6. b.include(new LatLng(39.976004, 116.475558));
  7. LatLngBounds build = b.build();<pre name="code" class="java">获得LatLngBounds

// 第四步,发起检索请求; poiSearch.searchInBound(new PoiBoundSearchOption().bound(build).keyword("美食").pageNum(currentPage));


下面使用一个简单的例子来进行说明

xml文件
里面只有一个简单的listview
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. tools:context=".IndexActivity" >
  6. <ListView
  7. android:id="@+id/mylistView"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content" />
  10. </RelativeLayout>

在activity中实现对数据的获取和展示工作,在例子中为了方便演示,监听了onKeyDown方法,修改了meun按键的相应操作,修改为按下menu键显示数据再次点击显示下页数据。这里仅展示“美食”搜索结果仅展示“美食名”。

  1. package com.flyou.hellomap;
  2. import java.util.List;
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.KeyEvent;
  6. import android.widget.ArrayAdapter;
  7. import android.widget.ListView;
  8. import android.widget.Toast;
  9. import com.baidu.mapapi.SDKInitializer;
  10. import com.baidu.mapapi.model.LatLng;
  11. import com.baidu.mapapi.model.LatLngBounds;
  12. import com.baidu.mapapi.search.core.CityInfo;
  13. import com.baidu.mapapi.search.core.PoiInfo;
  14. import com.baidu.mapapi.search.core.SearchResult;
  15. import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
  16. import com.baidu.mapapi.search.poi.PoiBoundSearchOption;
  17. import com.baidu.mapapi.search.poi.PoiDetailResult;
  18. import com.baidu.mapapi.search.poi.PoiResult;
  19. import com.baidu.mapapi.search.poi.PoiSearch;
  20. public class POISearchMapActivity extends Activity {
  21. private int totalpages = 0;
  22. private ListView listView = null;
  23. private PoiSearch poiSearch;
  24. private int currentPage = 0;
  25. ArrayAdapter<String> adapter = null;
  26. @Override
  27. protected void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29. // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
  30. // 注意该方法要再setContentView方法之前实现
  31. SDKInitializer.initialize(getApplicationContext());
  32. setContentView(R.layout.activity_index);
  33. listView = (ListView) findViewById(R.id.mylistView);
  34. // 第一步,创建POI检索实例
  35. poiSearch = PoiSearch.newInstance();
  36. // 第三步,设置POI检索监听者;
  37. poiSearch.setOnGetPoiSearchResultListener(poiListener);
  38. }
  39. // 第二步,创建POI检索监听者;
  40. OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener() {
  41. public void onGetPoiResult(PoiResult result) {
  42. // 获取POI检索结果
  43. if (result == null || result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
  44. Toast.makeText(POISearchMapActivity.this, "未找到结果", Toast.LENGTH_LONG).show();
  45. return;
  46. }
  47. if (result.error == SearchResult.ERRORNO.NO_ERROR) {
  48. List<PoiInfo> allPoi = result.getAllPoi();
  49. totalpages = result.getTotalPageNum();
  50. String[] datas = new String[10];
  51. for (int i = 0; i < 10; i++) {
  52. datas[i] = allPoi.get(i).name;
  53. }
  54. Toast.makeText(POISearchMapActivity.this, "当前第"+currentPage+"页,共"+result.getTotalPageNum()+"页", 0).show();
  55. adapter = new ArrayAdapter<String>(POISearchMapActivity.this, android.R.layout.simple_list_item_1, datas);
  56. listView.setAdapter(adapter);
  57. return;
  58. }
  59. if (result.error == SearchResult.ERRORNO.AMBIGUOUS_KEYWORD) {
  60. // 当输入关键字在本市没有找到,但在其他城市找到时,返回包含该关键字信息的城市列表
  61. String strInfo = "在";
  62. for (CityInfo cityInfo : result.getSuggestCityList()) {
  63. strInfo += cityInfo.city;
  64. strInfo += ",";
  65. }
  66. strInfo += "找到结果";
  67. Toast.makeText(POISearchMapActivity.this, strInfo, Toast.LENGTH_LONG).show();
  68. }
  69. }
  70. public void onGetPoiDetailResult(PoiDetailResult result) {
  71. // 获取Place详情页检索结果
  72. }
  73. };
  74. @Override
  75. protected void onDestroy() {
  76. super.onDestroy();
  77. // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
  78. poiSearch.destroy();
  79. }
  80. @Override
  81. protected void onResume() {
  82. super.onResume();
  83. // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
  84. }
  85. @Override
  86. protected void onPause() {
  87. super.onPause();
  88. // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
  89. }
  90. @Override
  91. public boolean onKeyDown(int keyCode, KeyEvent event) {
  92. switch (keyCode) {
  93. case KeyEvent.KEYCODE_MENU:
  94. // 这是范围
  95. LatLngBounds.Builder b = new LatLngBounds.Builder();
  96. b.include(new LatLng(39.976446, 116.320331));
  97. b.include(new LatLng(39.900766, 116.32838));
  98. b.include(new LatLng(39.910065, 116.491081));
  99. b.include(new LatLng(39.976004, 116.475558));
  100. LatLngBounds build = b.build();
  101. // 第四步,发起检索请求;
  102. poiSearch.searchInBound(new PoiBoundSearchOption().bound(build).keyword("美食").pageNum(currentPage));
  103. // poiSearch.searchInCity((new
  104. // PoiCitySearchOption()).city("开封").keyword("美食").pageNum(currentPage));
  105. currentPage++;
  106. if (currentPage == totalpages) {
  107. currentPage = 0;
  108. }
  109. break;
  110. }
  111. return super.onKeyDown(keyCode, event);
  112. }
  113. }


3.城市搜索

核心代码
  1. poiSearch.searchInCity((new
  2. 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)

设置检索的半径范围----------单位为米




  1. poiSearch.searchNearby(new PoiNearbySearchOption()
  2. .keyword("大学")
  3. .location(new LatLng(34.82336,114.31496))
  4. .radius(3000)
  5. );//可以为定位的坐标也可自己制定

百度地图开发之POI数据检索的更多相关文章

  1. 百度地图开发之poi检索,线路规划

      官方文档 http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key 先去官方文档申请秘钥下载压缩文件等操作,参考 百度地图的秘钥申请 ...

  2. 顾维灏谈百度地图数据采集:POI自动处理率达90%

    顾维灏谈百度地图数据采集:POI自动处理率达90%   发布时间:2015-12-21 22:37        来源:cnsoftnews.com        作者:   百度地图还创新研发高精地 ...

  3. Android应用中使用百度地图API之POI(三)

    先看执行后的图吧: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFqaWFuamll/font/5a6L5L2T/fontsize/400/fill/ ...

  4. 零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)

    好,现在进入高阶代码篇. 目的: 爬取昆明市中学的兴趣点POI. 关键词:中学 已有ak:9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 昆明市坐标范围: 左下角:24.390894 ...

  5. 将百度地图Demo抽取出来安到自己的程序中

    今日所学: 使用百度地图ADK实现手机定位 [Android]使用百度.高德.腾讯地图SDK获取定位数据与屏幕截图分享到QQ_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 代码获取SHA1 (2 ...

  6. 从POI到O2O 看百度地图如何走出未来之路

    近期O2O的烧钱融资大战如火如荼,有人已经把O2O大战,用乌合之众的群体心理失控来形容.其实厂商都不傻,O2O烧钱大家都知道,但是大家还知道O2O背后这块大蛋糕价值"万亿级". 有 ...

  7. 百度地图android studio导入开发插件

    百度地图SDK v3.5.0开发包下载地址:http://lbsyun.baidu.com/sdk/download?selected=location 开发工具 Android开发工具很多,在这我们 ...

  8. [工具向]__申请,下载,使用百度地图api

    前言 api即应用程序接口,在我们的日常开发中,我们不仅可以在开源代码仓库(,github,码云)中获得很大的帮助,在日常开发中占重要地位的另一个东西就是api,我们可以使用众多的第三方编写的优秀的a ...

  9. 地图调起URI API(通过连接直接调用百度地图)

    网站:http://lbsyun.baidu.com/index.php?title=uri/api/web 地图调起URI API 百度地图URI API是为开发者提供直接调起百度地图产品(百度We ...

随机推荐

  1. [bzoj4864][BeiJing 2017 Wc]神秘物质

    来自FallDream的博客,未经允许,请勿转载,谢谢. 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研 ...

  2. hihocoder #1142 : 三分·三分求极值

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 这一次我们就简单一点了,题目在此: 在直角坐标系中有一条抛物线y=ax^2+bx+c和一个点P(x,y),求点P到抛物线的 ...

  3. 试说明采用双缓冲技术如何进行I/O操作

    输入设备先将第一个缓冲区装满数据,在输入设备向第二个缓冲区装数据时,处理机就可以从第一个缓冲区取出数据进行处理:当一个缓冲区的数据处理完毕,若第二个缓冲区已经装满,则处理机又可以从第二个缓冲区取出数据 ...

  4. What's New In MySQL 8.0

        由于8.0内有很多C++11特性.需要gcc4.8版本以上.Rhel6系列默认gcc是4.7.在安装gcc6.1之后仍然检查不过. 原因可能是6.1版本不一定高于4.7,暂不讨论.鉴于升级gc ...

  5. 数据结构 栈&队列

    2-4 依次在初始为空的队列中插入元素a,b,c,d以后,紧接着做了两次删除操作,此时的队头元素是( ) 删除,移动头指针: 增加,移动尾指针: 删除a,b ,队头c 2-3 在一个链队列中,fron ...

  6. 微信小程序开发 导入文件说没找到.json的问题

    这个真的坑爹 网上的答案也没几个靠谱 说白了就是找个空文件直接创建 然后复制粘贴 反应了这玩意ide不成熟 进去之后直接创了个quick start的源码 也就是我们看的这个网页建议我们下载的源码 老 ...

  7. Python小代码_9_求水仙花数

    for i in range(100, 1000): ge = i % 10 shi = i // 10 % 10 bai = i // 100 if ge ** 3 + shi ** 3 + bai ...

  8. Answers to "Why are my jobs not running?"

    from :https://community.oracle.com/thread/648581 This is one of the most common Scheduler questions ...

  9. python笔记十五(面向对象及其特性)

    一.面向对象: class(类):一类拥有共同属性对象的抽象:定义了这些对象的属性和方法object(对象):是一个类实例化后的实例,类必须经过实例化才可以在程序中调用: 由于之前学习过java,对类 ...

  10. 推荐几种PHP实现页面跳转的方法

    1.PHP实现页面跳转第一种方法 <?php header("Location:http://www.baidu.com"); ?> header()是php内置函数, ...