一.简要描述

百度地图的POI点可以分有两种:地图中已经标记的点和通过关键词搜索得到的POI点。对于这两种POI点,百度封装成了不同的类和接口来实现监听,下面简单讲一点。

二.地图中已标记POI点

首先遇到的第一个问题就时如何获取已标记点的信息,在百度地图点击已标记的点会有信息的,那么在自己的地图上如何产生点击事件呢?

(1)接口

百度提供了一个POI点击事件的接口 BaiduMap.OnMapClickListener,该接口提供了两个方法,如下表。

(测试下CSDN的MarkDown编辑器画表格的功能,不会把首行的标题居中呀)

返回类型

方法

说明

boolean

onMapClick(LatLng point)

地图单击事件回调函数

boolean

onMapPoiClick(MapPoi poi)

地图内 Poi 单击事件回调函数

(2)MapPoi 类

返回类型

方法

说明

java.lang.String

getName()

获取该兴趣点的名称

LatLng

getPosition()

获取该兴趣点的地理坐标

(3)获取POI

我们只需要重写onMapPoiClick()就可以了。

代码如下:

baiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener() {

@Override

public void onMapClick(LatLng latLng) {

}

@Override

public boolean onMapPoiClick(MapPoi mapPoi)

{

String POIName = mapPoi.getName();//POI点名称

LatLng POIPosition = mapPoi.getPosition();//POI点坐标

//下面就是自己随便应用了

//根据POI点坐标反向地理编码

//reverseSearch(POIPosition);

//添加图层显示POI点

/*baiduMap.clear(); baiduMap.addOverlay( new MarkerOptions() .position(POIPosition) //坐标位置 .icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_marka)) .title(POIName) //标题 ); //将该POI点设置为地图中心 baiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(POIPosition));*/

return true;

}

});

其次,为了获得该POI点的其他详细信息,因为MapPoi没有uid,我尝试通过对position进行反向地理编码,结果还是不太满意,百度地图上直接点击已标记的POI点,是可以获得该点的很多信息的(可见下面的第三部分中PoiInfo),关于这一点,暂时还没找到更好的方式解决。

三.搜索关键词获取POI点

1.描述

该功能就是百度地图首页的顶端,输入想要去的地方或者食物、店铺等名词进行POI搜索,但是这部分分两种查询结果:

(1)根据关键词直接搜索到的相关POI,对应包为com.baidu.mapapi.search.poi;

(2)根据关键词进行联想得到的POI,对应包为com.baidu.mapapi.search.sug。

所谓联想搜索得到的POI,比如我们输入上海的时候,百度会联想搜索将结果提示给你:上海菜、上海大众汽车等等,如下图

2.两种POI有用不同的接口、回调函数、数据类型,如下表:

(1)com.baidu.mapapi.search.poi

接口:OnGetPoiSearchResultListener

类型

方法

说明

void

onGetPoiDetailResult(PoiDetailResult result)

poi详情查询结果回调

void

onGetPoiResult(PoiResult result)

poi 查询结果回调

然后主要需要了解的是

PoiResult类

PoiInfo类

搜索POI

private AutoCompleteTextView keyWorldsView;//输入搜索文字的AutoCompleteTextView

private PoiSearch mPoiSearch;//POI搜索模块

mPoiSearch = PoiSearch.newInstance();//实例化

PoiSearch.setOnGetPoiSearchResultListener(this);//监听接口

//*****

//比如在onclick事件里添加:搜索->进入回调函数:onGetPoiResult(PoiResult result)

mPoiSearch.searchInCity((new PoiCitySearchOption())//

.city(currentLoction.getCity())//定位的城市为搜索city

.keyword(keyWorldsView.getText().toString())//关键词

.pageNum(loadIndex));//第几页:默认从0开始,分页为10,所以如果搜索结果大于10,要显示多余10的部分就需要进行loadIndex=页码,或者loadIndex++等来更改loadIndex显示下一页数据

接下来就是onGetPoiResult(PoiResult result)

