源码地址:https://github.com/NateRobinson/BaiduMapSelectAddress

版权声明:欢迎转载,转载请注明出处http://blog.csdn.net/u011771755

先上58到家的效果图:

刚好最近有个项目要实现此效果,于是我就去好好研究了一把百度地图API,不得不说,百度地图的类参考文档简直好啊,遇到思绪打不开的时候,看看他的类参考文档,瞬间思路大开http://wiki.lbsyun.baidu.com/cms/androidsdk/doc/v3_6_1/ 我这里用的3.6.1的,所以查看的对应版本的类参考。

下面再放上我这个demo实现的效果:

地图选择界面1:

地图选择界面2:

地图选择界面3:


几个关键点

这里用到了几个关键的地方:

一:如何设置的marker一直在地图的中间,这里使用了BaiduMap的OnMapStatusChangeListener监听接口:

mBaiduMap.setOnMapStatusChangeListener(new OnMapStatusChangeListener() {@Override
public void onMapStatusChangeStart(MapStatus arg0) {}@Override
public void onMapStatusChangeFinish(MapStatus arg0) {
search_ll.setVisibility(View.GONE);
mBaiduMap.clear();
mBaiduMap.addOverlay(new MarkerOptions().position(arg0.target)
.icon(mCurrentMarker));
// 反Geo搜索
mSearch.reverseGeoCode(new ReverseGeoCodeOption()
.location(arg0.target));
}@Override
public void onMapStatusChange(MapStatus arg0) {}
});

这个arg0.target就是当前map控件的中点位置的坐标,我们可以获取到,然后重新设置一下marker就可以了,不过在之前一定要记得mBaiduMap.clear();,不然会出现很多个marker。

二:如果通过中点的经纬度获取到周围的地点:使用到了GeoCoder类,这个类可以通过坐标反编译到地址,当然可以获取到这个地址周围的地址:

 public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(LocationActivity.this, "抱歉,未能找到结果",
Toast.LENGTH_LONG).show();
return;
}//这就是附近地址的列表
List<PoiInfo> list = result.getPoiList();
if (list != null && list.size() > 0) {
nearAddresses.clear();
nearAddresses.addAll(list);
nearAddressAdapter.notifyDataSetChanged();
}}

三:如何实现在输入框中一输入一个关键字,就出来一串地址列表:使用了PoiSearch类,这个类可以通过设置搜索监听事件,来搜索和输入关键字有关联的地址:

先给输入框加一个输入监听事件:

search_et.addTextChangedListener(new TextWatcher() {@Override
public void onTextChanged(CharSequence cs, int start, int before,int count) {
if (cs == null || cs.length() <= 0) {
search_ll.setVisibility(View.GONE);
return;
}//发起搜索请求
mPoiSearch.searchInCity((new PoiCitySearchOption())
.city(cityName).keyword(cs.toString()).pageNum(0)
.pageCapacity(20));
}@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {}@Override
public void afterTextChanged(Editable s) {}
});

然后在搜索结果回调中处理结果并展示出来:

 @Override
public void onGetPoiResult(PoiResult result) {
if (result == null
|| result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
List<PoiInfo> list = result.getAllPoi();
search_ll.setVisibility(View.VISIBLE);
if (list != null && list.size() > 0) {
searchAddresses.clear();
searchAddresses.addAll(list);
searchAddressAdapter.notifyDataSetChanged();
}
}
}

至此一个初步模仿58到家百度地图选择地址的效果就完成啦。通过此文希望和大家一起学习进步。

