• Android使用高德地图实现运动轨迹绘制和轨迹回放


    功能的实现完全是使用高德地图进行实现的,先看一下效果图吧!

    下图是在绘制轨迹的过程:

    下图是在轨迹回放的过程:

     下图是记录运动的时间区间:

    其实这个实现起来还是很容易的,总体逻辑就是:定位——记录坐标——绘制轨迹

    一、定位


    AMapLocation   mlocationClient = new AMapLocationClient(getActivity());
            // 初始化定位参数
            mLocationOption = new AMapLocationClientOption();
            // 设置定位监听
            mlocationClient.setLocationListener(this);
            // 设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Device_Sensors);
            // 设置定位间隔,单位毫秒,默认为2000ms
            mLocationOption.setInterval(5000);
            mLocationOption.setOnceLocation(false);
            //设置是否返回地址信息(默认返回地址信息)
            mLocationOption.setNeedAddress(true);
            // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
            // 注意设置合适的定位时间的间隔(最小间隔支持为1000ms),并且在合适时间调用stopLocation()方法来取消定位请求
            // 在定位结束后,在合适的生命周期调用onDestroy()方法
            // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
            // 启动定位
            mLocationOption.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.Sport);
     mlocationClient.setLocationOption(mLocationOption);
                        //设置场景模式后最好调用一次stop,再调用start以保证场景模式生效
     mlocationClient.stopLocation();
     mlocationClient.startLocation();

     二、记录坐标

    对于记录坐标就需要使用服务端的接口来实现,通过定位之后记录当前的经纬度坐标,然后记录应用户的信息进行保存就可以了;

    坐标在记录的时候可以设置定位的时间间隔,假如运动的区间很小的话可以吧定位的时间设置的小一些,这样在绘制轨迹的时候轨迹会平滑一些

    、轨迹绘制

     1:初始化线条样式

    texTuresList.add(BitmapDescriptorFactory.fromResource(R.drawable.map_alr));
    texTuresList.add(BitmapDescriptorFactory.fromResource(R.drawable.custtexture));
    texTuresList.add(BitmapDescriptorFactory.fromResource(R.drawable.map_alr_night));
    //指定某一段用某个纹理,对应texTuresList的index即可, 四个点对应三段颜色
    texIndexList.add(0);
    texIndexList.add(2);
    texIndexList.add(1);
    options = new PolylineOptions();
    options.width(30);//设置宽度
    //加入对应的颜色,使用setCustomTextureList 即表示使用多纹理;
    options.setCustomTextureList(texTuresList);
    //设置纹理对应的Index
    options.setCustomTextureIndex(texIndexList);
    
    mUiSettings = aMap.getUiSettings();//实例化UiSettings类对象
    
    mUiSettings.setZoomControlsEnabled(false);
    mUiSettings.setMyLocationButtonEnabled(false); //显示默认的定位按钮
    
    aMap.setOnMyLocationChangeListener(this);
    aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false

     2:通过循环吧坐标设置到地图上

    for(int i=0;i 
    

     3:让轨迹上的图标移动

    aMap.moveCamera(CameraUpdateFactory.zoomTo(13));

  • 相关阅读:
    C/C++后端学习秘籍
    分享几个适合电脑小白使用清理C盘的方法
    JDK、eclipse软件的安装
    堆、堆排序、堆应用
    UI自动化测试框架设计(Selenium)
    react 笔记
    SRC实战 | CORS跨资源共享漏洞
    C++11(包装器)
    REST风格(黑马笔记)
    简单对比一下 C 与 Go 两种语言
  • 原文地址:https://blog.csdn.net/u014388322/article/details/128089264