return an estimated fix from getBoatPositions if there is no real fix in an interval

This commit is contained in:
Axel Uhl committed 2012-07-12 23:43:39 +02:00
1 parent c7f2f7f33b
commit 0ba260ea2c
3 files changed
+21 -3

No files matched your search

@@ -115,6 +115,7 @@ import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.Wind;
import com.sap.sailing.domain.tracking.WindTrack;
import com.sap.sailing.domain.tracking.WindWithConfidence;
import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl;
import com.sap.sailing.domain.tracking.impl.TrackedRaceImpl;
import com.sap.sailing.domain.tracking.impl.WindImpl;
import com.sap.sailing.domain.tractracadapter.DomainFactory;
@@ -1235,6 +1236,12 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
} finally {
track.unlockAfterRead();
}
if (fixes.isEmpty()) {
// then there was no (smoothened) fix between fromTimePoint and toTimePointExcluding; estimate...
TimePoint middle = new MillisecondsTimePoint((toTimePointExcluding.asMillis()+fromTimePoint.asMillis())/2);
fixes.add(new GPSFixMovingImpl(track.getEstimatedPosition(middle, extrapolate), middle,
track.getEstimatedSpeed(middle)));
}
Iterator<GPSFixMoving> fixIter = fixes.iterator();
if (fixIter.hasNext()) {
final WindSource windSource = new WindSourceImpl(WindSourceType.COMBINED);
@@ -457,7 +457,7 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
*/
protected Triple<Map<CompetitorDTO, Date>, Map<CompetitorDTO, Date>, Map<CompetitorDTO, Boolean>> computeFromAndTo(
Date upTo, Iterable<CompetitorDTO> competitorsToShow) {
Date tailstart = new Date(upTo.getTime() - settings.getTailLengthInMilliseconds());
Date tailstart = new Date(upTo.getTime() - settings.getEffectiveTailLengthInMilliseconds());
Map<CompetitorDTO, Date> from = new HashMap<CompetitorDTO, Date>();
Map<CompetitorDTO, Date> to = new HashMap<CompetitorDTO, Date>();
Map<CompetitorDTO, Boolean> overlapWithKnownFixes = new HashMap<CompetitorDTO, Boolean>();
@@ -589,7 +589,7 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
protected void showBoatsOnMap(final Date date, final Iterable<CompetitorDTO> competitorsToShow) {
if (map != null) {
Date tailsFromTime = settings.isShowTails() ? new Date(date.getTime() - settings.getTailLengthInMilliseconds()) : new Date(date.getTime());
Date tailsFromTime = new Date(date.getTime() - settings.getEffectiveTailLengthInMilliseconds());
Date tailsToTime = new Date(date.getTime());
Set<CompetitorDTO> competitorDTOsOfUnusedTails = new HashSet<CompetitorDTO>(tails.keySet());
Set<CompetitorDTO> competitorDTOsOfUnusedBoatCanvases = new HashSet<CompetitorDTO>(boatCanvasOverlays.keySet());
@@ -1556,7 +1556,7 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
settings.setMaxVisibleCompetitorsCount(newSettings.getMaxVisibleCompetitorsCount());
requiredRedraw = true;
}
if(requiredRedraw) {
if (requiredRedraw) {
redraw();
}
}
@@ -31,7 +31,18 @@ public class RaceMapSettings {
this.zoomSettings = new RaceMapZoomSettings();
this.helpLinesSettings = new RaceMapHelpLinesSettings();
}
/**
* @return 0 if {@link #isShowTails()} returns <code>false</code>; {@link #getTailLengthInMilliseconds()} otherwise
*/
public long getEffectiveTailLengthInMilliseconds() {
return isShowTails() ? getTailLengthInMilliseconds() : 0;
}
/**
* The tail length as set in the dialog; feeds into {@link #getEffectiveTailLengthInMilliseconds()}, but only if
* {@link #isShowTails()} is <code>true</code>.
*/
public long getTailLengthInMilliseconds() {
return tailLengthInMilliseconds;
}