模仿58到家百度地图地址选择效果相关推荐

  1. mapbox 视角切换 3d与2d之前的切换,加指南针的旋转,模仿百度地图实现的效果

    mapbox 视角切换 3d与2d之前的切换,加指南针的旋转,模仿百度地图实现的效果 使用方法 附件下载地址:mapbox视角切换,模仿baidu地图的3d与2d的切换,与指南针的旋转-Javascr ...

  2. vue3调用百度地图标注选择位置并获取经纬度

    vue3调用百度地图标注选择位置并获取经纬度 参考了很多文章,最终结合百度文档各有采取完成地图选取经纬度. 第一步:引入百度地图,在当前需要地图的页面引入就行. const loadMapScript ...

  3. 前端解决百度地图地址逆解析(BMap.Geocoder())异步问题

    前端解决百度地图地址逆解析(BMap.Geocoder())异步问题 需求:将接口返回的坐标数据转换成详细的地址并渲染在页面上 问题:页面先渲染,地址后解析,导致渲染时没有数据显示 解决方法:new ...

  4. 调用百度地图地址下拉搜索栏爬坑

    调用百度地图地址下拉搜索栏爬坑 问题描述 在项目编写的过程中,我将调用百度API的部分封装成了一个组件,以便后续的调用.在组件的各项显示中,都能顺利显示,并且调用.但,我将组件调用后,发现,搜索提示栏 ...

  5. 百度地图 地址查询经纬度 插件vue-baidu-map

    效果 npm install vue-baidu-map --save 组件使用 <queryBaidu:visible.sync="visible1"v-if=" ...

  6. 百度地图的立体效果来实现

    百度映射用于使用二维映射图之前.如今,百度地图找到支持立体效果.为了实现立体效果只需要添加以下两个示例代码可: map.setMapType(BMAP_PERSPECTIVE_MAP);     // ...

  7. java 经纬度 地图_百度地图地址经纬度互转,java代码(v2版本)

    2个星期前用百度地图做了地址转换后.本来准备写个工具类添加到项目中突然发现不能用了,于是上百度地图api官网,发现接口已经更改了升级为v2,修改后可以使用,于是把工具类进行分享. 工具类:BaiDuM ...

  8. ios百度地图地址搜索功能-在线建议查询

    最近使用到了百度地图,总结一下,话不多说直接上代码: 使用的是searchBar+在线建议查询 一.准备工作 导入头文件#import <BaiduMapAPI_Search/BMKSearch ...

  9. 百度地图--3D棱柱效果---省边界数据抽取---Boundary、Point、Prism

    3D棱柱效果 上代码 var map = new BMapGL.Map("allmap");var point = new BMapGL.Point(116.404, 39.925 ...

最新文章

  1. 低层级GPU虚拟内存管理引论
  2. js实现-限时抢购倒计时间表
  3. 【Python】向函数传递列表
  4. 九度OJ 朋友圈 并查集
  5. mysql 5.5.15_mysql5.5.15配置主从数据库
  6. struts2.1.6教程二、struts.xml配置及例程
  7. eview面板数据之混合回归模型_【视频教程】Eviews系列25|面板数据回归分析之Hausman检验及本章常见问题解答...
  8. (128)System Verilog下降沿检测实例
  9. Spring结合马士兵视频的学习经验
  10. 中国三级流域空间分布数据/国家新区分布数据/NPP净初级生产力数据/植被覆盖空间分布数据/土地利用数据/NDVI数据/植被类型分布/土壤类型数据
  11. MIFARE系列8《D8M1.exe》
  12. Visual Studio 各版本下载合集vs2005下载+vs2008下载+vs2010下载+vs2012下载
  13. 5、海康威视摄像头配置和初步测试
  14. mike21 matlab tools,Mike post process with Matlab toolbox
  15. java架构师证书_java架构师证书怎么考?做架构师有什么要求?
  16. 最近发现的一个c# winform的一个很好用的excel控件 reogrid控件
  17. python模拟微信发红包,并验证随机性
  18. 周纪五 赧王下四十三年(己丑、前272)——摘要
  19. OpenInfra Days China 2020大会议程已上线,快来报名参加!
  20. MySQL 多个in 条件需要注意的地方

热门文章

  1. 64位计算机不能运行32位游戏,我想玩个游戏,仅支援64位系统,我家电脑win7 32位的,怎么办求解决方法...
  2. 208个最新最全大数据/人工智能专有名词术语 中英对照(强烈推荐收藏)
  3. 【安全学习】记一次内网环境渗透
  4. R语言list.files
  5. 宋鸿兵:当心美国资产毒垃圾
  6. 10.0_[Java 封装]-抽象/封装/构造/重载/ static 修饰符
  7. linux端口加密,通过OpenSSH的端口转发功能加密和解密tcp/ip数据
  8. 系统保护:占用磁盘100G的罪魁祸首---C/D盘无故占用内存(硬盘)空间原因
  9. 用加湿器模块做加湿器
  10. vue中怎么重置data和data中某个属性的初始状态?