diff options
Diffstat (limited to 'test-runner/src')
| -rw-r--r-- | test-runner/src/main/kotlin/org/terst/nav/track/TrackRepository.kt | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/test-runner/src/main/kotlin/org/terst/nav/track/TrackRepository.kt b/test-runner/src/main/kotlin/org/terst/nav/track/TrackRepository.kt index a68e315..98d0bf3 100644 --- a/test-runner/src/main/kotlin/org/terst/nav/track/TrackRepository.kt +++ b/test-runner/src/main/kotlin/org/terst/nav/track/TrackRepository.kt @@ -10,41 +10,45 @@ class TrackRepository { var isRecording: Boolean = false private set - private val points = mutableListOf<TrackPoint>() + private val activePoints = mutableListOf<TrackPoint>() + private val pastTracks = mutableListOf<List<TrackPoint>>() fun startTrack() { - points.clear() + activePoints.clear() isRecording = true } fun stopTrack() { + if (isRecording && activePoints.isNotEmpty()) { + pastTracks.add(activePoints.toList()) + } isRecording = false } fun addPoint(point: TrackPoint): Boolean { if (!isRecording) return false - points.add(point) + activePoints.add(point) return true } - fun getPoints(): List<TrackPoint> = points.toList() + fun getPoints(): List<TrackPoint> = activePoints.toList() + + fun getPastTracks(): List<List<TrackPoint>> = pastTracks.toList() fun computeStats(): TrackStats? { - if (points.size < 2) return null + if (activePoints.size < 2) return null var distNm = 0.0 - for (i in 1 until points.size) { - distNm += haversineNm(points[i - 1].lat, points[i - 1].lon, points[i].lat, points[i].lon) + for (i in 1 until activePoints.size) { + distNm += haversineNm(activePoints[i - 1].lat, activePoints[i - 1].lon, activePoints[i].lat, activePoints[i].lon) } - val durationMs = points.last().timestampMs - points.first().timestampMs - val avgSog = if (durationMs > 0) { - points.map { it.sogKnots }.average() - } else 0.0 + val durationMs = activePoints.last().timestampMs - activePoints.first().timestampMs + val avgSog = if (durationMs > 0) activePoints.map { it.sogKnots }.average() else 0.0 return TrackStats(distNm, durationMs, avgSog) } companion object { fun haversineNm(lat1: Double, lon1: Double, lat2: Double, lon2: Double): Double { - val r = 3440.065 // Earth radius in nautical miles + val r = 3440.065 val dLat = Math.toRadians(lat2 - lat1) val dLon = Math.toRadians(lon2 - lon1) val a = sin(dLat / 2) * sin(dLat / 2) + |
