高德地图实现仿qq,微信发送位置功能实现逻辑

  1. 定位获取当前位置
  2. 地图中间放置大头针
  3. 周边展示位置信息
  4. 周边信息点击后的逻辑操作
  5. 地图截屏功能实现
  6. 发送图片到其他页面或者服务器
  7. 获取到信息进行展示

    写的不好,勿喷,有疑问可以联系我qq 1308889768 或者475386936
    公司最近要求在框架添加发送位置逻辑,然而并没有在数据库和后台写入这个方法,所以,只能做出demo样式,等待后台处理

说起来高德定位还是挺好用的,起码对于初级开发者来说,高德的api文档是很容易接受的,对于高德定位,这里就不阐述了,跟着高德地图的demo走完全可以做到定位,获取经纬度,城市;

1,定位成功后,显示当前位置

当定位成功获取到经纬度,可以通过经纬度,在地图上边添加一个系统默认的点当做我的位置,可以自己写个marker,也可以用系统的,但是如果是你自己写的话,需要注意以下几点

-
- aMap.addMarker(markerOptions);
aMap.moveCamera(CameraUpdateFactory.changeLatLng(latLng));
aMap.moveCamera(CameraUpdateFactory.zoomTo(15));

当move在这个位置的时候其实算是地图的一次移动,所以如果你的aMap添加了地图当前可视范围监听的接口时候,它就会走一遍那个接口
    aMap.setOnCameraChangeListener(this);
所以如果你想根据地图的改变做些事情,比如更新周边商家信息,地理位置等,你需要注意了

2, 地图中间放置大头针

    然后我们可以看到qq和微信都有一个大头针始终在地图的中间,一直都没有动过,这里我用了个取巧的办法就是在布局文件中添加了一个iamgeview,放在地图的中间,但是因为有标题栏,所以具体的位置需要具体的微调,算是一个小bug,手机型号不同,位置可能也不同.经过微调后位置应该与当前marker的位置相同,具体逻辑就不进行展示了,无非是一个framlayout里边添加地图控件和中心位置设置iamgeview

3, 周边展示

     周边搜索的逻辑可以通过高德地图跟着方法走完全没有问题,注意里边一个方法的参数问题:
       PoiSearch.Query query = new PoiSearch.Query("", "餐饮服务|商务住宅|生活服务", "");
       // 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国)
    query.setPageSize(15);// 设置每页最多返回多少条poiitem
    query.setPageNum(currentPage);// 设置查第一页
    PoiSearch poiSearch = new PoiSearch(this, query);
    poiSearch.setOnPoiSearchListener(this);
    poiSearch.setBound(new PoiSearch.SearchBound(latLonPoint, 500, true));//
    poiSearch.searchPOIAsyn();// 异步搜索

在创建这个搜索类的时候要注意它的三个参数,上边已经标注,我们要注意的是三个参数前两个是必须要求填写一个的,第一个是关键字搜索,第二个是类型搜索,如果不了解有什么类型可以去官方文档查看,已经列举出来了,最后一个是区域范围限制,这里我试着填写城市,但是给我的地址不是从近到远的,所以直接传入空字符串

当搜索完毕后我们一个通过一个listview或者recycleview进行展示,设置点击事件等

4, 周边信息点击后的操作

    我们看qq或者微信点击下方位置,位置上右边的图标会变,地图中心改变,我的当前位置marker不变,这里我在传入listview值的时候,传入一个boolean值表示是否被选中,然后点击进行遍历切换,简单粗暴,boolean值控制item右边显示或者隐藏,当点击时候,
    如果你的amap实现了setOnCameraChangeListener(this);方法
    那么就只需要
        aMap.moveCamera(CameraUpdateFactory.changeLatLng(latLng));
    但是这里我们不想在移动的时候再进行搜索,所以要在onCameraChangeFinish()执行搜索逻辑前进行判断,设置boolean值,需要的时候才进行搜索

5,地图截屏

    地图截屏功能高德地图已经给出api,但是没有具体说我截出来的图片是什么样的图片,其实就是把mapview上所有的画面全部截取下来存到本地,一个方法就搞定了
  aMap.getMapScreenShot(this);

6,发送图片信息到服务器或者其他页面

    一切都准备就绪,我们这里有bitmap,但是不能讲bitmap传入其他页面,因为intent只能传递小的数据,如果传的数据过大就会没有反应,所以我们在地图截屏后,要保存当前存储的sd卡的位置,将位置和定位返回的PoiItem类传递给其他页面,如果是发送服务器,可能只需要截屏的位置和经纬度,方便点击下次进入地图定位.

7,获取展示
这个就非常简单了,使用任何viewgroup包括住一个textview和imageview,然后settext和setimage就好了
到此高德地图集成完毕,下边献上完整demo,里边还有6.0请求权限逻辑

完整demo地址:http://download.csdn.net/detail/qq_36428697/9759293
作为安卓初学者,我想说的是,虽然我们前边牛人很多,但是谁说一定要做个什么都会的牛人,我觉得我要做的只是踏实的走出每一步,找到存在感,丰富自己就好了,所以,适应压力,享受学习,快乐工作,加油,程序猿们;
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值