diff --git a/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages.properties b/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages.properties index 804ae9958d2..25ec384adcc 100644 --- a/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages.properties +++ b/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages.properties @@ -276,4 +276,5 @@ RatioDistanceLongVsShortTack=Ratio distance long tack / short tack RatioDurationLongVsShortTack=Ratio duration long tack / short tack Discarded=Discarded DurationFromRaceStartToFirstTack=Duration from race start to first tack -TypeOfFirstLeg=Type of first leg \ No newline at end of file +TypeOfFirstLeg=Type of first leg +TenthInLeg=Which tenth of the leg (1-10) \ No newline at end of file diff --git a/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages_de.properties b/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages_de.properties index 5103f05f406..11745b9e767 100755 --- a/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages_de.properties +++ b/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages_de.properties @@ -274,4 +274,5 @@ RatioDistanceLongVsShortTack=Verhältnis gesegelte Distanz auf Streck- zu Holebu RatioDurationLongVsShortTack=Verhältnis gesegelte Dauer auf Streck- zu Holebug Discarded=Gestrichen DurationFromRaceStartToFirstTack=Dauer vom Start der Wettfahrt bis zur ersten Wende -TypeOfFirstLeg=Art des ersten Bahnschenkels \ No newline at end of file +TypeOfFirstLeg=Art des ersten Bahnschenkels +TenthInLeg=Zehntel des Bahnschenkels (1-10) \ No newline at end of file diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasGPSFixContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasGPSFixContext.java index de18334a094..1400ad41c1e 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasGPSFixContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasGPSFixContext.java @@ -38,4 +38,13 @@ public interface HasGPSFixContext { @Statistic(messageKey = "SmoothedSpeed", resultDecimals = 2) Speed getSmoothedSpeed(); + + /** + * @return the tenth of the leg the fix is in, computed based on the "windward distance" along the leg; the first + * tenth has number 1, the last tenth has number 10. Should the fix not be linked to any leg, the result is + * {@code null}. For reaching legs, "windward distance" translates to rhumbline-based distance + * (along-course). + */ + @Dimension(messageKey="TenthInLeg") + Integer getTenthOfLeg(); } \ No newline at end of file diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java index 4687f02c450..174fba0756d 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java @@ -7,6 +7,7 @@ import com.sap.sailing.domain.common.SpeedWithBearing; import com.sap.sailing.domain.common.TackType; import com.sap.sailing.domain.common.tracking.GPSFixMoving; import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sailing.domain.tracking.WindPositionMode; import com.sap.sse.common.Bearing; import com.sap.sse.common.Distance; import com.sap.sse.common.Speed; @@ -107,4 +108,14 @@ public class GPSFixWithContext implements HasGPSFixContext { } return result; } + + @Override + public Integer getTenthOfLeg() { + final Distance windwardDistanceToGo = getTrackedLegOfCompetitorContext().getTrackedLegOfCompetitor().getWindwardDistanceToGo(getGPSFix().getTimePoint(), WindPositionMode.LEG_MIDDLE); + final Distance legWindwardDistance = getTrackedLegOfCompetitorContext().getTrackedLegOfCompetitor().getTrackedLeg().getWindwardDistance(); + // eliminate negative values which may result if the competitor has just entered the leg but is yet to arrive at the windward + // level of the waypoint just rounded: + final double fractionSailed = Math.max(0, legWindwardDistance.add(windwardDistanceToGo.scale(-1)).divide(legWindwardDistance)); + return (int) Math.min(10, 1+10*fractionSailed); + } } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html index 525370d26b9..0a117185073 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html @@ -5,6 +5,12 @@

What's New - SAP Sailing Analytics

+
November 2024
+
October 2024