title: 实时轨迹

1. 轨迹记录

startRecordingPath(key)方法用于记录指定 Key 的轨迹,并实时上传至云端,默认为 5 秒 上传一次。

  1. location.startRecordingPath("key",provider);

设置上传频率

和位置同步一样,你可以根据时间或距离设置上传频率:

  • 根据时间间隔上传,最小间隔 1秒, 最大间隔 300 秒。

例如,每 2 秒 记录一个轨迹点:

  1. AMapLocationProvider provider= location.initAMapLocationProviderWithTime(2000);
  2. location.startRecordingPath("key",provider);
  • 根据距离间隔上传,最小间隔 0 米 (1 秒判断一次),最大间隔 500 米。

例如,每移动 10 米记录一个轨迹点:

  1. AMapLocationProvider provider= location.initAMapLocationProviderWithDistance(10);
  2. location.startRecordingPath("key",provider);

停止记录轨迹

stopRecordingPath(key)用于停止记录指定 Key 的轨迹。

  1. location.stopRecordingPath(key);

2. 轨迹查询

实时轨迹监听

addPathQueryListener(listener) 用于查询实时轨迹,轨迹一旦发生变化,将会实时更新。

  1. PathQuery pathQuery = location.getPathQuery("key");
  2. pathQuery.addPathQueryListener(new PathQueryListener() {
  3. @Override
  4. public void onLocationResult(PathSnapshot pathSnapshot) {
  5. if(pathSnapshot!=null) {
  6. Position latestPoint = pathSnapshot.getLatestPoint();
  7. Log.e(TAG, "latestPoint: " + latestPoint);
  8. double pathLength = pathSnapshot.getPathLength();
  9. Log.e(TAG, "pathlength: " + pathLength);
  10. int size = pathSnapshot.getPoints().size();
  11. Log.e(TAG, "size: " + size);
  12. }
  13. }
  14. @Override
  15. public void onCancelled(SyncError error) {
  16. Log.e(TAG, "onCancelled: "+error );
  17. }
  18. });

location 还提供了不同的轨迹查询创建方法:

  • getPathQuery(String key)为全量查询,默认查询全部的记录。
  • getPathQueryWithStartTime(String key, Date starttime)该实例以startTime开始,查询一个key的路径记录。
  • getPathQueryWithEndTime(String key, Date endTime)该实例以endTime结束,查询一个key的路径记录。
  • getPathQuery(String key,Date starttime, Date endTime)在startTime与endTime之间,查询一个key的路径记录。

单次轨迹查询

addPathQuerySingleListener(listener) 用于查询指定时间范围内的轨迹记录。

  1. pathQuery.addPathQuerySingleListener(new PathQueryListener() {
  2. @Override
  3. public void onLocationResult(PathSnapshot pathSnapshot) {
  4. if(pathSnapshot!=null) {
  5. Position latestPoint = pathSnapshot.getLatestPoint();
  6. Log.e(TAG, "latestPoint: " + latestPoint);
  7. double pathLength = pathSnapshot.getPathLength();
  8. Log.e(TAG, "pathlength: " + pathLength);
  9. int size = pathSnapshot.getPoints().size();
  10. Log.e(TAG, "size: " + size);
  11. }
  12. }
  13. @Override
  14. public void onCancelled(SyncError error) {
  15. Log.e(TAG, "onCancelled: "+error );
  16. }
  17. });

轨迹长度

PathSnapshot 的方法 getPathLength() 用于得到轨迹的长度,单位为米。

  1. pathQuery.addPathQuerySingleListener(new PathQueryListener() {
  2. @Override
  3. public void onLocationResult(PathSnapshot pathSnapshot) {
  4. if(pathSnapshot!=null) {
  5. double pathLength = pathSnapshot.getPathLength();
  6. Log.e(TAG, "pathlength: " + pathLength);
  7. }
  8. }
  9. @Override
  10. public void onCancelled(SyncError error) {
  11. Log.e(TAG, "onCancelled: "+error );
  12. }
  13. });