public void onGetPoiResult(PoiResult result) {

if (result == null

|| result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {

Toast.makeText(PoiSearchDemo.this, "未找到结果", Toast.LENGTH_LONG)

.show();

return;

}

if (result.error == SearchResult.ERRORNO.NO_ERROR) {

//成功在传入的搜索city中搜索到POI

//对result进行一些应用

//一般都是添加到地图中,然后绑定一些点击事件

//官方Demo的处理如下:

mBaiduMap.clear();

PoiOverlay overlay = new MyPoiOverlay(mBaiduMap);

mBaiduMap.setOnMarkerClickListener(overlay);

//MyPoiOverlayextends PoiOverlay;PoiOverlay extends OverlayManager

//看了这三个class之间的关系后瞬间明白咱自己也可以写overlay,重写OverlayManager中的一些方法就可以了

//比如重写了点击事件,这个方法真的太好,对不同类型的图层可能有不同的点击事件,百度地图3.4.0之后就支持设置多个监听对象了,只是本人还没把这个方法彻底掌握...

overlay.setData(result);//图层数据

overlay.addToMap();//添加到地图中(添加的都是marker)

overlay.zoomToSpan();//保证能显示所有marker

return;

}

if (result.error == SearchResult.ERRORNO.AMBIGUOUS_KEYWORD) {

// 当输入关键字在本市没有找到,但在其他城市找到时,返回包含该关键字信息的城市列表

String strInfo = "在";

for (CityInfo cityInfo : result.getSuggestCityList()) {

strInfo += cityInfo.city;

strInfo += ",";

}

strInfo += "找到结果";

Toast.makeText(PoiSearchDemo.this, strInfo, Toast.LENGTH_LONG)

.show();

}

}

(2)com.baidu.mapapi.search.sug

接口

该包就一个void onGetSuggestionResult(SuggestionResult result)

SuggestionResult.seggestionInfo

从字段说明中可以看到,联想搜索的结果都是已经标记的POI点,拥有uid

联想搜索

@Override

public void onGetSuggestionResult(SuggestionResult res) {

if (res == null || res.getAllSuggestions() == null) {

return;

}

suggest = new ArrayList();//获取联想搜索结果

for (SuggestionResult.SuggestionInfo info : res.getAllSuggestions()) {

if (info.key != null) {

suggest.add(info.key);

}

}

sugAdapter = new ArrayAdapter(PoiSearchDemo.this, android.R.layout.simple_dropdown_item_1line, suggest);//适配器,当然可以给加上item的click事件进行处理

keyWorldsView.setAdapter(sugAdapter);

keyWorldsView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view, int position, long id) {

SuggestionResult.SuggestionInfo info = res.getAllSuggestions().get(position);

//String uid = info.uid;

mPoiSearch.searchPoiDetail((new PoiDetailSearchOption())//去搜索该POI的详情->onGetPoiDetailResult(PoiDetailResult result)

.poiUid(info.uid));

}

});

sugAdapter.notifyDataSetChanged();

}

四.搜索效果

(1)联想搜索效果

(2)直接搜索效果

搜索餐厅的结果:其实这里还可以个性化处理,比如在定位的附近搜索等等

(3)选择一条联想搜索结果

选在一条联想搜索结果的显示:

五.总结

就如前面所说,OverlayManager的重写,可以让我们对图层进行一些个性化的处理是非常容易的,只是自己的前期做的时候并没有发现这一点,而且有对图层的一些操作,所以现在想重构图层相关的代码真的一时半会还完成不了。

