title: 实时轨迹

1. 轨迹记录

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

  1. [locationService startRecordingPathForKey:@"key"];

- startRecordingPathForKey:withCompletionBlock:方法可以在上传开始后执行一次回调。

  1. [locationService startRecordingPathForKey:@"key" withCompletionBlock:^(NSError * _Nullable error) {
  2. NSLog(@"Recording started!");
  3. }];

设置上传频率

和位置同步一样,你可以根据时间或距离设置上传频率,这种方式需要传入一个WDGAmapLocationProvider实例:

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

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

  1. WDGAMapLocationProvider *locationProvider = [[WDGAMapLocationProvider alloc] initWithTimeInterval:2.0];
  2. [locationService startRecordingPathForKey:@"key" withLocationProvider:locationProvider];
  • 根据距离间隔上传,最小间隔 0 米 (1 秒判断一次),最大间隔 100 米。

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

  1. WDGAMapLocationProvider *locationProvider = [[WDGAMapLocationProvider alloc] initWithDistance:10.0];
  2. [locationService startRecordingPathForKey:@"key" withLocationProvider:locationProvider];

- startTracingPositionForKey:withLocationProvider:withCompletionBlock:方法可以在上传开始后执行一次回调。

  1. [locationService startRecordingPathForKey:@"key" withLocationProvider:locationProvider withCompletionBlock:^(NSError * _Nullable error) {
  2. NSLog(@"Recording started!");
  3. }];

停止记录轨迹

- stopRecordingPathForKey:用于停止记录指定 Key 的轨迹。

  1. [locationService stopRecordingPathForKey:@"key"];

- stopRecordingPathForKey:withCompletionBlock:方法可以在上传开始后执行一次回调。

  1. [locationService stopRecordingPathForKey:@"key" withCompletionBlock:^(NSError * _Nullable error) {
  2. NSLog(@"Recording stopped!");
  3. }];

2. 轨迹查询

创建轨迹查询

- pathQueryForKey:startTime:endTime: 用于查询实时轨迹,轨迹一旦发生变化,将会实时更新。

  1. NSDate *start = [NSDate dateWithTimeIntervalSince1970:1497863758];
  2. NSDate *end = [NSDate date];
  3. WDGPathQuery *pathQuery = [locationService pathQueryForKey:@"key" startTime:start endTime:end];

注意:

如果 endTime 传入了 nil 或者是未来的事件,查询将会一直返回最新的轨迹记录,直到到达设置时间或监听被取消为止。

WilddogLocation SDK 还提供了不同参数版本的轨迹查询创建方法:

  • pathQueryForKey:为全量查询,默认查询全部的记录。
  • pathQueryForKey:startTime:只设置查询开始时间,一直查询最新的记录。
  • pathQueryForKey:endTime:只设置查询结束时间,从最早的记录开始。

实时轨迹监听

- observeSingleEventWithBlock: 用于持续监听指定时间范围内的轨迹记录,直到设定结束时间到达为止。

  1. WilddogHandle handle = [pathQuery observeWithBlock:^(WDGPathSnapshot * _Nonnull snapshot) {
  2. NSLog(@"Path: %@", snapshot.points);
  3. }];

实时轨迹监听结束后也需要移除监听:

  1. // 使用handle移除单个监听
  2. [pathQuery removeObserverWithHandle:handle];
  3. // 移除所有监听
  4. [pathQuery removeAllObservers];

如果你想绘制一条实时的轨迹,可以利用 latestPoint 实时绘制新的轨迹点。

  1. WilddogHandle handle = [pathQuery observeWithBlock:^(WDGPathSnapshot * _Nonnull snapshot) {
  2. NSLog(@"Latest Point: %@", snapshot.latestPoint);
  3. }];

单次轨迹查询

- observeSingleEventWithBlock: 用于查询指定时间范围内的轨迹记录。

  1. [pathQuery observeSingleEventWithBlock:^(WDGPathSnapshot * _Nonnull snapshot) {
  2. NSLog(@"Path: %@", snapshot.points);
  3. }];

轨迹长度

WDGPathSnapshot 的属性 length 用于记录轨迹的长度,单位为米。

  1. WilddogHandle handle = [pathQuery observeWithBlock:^(WDGPathSnapshot * _Nonnull snapshot) {
  2. NSLog(@"Path length: %d", snapshot.length);
  3. }];

3. 移除轨迹

- removePathForKey: 用于删除服务器存储的指定 key 的轨迹记录。

  1. [locationService removePathForKey:@"key"];

- removePathForKey:withCompletionBlock: 可以在删除操作完成后执行一次回调。

  1. [locationService removePathForKey:@"key" withCompletionBlock:^(NSError * _Nullable error) {
  2. NSLog(@"Path deleted!");
  3. }];