Android实现高德地图轨迹回放

  • 写在前面
  • 准备
    • 官方文档解读
      • 创建应用:
      • 地图api引入:
      • 权限添加
    • 效果展示
  • 过程实现
    • 地图初始化
    • 定位
    • 显示标记点
    • 点平滑移动
    • 添加呼吸点
  • 写在结尾

写在前面

本篇文章是对近期工作项目中集成高德地图轨迹回放和单/多点标记功能的一个总结。方便以后使用时翻阅,也方便大家,避免跟我踩一样的坑

欢迎指正,不喜勿喷,请你善良,谢谢!!!

准备

官方文档解读

 首先去[官网](https://lbs.amap.com/api/android-sdk/summary)查看开发指南进行项目中需要的内容准备。

创建应用:

左上角头像位置指针划过出现如图所示内容
后点击应用管理->我的应用,如下图

上图中创建新应用后进入如下界面

上图两个步骤完成后点击新建,新建后就会在我的应用中显示你自己创建的这个应用,我用的是test作为演示。新建完成后如下图

点击添加展示图如下:

将上图中内容编辑完成后提交,就会在应用列表中将key展示出来,这里我就不做展示了。
以上的内容就是官方文档中获取key的内容。相对来说还是比较简单的。

地图api引入:

 //定位implementation 'com.amap.api:location:5.1.0'//搜索implementation 'com.amap.api:search:7.3.0'//导航implementation 'com.amap.api:navi-3dmap:7.6.0_3dmap7.6.0'

权限添加

 <!--允许程序打开网络套接字--><uses-permission android:name="android.permission.INTERNET" /><!--允许程序设置内置sd卡的写权限--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!--允许程序获取网络状态--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!--允许程序访问WiFi网络信息--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!--允许程序读写手机状态和身份--><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!--用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><!--用于访问GPS定位--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><!--用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><!--用于读取手机当前的状态--><uses-permission android:name="android.permission.READ_PHONE_STATE"/><!--用于申请调用A-GPS模块--><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/><!--获取运营商信息,用于支持提供运营商信息相关的接口--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!--用于访问wifi网络信息,wifi信息会用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><!--用于访问网络,网络定位需要上网--><uses-permission android:name="android.permission.INTERNET" /><!--用于读取手机当前的状态--><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

并且要在AndroidManifest.xml的application中添加如下代码:

<meta-dataandroid:name="com.amap.api.v2.apikey"android:value="创建应用中你自己生成的key" /><service android:name="com.amap.api.location.APSService" />
 到这里准备工作就完成了。我先上个效果图展示一下。

效果展示


有一个点呼吸的效果是我今天早上才加进去的,所以展示效果上面没有体现出来呢,不过这个功能也不是本次项目的重点

过程实现

地图初始化

     mMapView.onCreate(savedInstanceState);if (aMap == null) {aMap = mMapView.getMap();myLocationStyle = new MyLocationStyle();myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);// 设置圆形的边框颜色myLocationStyle.strokeColor(Color.argb(50, 30, 150, 180));// 设置圆形的填充颜色myLocationStyle.radiusFillColor(Color.argb(50, 30, 150, 180));// 设置圆形的边框粗细myLocationStyle.strokeWidth(1.0f);//设置显示定位按钮 并且可以点击UiSettings settings = aMap.getUiSettings();//设置了定位的监听aMap.setLocationSource(this);// 是否显示定位按钮settings.setMyLocationButtonEnabled(true);//显示定位层并且可以触发定位,默认是flaseaMap.setMyLocationEnabled(true);// 定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。}

定位

  //初始化定位mlocationClient = new AMapLocationClient(getApplicationContext());//设置定位回调监听mlocationClient.setLocationListener(this);//初始化定位参数mLocationOption = new AMapLocationClientOption();//设置定位模式为Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置是否返回地址信息(默认返回地址信息)mLocationOption.setNeedAddress(true);//设置是否只定位一次,默认为falsemLocationOption.setOnceLocation(false);//设置是否强制刷新WIFI,默认为强制刷新mLocationOption.setWifiActiveScan(true);//设置是否允许模拟位置,默认为false,不允许模拟位置mLocationOption.setMockEnable(false);//设置定位间隔,单位毫秒,默认为2000msmLocationOption.setInterval(2000);//给定位客户端对象设置定位参数mlocationClient.setLocationOption(mLocationOption);//启动定位mlocationClient.startLocation();
/**
* 定位回调
* /@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {if (mListener != null && aMapLocation != null) {if (aMapLocation != null && aMapLocation.getErrorCode() == 0) {//定位成功回调信息,设置相关消息aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见官方定位类型表aMapLocation.getLatitude();//获取纬度aMapLocation.getLongitude();//获取经度aMapLocation.getAccuracy();//获取精度信息SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date(aMapLocation.getTime());df.format(date);//定位时间aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。aMapLocation.getCountry();//国家信息aMapLocation.getProvince();//省信息aMapLocation.getCity();//城市信息aMapLocation.getDistrict();//城区信息aMapLocation.getStreet();//街道信息aMapLocation.getStreetNum();//街道门牌号信息aMapLocation.getCityCode();//城市编码aMapLocation.getAdCode();//地区编码// 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置if (isFirstLoc) {//设置缩放级别aMap.moveCamera(CameraUpdateFactory.zoomTo(18));//将地图移动到定位点aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude())));//点击定位按钮 能够将地图的中心移动到定位点mListener.onLocationChanged(aMapLocation);//添加图钉// aMap.addMarker(getMarkerOptions(amapLocation));//获取定位信息StringBuffer buffer = new StringBuffer();buffer.append(aMapLocation.getCountry() + ""+ aMapLocation.getProvince() + ""+ aMapLocation.getCity() + ""+ aMapLocation.getProvince() + ""+ aMapLocation.getDistrict() + ""+ aMapLocation.getStreet() + ""+ aMapLocation.getStreetNum());Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show();isFirstLoc = false;// 显示系统小蓝点mListener.onLocationChanged(aMapLocation);}} else {Log.e("AmapError", "location Error, ErrCode:"+ aMapLocation.getErrorCode() + ", errInfo:"+ aMapLocation.getErrorInfo());Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG).show();}}}

显示标记点

  ArrayList<BitmapDescriptor> normalGiflist = new ArrayList<>();normalGiflist.add(BitmapDescriptorFactory.fromResource(R.drawable.icon_normal1));normalGiflist.add(BitmapDescriptorFactory.fromResource(R.drawable.icon_normal17));normalGiflist.add(BitmapDescriptorFactory.fromResource(R.drawable.icon_normal38));for (int i = 0; i < coords.length; i += 2) {Marker marker = aMap.addMarker(new MarkerOptions().position(new LatLng(coords[i + 1], coords[i])).anchor(0.5f, 0.5f).icons(normalGiflist).period(15));markerList.add(marker);}

注意:这里要说一下关于点标记删除的问题,删除点要将点遍历后通过remove移除,虽然map.clear()方法也可以使用,但是如果同时有很多中marker在显示的话就不建议使用了

我就死在了这个上面纠结了好几天,导致各种bug频现,唉,说多了全是泪啊

Android实现高德地图轨迹回放相关推荐

  1. android中高德地图轨迹回放,轨迹回放-点标记-示例中心-JS API 2.0 示例 | 高德地图API...

    轨迹回放 html, body, #container { height: 100%; width: 100%; } .input-card .btn{ margin-right: 1.2rem; w ...

  2. android高德地图轨迹偏纠,GitHub - YangHaoyi/DrawTraceDemo: 高德地图轨迹回放带定位纠偏加彩虹渐变线...

    DrawTraceDemo 高德地图轨迹回放带定位纠偏加彩虹渐变线 由于高德自身持续定位存在偏移状况,故摒弃了高德自身的定位点,改用自定义marker点作为定位点 加注轨迹纠偏函数,根据时间判定此次移 ...

  3. 高德地图轨迹回放功能

    一.介绍        在项目过程中,需要对自己设备产品输出的定位信息进行验证.通过路跑测试获取到了一组经纬度数据.这时需要验证这组数据是否是实际路跑测试的轨迹,就用到了高德地图的轨迹回放功能.下面将 ...

  4. 高德地图-轨迹回放(二)

    利用高德地图作轨迹回放的另一种方法是利用官方api覆盖物中的AMap.Polyline来做,官方给出的例子中也是此原理实现的. 实现地图轨迹的主要函数如下 function track(){map.c ...

  5. 高德地图轨迹回放、点的弹跳效果、浏览器环境监测、设置地图的主题样式、GPS坐标转为高德坐标、地图加载提示、地图DOM事件、修改图层等API接口

    1.轨迹回放 https://lbs.amap.com/api/javascript-api/example/marker/replaying-historical-running-data 2.点的 ...

  6. 高德地图轨迹回放、路径规划以及计算面积(超详细!!)

    主要涉及到高德地图的路径规划.区域规划以及轨迹回放功能. 一.基础设置:地图 //创建地图var map = new AMap.Map('map',{zoom:17,//视角级别//中心点坐标// p ...

  7. 高德地图轨迹回放_高德地图上线了一个新功能….

    文.路人甲TM 德地图这两天刚上线了一个叫做「家人地图」的功能,所谓家人地图顾名思义,就是你可以通过高德地图组建一个家人圈,在这个圈子里面你可以看到你的家人在什么位置,当你的家人到达什么位置的时候自动 ...

  8. 高德地图轨迹回放_高德上线“家人地图”功能

    鞭牛士 7月14日消息,高德今日上线了"家人地图"功能,可以让家人随时看到彼此的位置,特别是针对空巢老人家庭,子女忙于工作,父母独自在家,老人有没有出门,外出去到了哪里,有没有偏离 ...

  9. android 基于高德地图的轨迹回放

    android 基于高德地图的轨迹回放 前段时间公司项目有一个需求,就是需要看到设备上传之后的轨迹路线,并且可以实现回放的整个过程,功能包括路线回放.地图位置插点.回放之后的轨迹标记颜色.回放加速等功 ...

最新文章

  1. Netty with protobuf(二)
  2. Linux内核中断底半部处理--工作队列
  3. 使用python实现多维数据降维操作
  4. Jupyter notebook入门教程(上)
  5. nlp自然语言处理_不要被NLP Research淹没
  6. js提交java后台,双引号转义为amp;quot;解决办法……StringEscapeUtils.unescapeHtml4完美解决
  7. 万恶的C++ 【1】:类型及运算
  8. Oracle左连接、右连接、全外连接以及(+)号用法
  9. JDBC+Servlet+JSP实现简单的数据遍历和查找功能
  10. u8服务器修改数据源,用友U8服务器修改数据库端口
  11. git-svn使用教程:git与svn进行同步
  12. html 左侧居中对齐,HTML的居中对齐
  13. Arduino UNO测试BME280温湿度气压传感器
  14. 汉字拼音数据库_WinDev
  15. Neo4j学习笔记(三) 导入数据
  16. android视频自动旋转,Android 使用PLDroidPlayer播放网络视频 根据视频角度自动旋转...
  17. php自动获取节气对应的年月日_php如何通过日期获取农历、节日、节气?
  18. 亚马逊aws 服务器删除_亚马逊aws服务器免费套餐及被扣款怎么办
  19. 计算机组成原理求地址范围,计算机组成原理中给定两个地址码,如何求这两个地址码之间总容量...
  20. Android HorizontalScrollView 内容宽度

热门文章

  1. 山东移动携手华云数据打造DICT战略合作伙伴生态圈 推动区域数字经济高质量发展
  2. 短视频剪辑如何才能更吸引人?
  3. Polaris Office for Mac(经典办公套件)
  4. 个人身份认证接口介绍
  5. 【翻译】开发人员的技术写作
  6. 高德地图嵌入到threejs全景中的踩坑指南
  7. 【京东春招】别人的面经中记录的问题
  8. (自兴人工智能)python元组
  9. JavaUUID的理解
  10. jQuery UI Autocomplete是jQuery UI的自动完成组件