轨迹记录和回放
轨迹记录:
轨迹记录需要实时获取定位,在地图界面的时候,是在继承的方法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();