From 1bc2e0ccec6efd6a46b41121a9602d694edae893 Mon Sep 17 00:00:00 2001 From: fmittag Date: Fri, 15 Jun 2012 16:31:59 +0200 Subject: [PATCH 1/4] fix for too many time ticks for some time ranges (e.g. 6 min) --- .../ui/shared/controls/slider/TimeTicksCalculator.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/controls/slider/TimeTicksCalculator.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/controls/slider/TimeTicksCalculator.java index d6556f5c90f..30e1a3d1209 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/controls/slider/TimeTicksCalculator.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/controls/slider/TimeTicksCalculator.java @@ -69,11 +69,6 @@ public class TimeTicksCalculator { // round to a tenfold of 1, 2, 2.5 or 5 normalized = interval / magnitude; - // multiples for a linear scale - if (magnitude == 1) { - multiples = new int[] { 1, 2, 5, 10 }; - } - // normalize the interval to the nearest multiple for (int i = 0; i < multiples.length; i++) { interval = multiples[i]; @@ -197,11 +192,6 @@ public class TimeTicksCalculator { if(time <= max) tickPositions.add(new TickPosition(time)); - // record information on the chosen unit - for dynamic label formatter - // tickPositions.info = extend(normalizedInterval, { - // totalRange: interval * count - // }); - return tickPositions; } From 6b17f5563376786bf406a2fd746e9823e3f195e3 Mon Sep 17 00:00:00 2001 From: fmittag Date: Fri, 15 Jun 2012 16:34:17 +0200 Subject: [PATCH 2/4] added minWindConfidence and maxWindConfidence to each WindTrackInfoDTO. This can be used later on to filter out wind sources with really bad confidence values --- .../gwt/ui/server/SailingServiceImpl.java | 30 ++++++++++++++++--- .../gwt/ui/shared/WindTrackInfoDTO.java | 2 ++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index e4e4679519e..3374fb91f90 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -826,16 +826,27 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS windTrackInfoDTO.dampeningIntervalInMilliseconds = windTrack .getMillisecondsOverWhichToAverageWind(); TimePoint timePoint = fromTimePoint; + Double minWindConfidence = 2.0; + Double maxWindConfidence = -1.0; for (int i = 0; i < numberOfFixes; i++) { WindWithConfidence> averagedWindWithConfidence = windTrack.getAveragedWindWithConfidence(position, timePoint); if (averagedWindWithConfidence != null) { WindDTO windDTO = createWindDTOFromAlreadyAveraged(averagedWindWithConfidence.getObject(), windTrack, timePoint); - windDTO.confidence = averagedWindWithConfidence.getConfidence(); + double confidence = averagedWindWithConfidence.getConfidence(); + windDTO.confidence = confidence; windTrackInfoDTO.windFixes.add(windDTO); + if(confidence < minWindConfidence) { + minWindConfidence = confidence; + } + if(confidence > maxWindConfidence) { + maxWindConfidence = confidence; + } } timePoint = new MillisecondsTimePoint(timePoint.asMillis() + millisecondsStepWidth); } + windTrackInfoDTO.minWindConfidence = minWindConfidence; + windTrackInfoDTO.maxWindConfidence = maxWindConfidence; } } } @@ -875,27 +886,38 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS // TODO consider parallelizing if (windSourceTypeNames == null || windSourceTypeNames.contains(windSource.getType().name())) { WindTrackInfoDTO windTrackInfoDTO = new WindTrackInfoDTO(); + windTrackInfoDTOs.put(windSource, windTrackInfoDTO); windTrackInfoDTO.windFixes = new ArrayList(); WindTrack windTrack = trackedRace.getOrCreateWindTrack(windSource); - windTrackInfoDTOs.put(windSource, windTrackInfoDTO); windTrackInfoDTO.dampeningIntervalInMilliseconds = windTrack .getMillisecondsOverWhichToAverageWind(); TimePoint timePoint = from; + Double minWindConfidence = 2.0; + Double maxWindConfidence = -1.0; for (int i = 0; i < numberOfFixes && newestEvent != null && timePoint.compareTo(newestEvent) < 0; i++) { WindWithConfidence> averagedWindWithConfidence = windTrack.getAveragedWindWithConfidence(null, timePoint); if (averagedWindWithConfidence != null) { + double confidence = averagedWindWithConfidence.getConfidence(); WindDTO windDTO = createWindDTOFromAlreadyAveraged(averagedWindWithConfidence.getObject(), windTrack, timePoint); - windDTO.confidence = averagedWindWithConfidence.getConfidence(); + windDTO.confidence = confidence; windTrackInfoDTO.windFixes.add(windDTO); + if(confidence < minWindConfidence) { + minWindConfidence = confidence; + } + if(confidence > maxWindConfidence) { + maxWindConfidence = confidence; + } } timePoint = new MillisecondsTimePoint(timePoint.asMillis() + millisecondsStepWidth); } + windTrackInfoDTO.minWindConfidence = minWindConfidence; + windTrackInfoDTO.maxWindConfidence = maxWindConfidence; } } } return result; } - + @Override public WindInfoForRaceDTO getAveragedWindInfo(RaceIdentifier raceIdentifier, Date from, Date to, long resolutionInMilliseconds, Collection windSourceTypeNames) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/WindTrackInfoDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/WindTrackInfoDTO.java index 96df9636293..cf4a8490340 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/WindTrackInfoDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/WindTrackInfoDTO.java @@ -7,6 +7,8 @@ import com.google.gwt.user.client.rpc.IsSerializable; public class WindTrackInfoDTO implements IsSerializable { public List windFixes; public long dampeningIntervalInMilliseconds; + public double minWindConfidence; + public double maxWindConfidence; public WindTrackInfoDTO() {} } From af6336ee0273b9291c70579ada652f52cc121b50 Mon Sep 17 00:00:00 2001 From: fmittag Date: Fri, 15 Jun 2012 17:12:29 +0200 Subject: [PATCH 3/4] added a way to format a time tick label based on the current time and the previous time --- .../java/com/sap/sailing/gwt/ui/client/TimePanel.java | 9 ++++----- .../gwt/ui/shared/controls/slider/SliderBar.java | 11 +++++++---- .../gwt/ui/shared/controls/slider/TimeSlider.java | 5 ++++- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TimePanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TimePanel.java index 39eef11e45f..87927e1f685 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TimePanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/TimePanel.java @@ -127,12 +127,11 @@ public class TimePanel extends FormPanel implements timeSlider = new TimeSlider(); timeSlider.setEnabled(true); timeSlider.setLabelFormatter(new SliderBar.LabelFormatter() { - final DateTimeFormat formatter = DateTimeFormat.getFormat("HH:mm"); + final DateTimeFormat timeWithMinutesFormatter = DateTimeFormat.getFormat("HH:mm"); @Override - public String formatLabel(SliderBar slider, double value) { - Date date = new Date(); - date.setTime((long) value); - return formatter.format(date); + public String formatLabel(SliderBar slider, Double value, Double previousValue) { + Date date = new Date(value.longValue()); + return timeWithMinutesFormatter.format(date); } }); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/controls/slider/SliderBar.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/controls/slider/SliderBar.java index ce2f9cf0ffd..d69f15d4095 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/controls/slider/SliderBar.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/controls/slider/SliderBar.java @@ -89,7 +89,7 @@ public class SliderBar extends FocusPanel implements RequiresResize, HasValue 0) { // Create the labels or make them visible + Double previousValue = null; for (int i = 0; i <= numTickLabels; i++) { Element label = null; if (i < tickLabelElements.size()) { @@ -892,7 +893,7 @@ public class SliderBar extends FocusPanel implements RequiresResize, HasValue Date: Fri, 15 Jun 2012 17:28:32 +0200 Subject: [PATCH 4/4] filter out expedition wind sources with very little confidence (< 0.01) in the racemap --- .../java/com/sap/sailing/gwt/ui/shared/racemap/RaceMap.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/RaceMap.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/RaceMap.java index 46b20df45cb..418914c73ac 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/RaceMap.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/RaceMap.java @@ -417,7 +417,10 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe WindTrackInfoDTO windTrackInfoDTO = windInfo.windTrackInfoByWindSource.get(windSource); switch (windSource.getType()) { case EXPEDITION: - windSourcesToShow.add(new Pair(windSource, windTrackInfoDTO)); + // we filter out measured wind sources with a very little confidence + if(windTrackInfoDTO.minWindConfidence > 0.01) { + windSourcesToShow.add(new Pair(windSource, windTrackInfoDTO)); + } break; case COMBINED: showCombinedWindOnMap(windSource, windTrackInfoDTO);