百度地图开发之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 ...
随机推荐
- ●洛谷P3233 [HNOI2014]世界树
题链: https://www.luogu.org/problemnew/show/P3233题解: 虚树,dp,倍增. 首先对于每个询问,要把虚树建出来,这一步就从略了.这里着重分享一下如何求答案. ...
- Codeforces Round #406 (Div. 1)
B题打错调了半天,C题想出来来不及打,还好没有挂题 AC:AB Rank:96 Rating:2125+66->2191 A.Berzerk 题目大意:有一个东东在长度为n的环上(环上点编号0~ ...
- [bzoj4866] [Ynoi2017]由乃的商场之旅
来自FallDream的博客,未经允许,请勿转载,谢谢, 由乃有一天去参加一个商场举办的游戏.商场派了一些球王排成一行.每个人面前有几堆球.说来也巧,由乃和你一样,觉得这游戏很无聊,于是决定换一个商场 ...
- bzoj2500幸福的道路 树形dp+单调队列
2500: 幸福的道路 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 434 Solved: 170[Submit][Status][Discuss ...
- bzoj1858[Scoi2010]序列操作 线段树
1858: [Scoi2010]序列操作 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 3079 Solved: 1475[Submit][Statu ...
- switch 循环中的case理解
case后面的常量表达式是程序的入口,一旦找到入口后,后面的其他的case就没有用了,程序就会继续执行后面的所有代码
- Requests库介绍
Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTT ...
- HttpClient 实现 get,post请求
private String sendPost(Map<String,Object> data, String url) { CloseableHttpClient httpClient ...
- three.js 3D 动画场景
Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机.光影.材质等各种对象.使用它它能让 WebGL 变得更加简单. 下面用Three.js渲染一个物体360 ...
- python笔记四(dict/set/不可变对象)
一.dict 字典是包含key_value存储方式.在放进去的时候,必须根据key值Hash出value的存放位置,这样,取的时候才能根据key直接拿到value. dict的操作: d = {'Mi ...