Browse Source

[new]增加轨迹详情增加去重

zk 10 months ago
parent
commit
abfc3eb507

+ 32 - 0
lib/data/bean/atmob_track_point.g.dart

@@ -0,0 +1,32 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'atmob_track_point.dart';
+
+// **************************************************************************
+// JsonSerializableGenerator
+// **************************************************************************
+
+AtmobTrackPoint _$AtmobTrackPointFromJson(Map<String, dynamic> json) =>
+    AtmobTrackPoint(
+      longitude: (json['lng'] as num).toDouble(),
+      latitude: (json['lat'] as num).toDouble(),
+      time: (json['ts'] as num).toInt(),
+      speed: (json['speed'] as num?)?.toDouble(),
+      bearing: (json['bearing'] as num?)?.toDouble(),
+      addr: json['addr'] as String?,
+      photo: json['photo'] as String?,
+      id: (json['id'] as num?)?.toInt(),
+    )..traceType = (json['traceType'] as num?)?.toInt();
+
+Map<String, dynamic> _$AtmobTrackPointToJson(AtmobTrackPoint instance) =>
+    <String, dynamic>{
+      'lng': instance.longitude,
+      'lat': instance.latitude,
+      'ts': instance.time,
+      'speed': instance.speed,
+      'bearing': instance.bearing,
+      'addr': instance.addr,
+      'photo': instance.photo,
+      'id': instance.id,
+      'traceType': instance.traceType,
+    };

+ 31 - 5
lib/module/track/track_detail/track_detail_controller.dart

@@ -3,6 +3,7 @@ import 'package:get/get.dart';
 import 'package:get/get_core/src/get_main.dart';
 import 'package:injectable/injectable.dart';
 import 'package:location/base/base_controller.dart';
+import 'package:location/utils/date_util.dart';
 import '../../../data/bean/atmob_track_point.dart';
 
 @injectable
@@ -23,11 +24,7 @@ class TrackDetailController extends BaseController {
     super.onInit();
     final argument = Get.arguments;
     if (argument != null && argument is List<AtmobTrackPoint>) {
-      if (argument.length >= 2) {
-        argument.first.traceType = lineStart;
-        argument.last.traceType = lineEnd;
-      }
-      originPoints.addAll(argument);
+      dealRepeatPoints(argument);
     }
   }
 
@@ -37,6 +34,35 @@ class TrackDetailController extends BaseController {
     _dealSearchList();
   }
 
+  void dealRepeatPoints(List<AtmobTrackPoint> argument) {
+    List<AtmobTrackPoint> newList = [];
+    AtmobTrackPoint? last;
+    for (int i = 0; i < argument.length; i++) {
+      AtmobTrackPoint point = argument[i];
+      if (i == 0 || i == argument.length - 1) {
+        newList.add(point);
+        continue;
+      }
+      if (last == null) {
+        last = point;
+        newList.add(point);
+      } else if (last.latitude != point.latitude ||
+          last.longitude != point.longitude ||
+          last.addr != point.addr ||
+          DateUtil.isTimeIntRangeExceed(
+              point.time, last.time, Duration(seconds: 30))) {
+        last = point;
+        newList.add(point);
+      }
+    }
+
+    if (newList.length >= 2) {
+      newList.first.traceType = lineStart;
+      newList.last.traceType = lineEnd;
+    }
+    originPoints.assignAll(newList);
+  }
+
   void back() {
     Get.back();
   }

+ 7 - 0
lib/utils/date_util.dart

@@ -26,6 +26,13 @@ class DateUtil {
     final diff = endTime.difference(startTime);
     return diff.isNegative ? diff.abs() > duration : diff > duration;
   }
+
+  static bool isTimeIntRangeExceed(int time, int time2, Duration duration) {
+    final diff = time2 - time;
+    return diff.isNegative
+        ? diff.abs() > duration.inSeconds
+        : diff > duration.inSeconds;
+  }
 }
 
 extension DateTimeExt on DateTime {