android 百度地图学习,Android百度地图学习——进阶·定义自己的POI搜索方法

百度地图的POI搜索大家都知道,今天主要是想分享一下在POI搜索的基础上定义自己的POI搜索方法。毕竟我们自己定义的数据库表字段和百度的数据字段不一样,在实际操作中可能会有偏差。在这里主要的两个函数还是参考了百度POI的搜索函数(没办法, 谁让人家百度那么牛呢)

话不多说,开始进入正题(等一下,在进入正题前要明确一下大家会百度地图SDK的基本使用,密钥申请,有了基础后会很简单理解的。要是没有接触过可以先看一下 百度地图SDK学习 ,快速入门后,起码在看了基础地图后再返回来看这篇文章会受益很大的)

先看一下百度自己的POI搜索吧。

1488346a291e?t=1530238801741

图一

主要是我截取的注部分代码,在获取到结果后通过

overlay.setData(result);

overlay.addToMap();

overlay.zoomToSpan();

从而将结果显示在地图上。那么我们主要就是研究这三部分代码了(其实最主要的是前两个,第三个函数是为了缩放地图,使所有Overlay都在合适的视野内,在某些情况下也很重要的,比如本文中的例子)。

1488346a291e?t=1530238801741

overlay.setData(result);

这里很显然是赋值给mPoiResult,这样下面的这个方法

1488346a291e?t=1530238801741

图二

就能够获取到值了,看了 百度地图SDK学习 后知道 mark 是标注,这里将我们获取到的值的标注全部返回给markerList。下面我们就需要把这些标注显示在地图上。

1488346a291e?t=1530238801741

overlay.addToMap();

我们发现PoiOverlay的父类是OverlayManager,里面有一个addToMap()方法,通过研究这个父类我们将会发现

1488346a291e?t=1530238801741

图三

中的getOverlayOptions()是父类定义的一个需要复写的方法,而这个方法在子类PoiOverlay中就是我们获取markerList方法,这样就联通起来了。理解清楚了这三层关系,我们再回过头来整理一下我们的思路。

当我们获取到了需要显示的值(可以来自数据库,或者网络,自己可以定义,但是不管来自哪都得含有两个字段:经度和纬度),我们把值保存起来,并且每个值需要设置一个marker来为了显示在地图上,然后根据addOverlay方法将值显示出来。

思路很清晰,实现起来也很简单。下面是我自己实现的自定义POI搜索。

1488346a291e?t=1530238801741

开始是从我的数据库中获取数据,然后筛选,最主要的是最后四行。第一行就不说了,第二行传值,第三行增添到地图上,第四行是将结果显示在一个合理的视野范围内。

在这里我没有将子类和父类分开写,因为很简单所以卸载一个class文件中。最终的这个MapContectManager.class

1488346a291e?t=1530238801741

第一步:获取值

1488346a291e?t=1530238801741

第二步:增添到地图上

1488346a291e?t=1530238801741

这两步就基本可以实现了。但是我还需要增加一个函数zoomToSpan()。说来惭愧,当我检测的时候发现数据显示不了,我一开始以为代码问题,可检查了多遍还是有问题,最后想想是不是经纬度出错了,直到最后我才恍然大悟,我的数据比较少,比较分散,搜索后没有显示在同一个视野内从而闹出了笑话。惭愧啊惭愧。所以如果你们的数据也很烦分散,建议你们增加这个函数。

这就上我对POI搜索的见解。如果对你有帮助是我的荣幸,如果你们有什么意见也可以讨论一下互相进步。接下来要继续进阶自定义导航系统(先去喝杯茶)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值