山东大学-创新设计-地图圈系统

轨迹记录和回放

轨迹记录:

轨迹记录需要实时获取定位,在地图界面的时候,是在继承的方法onLocationChanged()中进行定位,所以可以在onLocationChanged()方法中进行记录。使用AMapLocation对象获取位置、速度信息等等。

mylatitude=aMapLocation.getLatitude();
mylongitude=aMapLocation.getLongitude();
aMapLocation.getLocationType(); //获取当前定位结果来源,如网络定位结果,详见定位类型表
aMapLocation.getAccuracy(); //获取精度信息
aMapLocation.getBearing(); //获取方向角信息
aMapLocation.getSpeed(); //获取速度信息  单位:米/秒
aMapLocation.getLocationType(); //查看是什么类型的点

画线,使用PolylineOptions类,将上一个记录点和这一个记录点之间画一条线

PolylineOptions options = new PolylineOptions();
//上一个点的经纬度
options.add(new LatLng(privLocation.getLatitude(), privLocation.getLongitude()));
//当前的经纬度
options.add(new LatLng(curLocation.getLatitude(), curLocation.getLongitude()));
options.width(10).geodesic(true).color(Color.GREEN);
aMap.addPolyline(options);

保存,将需要的形式传到后台进行保存。

轨迹回放:

使用MovingPointOverlay类来进行点的平滑移动。

添加轨迹线,使用Polyline类来画线,

mPolyline = mAMap.addPolyline(new PolylineOptions()
.color(Color.GREEN).width(5)
.addAll(list)
.useGradient(true)
.width(18));

LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(list.get(0));
builder.include(list.get(list.size() - 2));

mAMap.animateCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 100));

开始运动

 List<LatLng> points = readLatLngs(latlngList);
        // 构建 轨迹的显示区域
        LatLngBounds.Builder builder = new LatLngBounds.Builder();
        builder.include(points.get(0));
        builder.include(points.get(points.size() - 1));

        mAMap.animateCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 50));
        LatLng drivePoint = points.get(0);
        Pair<Integer, LatLng> pair = SpatialRelationUtil.calShortestDistancePoint(points, drivePoint);
        points.set(pair.first, drivePoint);
        subList = points.subList(pair.first, points.size());

        // 设置轨迹点
        smoothMarker.setPoints(subList);
        // 设置平滑移动的总时间  单位  秒
        smoothMarker.setTotalDuration(speed);

        // 设置移动的监听事件
        smoothMarker.setMoveListener(new MovingPointOverlay.MoveListener() {
            @Override
            public void move(final double distance) {

                try {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            index=smoothMarker.getIndex();
                        }
                    });

                } catch (Throwable e) {
                    e.printStackTrace();
                }
            }
        });

        // 开始移动
        smoothMarker.startSmoothMove();

停止移动

smoothMarker.stopMove();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值