android百度地图定位文字表述,Android studio 百度地图开发(8)地图已标记POI点和搜索POI点的获取和利用...相关推荐

  1. Android集成谷歌定位sdk,概述-Android 定位SDK | 高德地图API

    什么是定位SDK Android 定位 SDK 是一套简单的LBS服务定位接口,您可以使用这套定位API获取定位结果.逆地理编码(地址文字描述).以及地理围栏功能. 面向的读者 Android 定位 ...

  2. android 高德地图移动卡顿_使用高德SDK开发安卓地图应用软件

    01 - 注册高德开发者 注册高德开发者: 滑到官网页面底部,选择Android地图SDK: 点击左下方"下载完整示例代码": 进入到如下界面: 02 - 获取地图服务key并下载 ...

  3. android百度地图定位自定义图标,Android应用开发之android 百度地图自定义圆,更改默认图标等常用方法...

    本文将带你了解Android应用开发之android 百度地图自定义圆,更改默认图标等常用方法,希望本文对大家学Android有所帮助. 总结了一下百度地图常用的方法(前提是集成百度地图环境成功): ...

  4. android百度室内定位吗,基于Android的室内定位技术研究

    摘要: 随着智能移动终端的普及和发展,基于位置的服务(LBS,Location Based Service)成为智能终端发展的新热点.LBS的关键技术是定位技术,定位技术的精确度对于LBS来说至关重要 ...

  5. python android自动化元素定位_appium+python android元素定位

    image ## text属性的方法 `driver.find_element_by_android_uiautomator(``'new UiSelector().text("Custom ...

  6. android网页无法定位吗,在android中,js 无法定位 html页面的某元素

    我app里有一个html页面,我想在这个页面上实现这么一个功能: 当我点击某个按钮,页面定位到某个div: 我在浏览器测试时是有效的,但是放在app里却没有反应.`$(document).ready( ...

  7. swift地图定位(二十)百度地图的使用(POI)

    // // ViewController.swift // baidumapfirsttest // // Created by targetcloud on 2016/11/16. // Copyr ...

  8. Android列表滑动定位,滚动到Android Leanback ListRow中的给定位置

    当我需要实现"通过按返回返回到第一行中的第一项"时,我已经完成了 . 我在Activity的 onBackPressed() 中调用了这个方法 . 如果此方法返回 false ,则 ...

  9. 百度 php 图片文字识别,PHP实现百度OCR文字识别

    OCR的百度定义 (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别方法 ...

最新文章

  1. 小冰超级自然语音技术发布!PK真人真假难辨,同时获独角兽轮融资
  2. iOS自动偏移64个像素
  3. 广东高等学校计算机水平考试准考证打印,广东高考准考证打印系统
  4. joc杂志影响因子2019_化学sci期刊影响因子排名_国际化学期刊2018最新影响因子_分析测试学报影响因子...
  5. ug编程内公差和外公差是什么_UG编程
  6. 微星笔记本的神奇之处
  7. MATLAB化简矩阵为简化阶梯阵、使用分数(或小数)表示结果
  8. win7字体_win7系统为桌面添加自己喜欢的文字作为桌面背景,学习一下
  9. 斯坦福图机器学习CS224W笔记自用:How Expressive are Graph Neural Networks?
  10. 制作U盘引导盘,安装Ubuntu18.04系统
  11. 怎样删除计算机中的来宾用户密码,win7怎么删除来宾账户_win7如何删除来宾账户...
  12. Word VBA自动排版(2)-通过自动查找替换去除叠字
  13. Spring_Ioc基本配置使用(基于xml)
  14. Git操作与仓库创建
  15. 转:Excel Web Access Web Part
  16. 【游戏开发实战】TapTap物理画线游戏,教你使用Unity实现2D物理画线功能,看到我为你画的彩虹了吗
  17. SMC 缸阀匹配气动系统选型程序
  18. 常见的HTT相应状态码
  19. ORACLE锁表解决办法
  20. 基于卷积神经网络的主观题阅卷系统的设计与实现

热门文章

  1. 【MOGDB/openGauss的txid_snapshot 数据类型和相关函数】
  2. Scratch3.0——助力新进程序员理解程序(案例一、画画的蝴蝶)
  3. 如何提高产品质量-开发维度
  4. 如何将 M1 Mac(MacBook Pro、Air、iMac、Mac mini)恢复出厂设置?
  5. kubectl查看node状态_【大强哥-k8s从入门到放弃03】查看K8S集群基本信息
  6. 【微信小程序控制硬件④】 深度剖析微信公众号配网 Airkiss 原理与过程,esp8266如何自定义回调参数给微信,实现绑定设备第一步!(附带源码)
  7. Linux操作系统的性能将主要取决于,高校邦Linux操作系统安全与性能调优章节测试答案...
  8. 使用uncompyle2直接反编译python字节码文件pyo/pyc
  9. 让技术Leader狂点赞的Linux速成手册,到底有多强悍?
  10. 解决笔记本电脑连的上WIFI但上不了网问题