bug6091: implemented percent target boat speed for chart/tails

This commit is contained in:
Axel Uhl
2025-01-29 13:48:09 +01:00
parent 64f5f91f7d
commit 76c41ae067
10 changed files with 36 additions and 9 deletions
@@ -123,6 +123,7 @@ import com.sap.sailing.domain.base.RemoteSailingServerReference;
import com.sap.sailing.domain.base.SailingServerConfiguration;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.base.Sideline;
import com.sap.sailing.domain.base.SpeedWithConfidence;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.base.configuration.DeviceConfiguration;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
@@ -167,6 +168,7 @@ import com.sap.sailing.domain.common.dto.SeriesCreationParametersDTO;
import com.sap.sailing.domain.common.impl.DataImportProgressImpl;
import com.sap.sailing.domain.common.impl.MasterDataImportObjectCreationCountImpl;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.common.polars.NotEnoughDataHasBeenAddedException;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
import com.sap.sailing.domain.common.racelog.tracking.DoesNotHaveRegattaLogException;
@@ -5464,7 +5466,7 @@ Replicator {
@Override
public Double getCompetitorRaceDataEntry(DetailType dataType, TrackedRace trackedRace, Competitor competitor,
TimePoint timePoint, LeaderboardGroup leaderboardGroup, String leaderboardName,
WindLegTypeAndLegBearingAndORCPerformanceCurveCache cache) throws NoWindException {
WindLegTypeAndLegBearingAndORCPerformanceCurveCache cache) throws NoWindException, NotEnoughDataHasBeenAddedException {
Double result = null;
final Course course = trackedRace.getRace().getCourse();
course.lockForRead(); // make sure the tracked leg survives this call even if a course update is pending
@@ -5883,6 +5885,16 @@ Replicator {
result = getBravoDoubleValue(BravoFixTrack::getExpeditionVMGTargVMGDeltaIfAvailable, trackedRace, competitor, timePoint);
break;
}
case PERCENT_TARGET_BOAT_SPEED: {
final PolarDataService polarDataService = getPolarDataService();
final GPSFixTrack<Competitor, GPSFixMoving> competitorTrack = trackedRace.getTrack(competitor);
final Wind wind = trackedRace.getWind(competitorTrack.getEstimatedPosition(timePoint, /* extrapolate */ true), timePoint);
final SpeedWithConfidence<Void> targetSpeed = polarDataService.getSpeed(trackedRace.getBoatOfCompetitor(competitor).getBoatClass(),
wind, trackedRace.getTWA(competitor, timePoint, cache));
final Speed sog = competitorTrack.getEstimatedSpeed(timePoint);
result = targetSpeed != null && targetSpeed.getObject() != null && sog != null ? 100.0 * sog.getKnots() / targetSpeed.getObject().getKnots() : null;
break;
}
default:
throw new UnsupportedOperationException("There is currently no support for the enum value '" + dataType
+ "' in this method.");