97d7852f00d30716d1623be3317d94faf5b3ed44
java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/CourseChangeBasedTrackApproximation.java
| ... | ... | @@ -247,24 +247,7 @@ public class CourseChangeBasedTrackApproximation implements Serializable, GPSTra |
| 247 | 247 | final GPSFixMoving result; |
| 248 | 248 | final SpeedWithBearing nextSpeed = next.isEstimatedSpeedCached() ? next.getCachedEstimatedSpeed() : track.getEstimatedSpeed(next.getTimePoint()); |
| 249 | 249 | if (logFixes) { |
| 250 | - final boolean validityCached = next.isValidityCached(); |
|
| 251 | - final boolean validity; |
|
| 252 | - if (validityCached) { |
|
| 253 | - validity = next.isValidCached(); |
|
| 254 | - } else { |
|
| 255 | - track.lockForRead(); |
|
| 256 | - try { |
|
| 257 | - validity = track.isValid(next); |
|
| 258 | - } finally { |
|
| 259 | - track.unlockAfterRead(); |
|
| 260 | - } |
|
| 261 | - } |
|
| 262 | - // CSV logging: approxId, fixIndex, fixTimeMillis, validityCached, speedCached, COG, SOG |
|
| 263 | - System.out.println(System.identityHashCode(this) + "," + next.getTimePoint().asMillis() + "," |
|
| 264 | - + next.isValidityCached() + "," + next.isEstimatedSpeedCached() + "," |
|
| 265 | - + (nextSpeed == null ? "null" : nextSpeed.getBearing().getDegrees()) + "," |
|
| 266 | - + (nextSpeed == null ? "null" : nextSpeed.getKnots()) + "," |
|
| 267 | - + validityCached + "," + validity); |
|
| 250 | + logFix(next, nextSpeed); |
|
| 268 | 251 | } |
| 269 | 252 | if (nextSpeed != null) { |
| 270 | 253 | numberOfFixesAdded++; |
| ... | ... | @@ -322,6 +305,27 @@ public class CourseChangeBasedTrackApproximation implements Serializable, GPSTra |
| 322 | 305 | return result; |
| 323 | 306 | } |
| 324 | 307 | |
| 308 | + private void logFix(GPSFixMoving next, final SpeedWithBearing nextSpeed) { |
|
| 309 | + final boolean validityCached = next.isValidityCached(); |
|
| 310 | + final boolean validity; |
|
| 311 | + if (validityCached) { |
|
| 312 | + validity = next.isValidCached(); |
|
| 313 | + } else { |
|
| 314 | + track.lockForRead(); |
|
| 315 | + try { |
|
| 316 | + validity = track.isValid(next); |
|
| 317 | + } finally { |
|
| 318 | + track.unlockAfterRead(); |
|
| 319 | + } |
|
| 320 | + } |
|
| 321 | + // CSV logging: approxId, fixIndex, fixTimeMillis, validityCached, speedCached, COG, SOG |
|
| 322 | + System.out.println(System.identityHashCode(this) + "," + next.getTimePoint().asMillis() + "," |
|
| 323 | + + next.isValidityCached() + "," + next.isEstimatedSpeedCached() + "," |
|
| 324 | + + (nextSpeed == null ? "null" : nextSpeed.getBearing().getDegrees()) + "," |
|
| 325 | + + (nextSpeed == null ? "null" : nextSpeed.getKnots()) + "," |
|
| 326 | + + validityCached + "," + validity); |
|
| 327 | + } |
|
| 328 | + |
|
| 325 | 329 | /** |
| 326 | 330 | * Tries to extract a maneuver candidate from the current {@link #window}. See {@link #getManeuverCandidate()}. |
| 327 | 331 | * Basically, the maximum course change in the window has to be equal to or exceed the maneuver threshold. If |
java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html
| ... | ... | @@ -5,6 +5,14 @@ |
| 5 | 5 | <div id="mainContent"> |
| 6 | 6 | <h4 class="articleHeadline" id="sailingAnalyticsHeadline">What's New - Sailing Analytics</h4> |
| 7 | 7 | <div class="innerContent"> |
| 8 | + <h5 class="articleSubheadline">March 2026</h5> |
|
| 9 | + <ul class="bulletList"> |
|
| 10 | + <li>Position fixes are considered for maneuver analysis now only after enough later fixes |
|
| 11 | + (usually ten seconds) have been received to ensure that the older fixes don't change |
|
| 12 | + their dampened COG/SOG values based on the newer fixes. This sacrifices short |
|
| 13 | + maneuver calculation delays for better performance due to fewer re-calculations |
|
| 14 | + and reliable results with no difference between live and replay analysis.</li> |
|
| 15 | + </ul> |
|
| 8 | 16 | <h5 class="articleSubheadline">December 2025</h5> |
| 9 | 17 | <ul class="bulletList"> |
| 10 | 18 | <li>Added boat class Fareast 28R.</li> |