mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-10 22:30:56 +00:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
d982116d3d
21 files changed
+1600
-144
No files matched your search
+1
-1
@@ -28,7 +28,7 @@ public class NaturalComparator implements Comparator<String> {
|
||||
public int compare(String a, String b) {
|
||||
if (!caseSensitive){
|
||||
a = a.toLowerCase();
|
||||
b = a.toLowerCase();
|
||||
b = b.toLowerCase();
|
||||
}
|
||||
int result = 0;
|
||||
int aIndex = 0;
|
||||
|
||||
+4
-5
@@ -69,7 +69,9 @@ public class LockUtil {
|
||||
/**
|
||||
* Counts the "virtual" locks. A "virtual" lock is obtained if and only if at the time of calling
|
||||
* {@link #lockForRead(NamedReentrantReadWriteLock)} or {@link #lockForWrite(NamedReentrantReadWriteLock)} the
|
||||
* respective lock has a positive {@link #propagationCounts propagation count} for the current thread.
|
||||
* respective lock has a positive {@link #propagationCounts propagation count} for the current thread. Entries
|
||||
* always have a positive integer value. {@link #decrement(Lock, Map)} removes entries whose integer count would
|
||||
* go to 0.
|
||||
*/
|
||||
private static final Map<Thread, Map<Lock, Integer>> virtualLockCounts = new ConcurrentWeakHashMap<Thread, Map<Lock, Integer>>();
|
||||
|
||||
@@ -141,10 +143,7 @@ public class LockUtil {
|
||||
}
|
||||
|
||||
public static void unlockAfterWrite(NamedReentrantReadWriteLock lock) {
|
||||
Map<Lock, Integer> currentThreadPropagationCounts = getCurrentThreadsPropagationCounts();
|
||||
synchronized (currentThreadPropagationCounts) {
|
||||
unlockVirtuallyOrActually(lock, lock.writeLock());
|
||||
}
|
||||
unlockVirtuallyOrActually(lock, lock.writeLock());
|
||||
final TimePoint timePointWriteLockWasObtained;
|
||||
timePointWriteLockWasObtained = lastTimeWriteLockWasObtained.get(lock);
|
||||
if (timePointWriteLockWasObtained == null) {
|
||||
|
||||
+8
@@ -165,10 +165,18 @@ public class NamedReentrantReadWriteLock extends ReentrantReadWriteLock implemen
|
||||
return readLockWrapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* Contains the threads currently holding a read lock. Each thread is contained as many times as it
|
||||
* successfully acquired the read lock re-entrantly.
|
||||
*/
|
||||
public List<Thread> getReaders() {
|
||||
return new ArrayList<Thread>(readers);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return <code>null</code> if the write lock is not currently held by any thread; the thread holding the write
|
||||
* lock otherwise.
|
||||
*/
|
||||
public Thread getWriter() {
|
||||
return getOwner();
|
||||
}
|
||||
|
||||
+47
-39
@@ -328,50 +328,58 @@ public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl implemen
|
||||
assert this.raceID.equals(raceID);
|
||||
if (isTrackedRaceStillReachable()) {
|
||||
Competitor competitor = getCompetitorByBoatIDAndRaceIDOrBoatClass(boatID, raceID, boatClass);
|
||||
// the list of mark indices and time stamps is partial and usually only shows the last mark passing;
|
||||
// we need to use this to *update* the competitor's mark passings list, not *replace* it
|
||||
TreeMap<Integer, MarkPassing> markPassingsByMarkIndex = new TreeMap<Integer, MarkPassing>();
|
||||
// now fill with the already existing mark passings for the competitor identified by boatID...
|
||||
NavigableSet<MarkPassing> markPassings = trackedRace.getMarkPassings(competitor);
|
||||
trackedRace.lockForRead(markPassings);
|
||||
try {
|
||||
for (MarkPassing markPassing : markPassings) {
|
||||
markPassingsByMarkIndex.put(
|
||||
trackedRace.getRace().getCourse().getIndexOfWaypoint(markPassing.getWaypoint()),
|
||||
markPassing);
|
||||
if (competitor == null) {
|
||||
logger.info("Received timing data for boat ID " + boatID + " in race " + raceID
|
||||
+ " but couldn't find a competitor with that boat ID in this race. Ignoring.");
|
||||
} else {
|
||||
// the list of mark indices and time stamps is partial and usually only shows the last mark passing;
|
||||
// we need to use this to *update* the competitor's mark passings list, not *replace* it
|
||||
TreeMap<Integer, MarkPassing> markPassingsByMarkIndex = new TreeMap<Integer, MarkPassing>();
|
||||
// now fill with the already existing mark passings for the competitor identified by boatID...
|
||||
NavigableSet<MarkPassing> markPassings = trackedRace.getMarkPassings(competitor);
|
||||
trackedRace.lockForRead(markPassings);
|
||||
try {
|
||||
for (MarkPassing markPassing : markPassings) {
|
||||
markPassingsByMarkIndex.put(
|
||||
trackedRace.getRace().getCourse().getIndexOfWaypoint(markPassing.getWaypoint()),
|
||||
markPassing);
|
||||
}
|
||||
} finally {
|
||||
trackedRace.unlockAfterRead(markPassings);
|
||||
}
|
||||
} finally {
|
||||
trackedRace.unlockAfterRead(markPassings);
|
||||
}
|
||||
// ...and then overwrite those for which we received "new evidence"
|
||||
for (Triple<Integer, Integer, Long> markIndexRankAndTimeSinceStartInMilliseconds : markIndicesRanksAndTimesSinceStartInMilliseconds) {
|
||||
Waypoint waypoint = Util.get(trackedRace.getRace().getCourse().getWaypoints(),
|
||||
markIndexRankAndTimeSinceStartInMilliseconds.getA());
|
||||
// If the rank and time information is empty, we interpret this by clearing the mark rounding if any (see
|
||||
// also bug 1911):
|
||||
if (markIndexRankAndTimeSinceStartInMilliseconds.getC() == null) {
|
||||
markPassingsByMarkIndex.remove(markIndexRankAndTimeSinceStartInMilliseconds.getA());
|
||||
} else {
|
||||
// update mark passing only if we have a start time; guessed start times don't make sense and
|
||||
// for the start line would lead subsequent calls to getStartOfRace() return that guessed start time
|
||||
// which then cannot be identified as "guessed" anymore...
|
||||
if (trackedRace.getStartOfRace() != null) {
|
||||
final TimePoint startTime = trackedRace.getStartOfRace();
|
||||
MillisecondsTimePoint timePoint = new MillisecondsTimePoint(startTime.asMillis()
|
||||
+ markIndexRankAndTimeSinceStartInMilliseconds.getC());
|
||||
MarkPassing markPassing = domainFactory.createMarkPassing(timePoint, waypoint,
|
||||
getCompetitorByBoatIDAndRaceIDOrBoatClass(boatID, raceID, boatClass));
|
||||
markPassingsByMarkIndex.put(markIndexRankAndTimeSinceStartInMilliseconds.getA(), markPassing);
|
||||
// ...and then overwrite those for which we received "new evidence"
|
||||
for (Triple<Integer, Integer, Long> markIndexRankAndTimeSinceStartInMilliseconds : markIndicesRanksAndTimesSinceStartInMilliseconds) {
|
||||
Waypoint waypoint = Util.get(trackedRace.getRace().getCourse().getWaypoints(),
|
||||
markIndexRankAndTimeSinceStartInMilliseconds.getA());
|
||||
// If the rank and time information is empty, we interpret this by clearing the mark rounding if any
|
||||
// (see
|
||||
// also bug 1911):
|
||||
if (markIndexRankAndTimeSinceStartInMilliseconds.getC() == null) {
|
||||
markPassingsByMarkIndex.remove(markIndexRankAndTimeSinceStartInMilliseconds.getA());
|
||||
} else {
|
||||
//
|
||||
logger.warning("Received mark passing with time relative to start of race "
|
||||
+ trackedRace.getRace().getName() + " before having received a race start time."
|
||||
+ " Queueing message for re-application when a start time has been received.");
|
||||
tmdMessageQueue.enqueue(raceID, boatID, markIndicesRanksAndTimesSinceStartInMilliseconds);
|
||||
// update mark passing only if we have a start time; guessed start times don't make sense and
|
||||
// for the start line would lead subsequent calls to getStartOfRace() return that guessed start
|
||||
// time
|
||||
// which then cannot be identified as "guessed" anymore...
|
||||
if (trackedRace.getStartOfRace() != null) {
|
||||
final TimePoint startTime = trackedRace.getStartOfRace();
|
||||
MillisecondsTimePoint timePoint = new MillisecondsTimePoint(startTime.asMillis()
|
||||
+ markIndexRankAndTimeSinceStartInMilliseconds.getC());
|
||||
MarkPassing markPassing = domainFactory.createMarkPassing(timePoint, waypoint,
|
||||
getCompetitorByBoatIDAndRaceIDOrBoatClass(boatID, raceID, boatClass));
|
||||
markPassingsByMarkIndex.put(markIndexRankAndTimeSinceStartInMilliseconds.getA(),
|
||||
markPassing);
|
||||
} else {
|
||||
//
|
||||
logger.warning("Received mark passing with time relative to start of race "
|
||||
+ trackedRace.getRace().getName() + " before having received a race start time."
|
||||
+ " Queueing message for re-application when a start time has been received.");
|
||||
tmdMessageQueue.enqueue(raceID, boatID, markIndicesRanksAndTimesSinceStartInMilliseconds);
|
||||
}
|
||||
}
|
||||
}
|
||||
trackedRace.updateMarkPassings(competitor, markPassingsByMarkIndex.values());
|
||||
}
|
||||
trackedRace.updateMarkPassings(competitor, markPassingsByMarkIndex.values());
|
||||
} else {
|
||||
if (!loggedIgnore) {
|
||||
logger.info("Ignoring timing data " + markIndicesRanksAndTimesSinceStartInMilliseconds + " for SwissTiming race " + raceID
|
||||
|
||||
+38
-26
@@ -103,37 +103,49 @@ public class TMDMessageQueue {
|
||||
TMDMessageContents messageContents = i.next();
|
||||
Competitor competitor = raceTracker.getCompetitorByBoatIDAndRaceIDOrBoatClass(messageContents.getBoatID(),
|
||||
messageContents.getRaceID(), raceTracker.getBoatClass());
|
||||
NavigableSet<MarkPassing> oldMarkPassings = trackedRace.getMarkPassings(competitor);
|
||||
TreeMap<Integer, MarkPassing> cleansedMarkPassingsForCompetitor = cleansedMarkPassings.get(competitor);
|
||||
if (cleansedMarkPassingsForCompetitor == null) {
|
||||
cleansedMarkPassingsForCompetitor = new TreeMap<>();
|
||||
cleansedMarkPassings.put(competitor, cleansedMarkPassingsForCompetitor);
|
||||
Course course = trackedRace.getRace().getCourse();
|
||||
course.lockForRead();
|
||||
try {
|
||||
trackedRace.lockForRead(oldMarkPassings);
|
||||
if (competitor == null) {
|
||||
logger.info("Received timing data for boat ID " + messageContents.getBoatID() + " in race " + messageContents.getRaceID()
|
||||
+ " but couldn't find a competitor with that boat ID in this race. Ignoring.");
|
||||
} else {
|
||||
NavigableSet<MarkPassing> oldMarkPassings = trackedRace.getMarkPassings(competitor);
|
||||
TreeMap<Integer, MarkPassing> cleansedMarkPassingsForCompetitor = cleansedMarkPassings.get(competitor);
|
||||
if (cleansedMarkPassingsForCompetitor == null) {
|
||||
cleansedMarkPassingsForCompetitor = new TreeMap<>();
|
||||
cleansedMarkPassings.put(competitor, cleansedMarkPassingsForCompetitor);
|
||||
Course course = trackedRace.getRace().getCourse();
|
||||
course.lockForRead();
|
||||
try {
|
||||
for (MarkPassing oldMarkPassing : oldMarkPassings) {
|
||||
int waypointIndex = course.getIndexOfWaypoint(oldMarkPassing.getWaypoint());
|
||||
cleansedMarkPassingsForCompetitor.put(waypointIndex, oldMarkPassing);
|
||||
trackedRace.lockForRead(oldMarkPassings);
|
||||
try {
|
||||
for (MarkPassing oldMarkPassing : oldMarkPassings) {
|
||||
int waypointIndex = course.getIndexOfWaypoint(oldMarkPassing.getWaypoint());
|
||||
cleansedMarkPassingsForCompetitor.put(waypointIndex, oldMarkPassing);
|
||||
}
|
||||
} finally {
|
||||
trackedRace.unlockAfterRead(oldMarkPassings);
|
||||
}
|
||||
} finally {
|
||||
trackedRace.unlockAfterRead(oldMarkPassings);
|
||||
course.unlockAfterRead();
|
||||
}
|
||||
} finally {
|
||||
course.unlockAfterRead();
|
||||
}
|
||||
}
|
||||
// remove those mark passings for which the TMD message has mark passing times; their time points would just have been guessed.
|
||||
// This will avoid that the start time inference
|
||||
// rules consider them and let them take precedence over the start time received
|
||||
for (Triple<Integer, Integer, Long> markIndexRankAndTimeSinceStartInMilliseconds : messageContents.getMarkIndicesRanksAndTimesSinceStartInMilliseconds()) {
|
||||
if (cleansedMarkPassingsForCompetitor.containsKey(markIndexRankAndTimeSinceStartInMilliseconds.getA())) {
|
||||
logger.info("Removing mark passing for mark #"+markIndexRankAndTimeSinceStartInMilliseconds.getA()+
|
||||
" for competitor "+competitor.getName()+" because its time point "+
|
||||
cleansedMarkPassingsForCompetitor.get(markIndexRankAndTimeSinceStartInMilliseconds.getA()).getTimePoint()+
|
||||
" was guessed; will replace momentarily...");
|
||||
cleansedMarkPassingsForCompetitor.remove(markIndexRankAndTimeSinceStartInMilliseconds.getA());
|
||||
// remove those mark passings for which the TMD message has mark passing times; their time points would
|
||||
// just have been guessed.
|
||||
// This will avoid that the start time inference
|
||||
// rules consider them and let them take precedence over the start time received
|
||||
for (Triple<Integer, Integer, Long> markIndexRankAndTimeSinceStartInMilliseconds : messageContents
|
||||
.getMarkIndicesRanksAndTimesSinceStartInMilliseconds()) {
|
||||
if (cleansedMarkPassingsForCompetitor.containsKey(markIndexRankAndTimeSinceStartInMilliseconds
|
||||
.getA())) {
|
||||
logger.info("Removing mark passing for mark #"
|
||||
+ markIndexRankAndTimeSinceStartInMilliseconds.getA()
|
||||
+ " for competitor "
|
||||
+ competitor.getName()
|
||||
+ " because its time point "
|
||||
+ cleansedMarkPassingsForCompetitor.get(
|
||||
markIndexRankAndTimeSinceStartInMilliseconds.getA()).getTimePoint()
|
||||
+ " was guessed; will replace momentarily...");
|
||||
cleansedMarkPassingsForCompetitor.remove(markIndexRankAndTimeSinceStartInMilliseconds.getA());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BIN
Binary file not shown.
+582
@@ -0,0 +1,582 @@
|
||||
stored-uri:datafiles/event_20140429_ESSQingdao-Race_29.mtb
|
||||
StartReplay:1
|
||||
|
||||
// Input from params_static:
|
||||
|
||||
// Input from event_parameters:
|
||||
|
||||
CompMarkerUUID:1
|
||||
CodanIsSponsor:0
|
||||
DefaultTailLength:60
|
||||
APzoomChangeTime:2500
|
||||
disableAutoProduce:0
|
||||
autoProduce:0
|
||||
APstartLineShowOfLeg:0.25
|
||||
APsideOfStartLine:0.30
|
||||
APstartSwitch:0.8
|
||||
APwholeLegBehindMarks:0.15
|
||||
APmarkSwitch:0.13
|
||||
APmarkZoomBehindMarks:0.10
|
||||
APmarkZoomInFrontOfMarks:0.20
|
||||
PopupMarkerUUID:2
|
||||
ManualUrl:http://www.tractrac.com/files/userguide_sailing.pdf
|
||||
//live-uri:tcp://192.168.1.203:4400
|
||||
//stored-uri:tcp://192.168.1.203:4401
|
||||
Marker1UUID:1
|
||||
Marker1Type:RGBMarkerFactory
|
||||
Marker1Directional:1
|
||||
Marker1Image:markers/boat_FF0000_big.png
|
||||
Marker1Length:5
|
||||
Marker1MinPixelSize:30
|
||||
Startlocation:120.38632089843748,36.049596263422494
|
||||
MaxDiffTime:1200
|
||||
MaxMetersPerSecond:20
|
||||
PrecisionMeters:20
|
||||
ShortAvgTime:180
|
||||
LongAvgTime:900
|
||||
TimeZone:8
|
||||
CompMarkerTimeout:60
|
||||
FramesPerSecond:8
|
||||
replayspeedup:5
|
||||
MatchRaceClock:0
|
||||
MatchRaceClockNo:3
|
||||
MatchRaceClockSpacing:300
|
||||
Minimap:1
|
||||
MinimapUseLayers:2
|
||||
Minimapgeorect:120.36068115234377,36.06814954054894,120.41175086669921,36.03604889362103
|
||||
MinimapMarkerUUID:2
|
||||
Marker4UUID:2
|
||||
Marker4Type:RGBmarkerFactory
|
||||
Marker4Directional:1
|
||||
Marker4Image:markers/boat_FF0000_small.png
|
||||
MetersPerPixel:18
|
||||
MetersPerPixelMax:30
|
||||
MetersPerPixelMin:0.2
|
||||
isMatchRace:0
|
||||
DefaultDistanceUnits:meters
|
||||
weatherEnabled:0
|
||||
DefaultSpeedUnits:KmH
|
||||
showRaceClock:1
|
||||
BackGroundImage:graphics/background.jpg
|
||||
DisableRotation:0
|
||||
ControlPointMarkerRadius:13
|
||||
disableselection:0
|
||||
disableleaderline:0
|
||||
DisableChangeRace:0
|
||||
PopUpRow1Name:
|
||||
PopUpRow1Type:Name
|
||||
PopUpRow2Name:Knots
|
||||
PopUpRow2Type:BoatSpeed
|
||||
PopUpRow3Name:Ranking
|
||||
PopUpRow3Type:RowNumber
|
||||
PopUpRow4Name:Sail
|
||||
PopUpRow4Type:Ini
|
||||
PopUpRow5Name:After
|
||||
PopUpRow5Type:BoatAfter
|
||||
ResultColumn1Name:#
|
||||
ResultColumn1Size:20
|
||||
ResultColumn1Type:RowNumber
|
||||
ResultColumn2Name:sail
|
||||
ResultColumn2Size:45
|
||||
ResultColumn2Type:Ini
|
||||
ResultColumn3Name:name
|
||||
ResultColumn3Size:110
|
||||
ResultColumn3Type:Name
|
||||
ResultColumn4Name:after
|
||||
ResultColumn4Size:45
|
||||
ResultColumn4Type:BoatAfter
|
||||
ResultColumn5Name:kts
|
||||
ResultColumn5Size:40
|
||||
ResultColumn5Type:BoatSpeed
|
||||
DisableLeaderboard:0
|
||||
DisableAnalysis:0
|
||||
TableFontSize:11
|
||||
compInitialsFontSize:11
|
||||
AutoRotate:0
|
||||
MassStart:0
|
||||
SegmentFile:segments.php
|
||||
StartType:Mass
|
||||
ReCalcDirAndSpeed:0
|
||||
RaceHandicapSystem:NONE
|
||||
TeamCompetitionType:NONE
|
||||
LiveDelaySecs: 8
|
||||
|
||||
//-------- AUTO GENERATED PARAMETERS START ----------------
|
||||
|
||||
EventID:8b85f120-ada6-0131-e74f-60a44ce903c3
|
||||
EventName:ESS Qingdao 2014
|
||||
EventDB:event_20140429_ESSQingdao
|
||||
EventStartTime:2014-04-28 16:01:00
|
||||
EventEndTime:2014-05-04 15:00:00
|
||||
EventType:a1b74ca0-fdd8-11dc-8811-005056c00008
|
||||
|
||||
RaceID:f6ec0720-b56d-0131-1f9f-10b11c4ed8fd
|
||||
RaceName:Race 29
|
||||
RaceStartTime:2014-05-04 07:47:59
|
||||
RaceEndTime:
|
||||
RaceTrackingStartTime:2014-05-04 07:43:59
|
||||
RaceTrackingEndTime:2014-05-04 08:00:13
|
||||
RaceDefaultRouteUUID:f6e91fa0-b56d-0131-1f9e-10b11c4ed8fd
|
||||
RaceHandicapSystem:NONE
|
||||
|
||||
Image1UUID:64a7b348-83db-11e2-88c0-10bf48d758ce
|
||||
Image1Type:Logo
|
||||
Image1Description:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/SUI.gif
|
||||
Image1Image:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/SUI.gif
|
||||
|
||||
Image2UUID:64c3a8fa-83db-11e2-88c0-10bf48d758ce
|
||||
Image2Type:Logo
|
||||
Image2Description:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/NZL.gif
|
||||
Image2Image:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/NZL.gif
|
||||
|
||||
Image3UUID:651130a2-83db-11e2-88c0-10bf48d758ce
|
||||
Image3Type:Logo
|
||||
Image3Description:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/KOR.gif
|
||||
Image3Image:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/KOR.gif
|
||||
|
||||
Image4UUID:653c1ab0-83db-11e2-88c0-10bf48d758ce
|
||||
Image4Type:Logo
|
||||
Image4Description:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/AUT.gif
|
||||
Image4Image:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/AUT.gif
|
||||
|
||||
Image5UUID:65637da8-83db-11e2-88c0-10bf48d758ce
|
||||
Image5Type:Logo
|
||||
Image5Description:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/DEN.gif
|
||||
Image5Image:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/DEN.gif
|
||||
|
||||
Image6UUID:65875138-83db-11e2-88c0-10bf48d758ce
|
||||
Image6Type:Logo
|
||||
Image6Description:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/OMN.gif
|
||||
Image6Image:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/OMN.gif
|
||||
|
||||
Class1UUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Class1Name:Extreme40
|
||||
|
||||
Team1UUID:649f1dbe-83db-11e2-88c0-10bf48d758ce
|
||||
Team1Name:TeamA
|
||||
|
||||
Team2UUID:64bf0854-83db-11e2-88c0-10bf48d758ce
|
||||
Team2Name:TeamB
|
||||
|
||||
Team3UUID:64dd7988-83db-11e2-88c0-10bf48d758ce
|
||||
Team3Name:TeamC
|
||||
Team3Comp1UUID:64da7c24-83db-11e2-88c0-10bf48d758ce
|
||||
|
||||
Team4UUID:64ffc402-83db-11e2-88c0-10bf48d758ce
|
||||
Team4Name:TeamD
|
||||
|
||||
Team5UUID:65351d82-83db-11e2-88c0-10bf48d758ce
|
||||
Team5Name:TeamE
|
||||
|
||||
Team6UUID:655ed82a-83db-11e2-88c0-10bf48d758ce
|
||||
Team6Name:TeamF
|
||||
Team6Comp1UUID:655bd56c-83db-11e2-88c0-10bf48d758ce
|
||||
|
||||
Team7UUID:65829fa8-83db-11e2-88c0-10bf48d758ce
|
||||
Team7Name:TeamG
|
||||
|
||||
Team8UUID:e4459a20-83db-11e2-88c0-10bf48d758ce
|
||||
Team8Name:TeamH
|
||||
Team8Comp1UUID:e442a414-83db-11e2-88c0-10bf48d758ce
|
||||
|
||||
Team9UUID:a73aabc0-d6d6-0130-8be2-60a44ce903c3
|
||||
Team9Name:TeamI
|
||||
Team9Comp1UUID:93085e80-7ad9-0131-e5b3-60a44ce903c3
|
||||
|
||||
Team10UUID:bbf81f60-d6d6-0130-8be3-60a44ce903c3
|
||||
Team10Name:TeamJ
|
||||
Team10Comp1UUID:f097f4f0-7ad9-0131-e5b4-60a44ce903c3
|
||||
|
||||
Team11UUID:65659280-eda3-0130-c5c0-10b11c4ed8fd
|
||||
Team11Name:TeamK
|
||||
|
||||
Team12UUID:9ee14560-77af-0131-e5af-60a44ce903c3
|
||||
Team12Name:TeamL
|
||||
|
||||
Team13UUID:b9677300-7ad7-0131-e5b0-60a44ce903c3
|
||||
Team13Name:TeamM
|
||||
Team13Comp1UUID:84e68b70-7ada-0131-e5b7-60a44ce903c3
|
||||
|
||||
Team14UUID:c9689a00-7ad7-0131-e5b1-60a44ce903c3
|
||||
Team14Name:TeamN
|
||||
|
||||
Team15UUID:d5712f30-7ad7-0131-e5b2-60a44ce903c3
|
||||
Team15Name:TeamO
|
||||
|
||||
Comp1UUID:64da7c24-83db-11e2-88c0-10bf48d758ce
|
||||
Comp1Name:Realteam by Realstone
|
||||
Comp1NameShort:Realstone
|
||||
Comp1Color:000000
|
||||
Comp1Nationality:AFG
|
||||
Comp1Description:
|
||||
Comp1Handicap:1.0000000000
|
||||
Comp1HandicapDistance:0.00000
|
||||
Comp1StartTime:2014-05-04 07:47:59
|
||||
Comp1PictureUUID:64a7b348-83db-11e2-88c0-10bf48d758ce
|
||||
Comp1ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp1RouteUUID:f6e91fa0-b56d-0131-1f9e-10b11c4ed8fd
|
||||
|
||||
Comp2UUID:655bd56c-83db-11e2-88c0-10bf48d758ce
|
||||
Comp2Name:SAP Extreme Sailing Team
|
||||
Comp2NameShort:SAP
|
||||
Comp2Color:FFFFFF
|
||||
Comp2Nationality:DEN
|
||||
Comp2Description:
|
||||
Comp2Handicap:1.0000000000
|
||||
Comp2HandicapDistance:0.00000
|
||||
Comp2StartTime:2014-05-04 07:47:59
|
||||
Comp2PictureUUID:65637da8-83db-11e2-88c0-10bf48d758ce
|
||||
Comp2ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp2RouteUUID:f6e91fa0-b56d-0131-1f9e-10b11c4ed8fd
|
||||
|
||||
Comp3UUID:e442a414-83db-11e2-88c0-10bf48d758ce
|
||||
Comp3Name:Invite
|
||||
Comp3NameShort:Invite
|
||||
Comp3Color:FFFF00
|
||||
Comp3Nationality:SIN
|
||||
Comp3Description:
|
||||
Comp3Handicap:1.0000000000
|
||||
Comp3HandicapDistance:0.00000
|
||||
Comp3StartTime:2014-05-04 07:47:59
|
||||
Comp3ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp3RouteUUID:f6e91fa0-b56d-0131-1f9e-10b11c4ed8fd
|
||||
|
||||
Comp4UUID:93085e80-7ad9-0131-e5b3-60a44ce903c3
|
||||
Comp4Name:Emirates Team New Zealand
|
||||
Comp4NameShort:Emirates NZ
|
||||
Comp4Color:CC9900
|
||||
Comp4Nationality:NZL
|
||||
Comp4Description:
|
||||
Comp4Handicap:1.0000000000
|
||||
Comp4HandicapDistance:0.00000
|
||||
Comp4StartTime:2014-05-04 07:47:59
|
||||
Comp4PictureUUID:64c3a8fa-83db-11e2-88c0-10bf48d758ce
|
||||
Comp4ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp4RouteUUID:f6e91fa0-b56d-0131-1f9e-10b11c4ed8fd
|
||||
|
||||
Comp5UUID:f097f4f0-7ad9-0131-e5b4-60a44ce903c3
|
||||
Comp5Name:Gazprom Team Russia
|
||||
Comp5NameShort:Team Russia
|
||||
Comp5Color:999900
|
||||
Comp5Nationality:RUS
|
||||
Comp5Description:
|
||||
Comp5Handicap:1.0000000000
|
||||
Comp5HandicapDistance:0.00000
|
||||
Comp5StartTime:2014-05-04 07:47:59
|
||||
Comp5ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp5RouteUUID:f6e91fa0-b56d-0131-1f9e-10b11c4ed8fd
|
||||
|
||||
Comp6UUID:84e68b70-7ada-0131-e5b7-60a44ce903c3
|
||||
Comp6Name:Oman Air
|
||||
Comp6NameShort:Oman Air
|
||||
Comp6Color:CCFF99
|
||||
Comp6Nationality:OMA
|
||||
Comp6Description:
|
||||
Comp6Handicap:1.0000000000
|
||||
Comp6HandicapDistance:0.00000
|
||||
Comp6StartTime:2014-05-04 07:47:59
|
||||
Comp6PictureUUID:65875138-83db-11e2-88c0-10bf48d758ce
|
||||
Comp6ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp6RouteUUID:f6e91fa0-b56d-0131-1f9e-10b11c4ed8fd
|
||||
|
||||
ControlPoint1UUID:1100ea60-7adb-0131-e5b8-60a44ce903c3
|
||||
ControlPoint1Name:Red-Green
|
||||
ControlPoint1HasTwoPoints:1
|
||||
ControlPoint1ShortName:RG
|
||||
ControlPoint1DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Red###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Name=Red###BREAKLINE###P1.UUID=5427c7d2-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Green###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Green###BREAKLINE###P2.UUID=785c3e44-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint1Mark1Lon:120.383118
|
||||
ControlPoint1Mark1Lat:36.055012
|
||||
ControlPoint1Mark2Lon:120.379540
|
||||
ControlPoint1Mark2Lat:36.057548
|
||||
|
||||
ControlPoint2UUID:1286f15e-83be-11e2-88c0-10bf48d758ce
|
||||
ControlPoint2Name:Blue
|
||||
ControlPoint2HasTwoPoints:0
|
||||
ControlPoint2ShortName:Bl
|
||||
ControlPoint2DataSheet:Name=Blue###BREAKLINE###Type=Buoy###BREAKLINE###Color=Blue###BREAKLINE###Shape=Conical
|
||||
ControlPoint2Mark1Lon:120.380615
|
||||
ControlPoint2Mark1Lat:36.057808
|
||||
|
||||
ControlPoint3UUID:1a94c6a0-7adc-0131-e5f4-60a44ce903c3
|
||||
ControlPoint3Name:Black Conical-Blue
|
||||
ControlPoint3HasTwoPoints:1
|
||||
ControlPoint3ShortName:BB
|
||||
ControlPoint3DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Black###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Pattern=Checkered###BREAKLINE###P1.Name=Black Conical###BREAKLINE###P1.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Blue###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Blue###BREAKLINE###P2.UUID=1286f15e-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint3Mark1Lon:120.381707
|
||||
ControlPoint3Mark1Lat:36.054402
|
||||
ControlPoint3Mark2Lon:120.380615
|
||||
ControlPoint3Mark2Lat:36.057808
|
||||
|
||||
ControlPoint4UUID:2dc7d9d0-7b84-0131-b9c3-10b11c4ed8fd
|
||||
ControlPoint4Name:Black Cylinder - Black Conical
|
||||
ControlPoint4HasTwoPoints:1
|
||||
ControlPoint4ShortName:BB
|
||||
ControlPoint4DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Black###BREAKLINE###P1.Shape=Cylinder###BREAKLINE###P1.Pattern=Checkered###BREAKLINE###P1.Name=Black Cylinder###BREAKLINE###P1.UUID=b153dfd6-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Black###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Pattern=Checkered###BREAKLINE###P2.Name=Black Conical###BREAKLINE###P2.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce
|
||||
ControlPoint4Mark1Lon:120.384185
|
||||
ControlPoint4Mark1Lat:36.054085
|
||||
ControlPoint4Mark2Lon:120.381707
|
||||
ControlPoint4Mark2Lat:36.054402
|
||||
|
||||
ControlPoint5UUID:2e37b410-7adc-0131-e5fe-60a44ce903c3
|
||||
ControlPoint5Name:Black Conical-Yellow
|
||||
ControlPoint5HasTwoPoints:1
|
||||
ControlPoint5ShortName:BY
|
||||
ControlPoint5DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Black###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Pattern=Checkered###BREAKLINE###P1.Name=Black Conical###BREAKLINE###P1.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Yellow###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Yellow###BREAKLINE###P2.UUID=3fdd2402-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint5Mark1Lon:120.381707
|
||||
ControlPoint5Mark1Lat:36.054402
|
||||
ControlPoint5Mark2Lon:120.383560
|
||||
ControlPoint5Mark2Lat:36.056408
|
||||
|
||||
ControlPoint6UUID:3240586c-83c0-11e2-88c0-10bf48d758ce
|
||||
ControlPoint6Name:Finish Pole
|
||||
ControlPoint6HasTwoPoints:0
|
||||
ControlPoint6ShortName:F
|
||||
ControlPoint6DataSheet:Color=Black###BREAKLINE###Type=Landmark###BREAKLINE###Name=Finish Pole
|
||||
ControlPoint6Mark1Lon:120.382858
|
||||
ControlPoint6Mark1Lat:36.052662
|
||||
|
||||
ControlPoint7UUID:37cb36e0-7adb-0131-e5c2-60a44ce903c3
|
||||
ControlPoint7Name:Red-Blue
|
||||
ControlPoint7HasTwoPoints:1
|
||||
ControlPoint7ShortName:RB
|
||||
ControlPoint7DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Red###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Name=Red###BREAKLINE###P1.UUID=5427c7d2-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Blue###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Blue###BREAKLINE###P2.UUID=1286f15e-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint7Mark1Lon:120.383118
|
||||
ControlPoint7Mark1Lat:36.055012
|
||||
ControlPoint7Mark2Lon:120.380615
|
||||
ControlPoint7Mark2Lat:36.057808
|
||||
|
||||
ControlPoint8UUID:3e6c1c94-83bf-11e2-88c0-10bf48d758ce
|
||||
ControlPoint8Name:Race Committee
|
||||
ControlPoint8HasTwoPoints:0
|
||||
ControlPoint8ShortName:RC
|
||||
ControlPoint8DataSheet:Type=StartBoat###BREAKLINE###Name=Race Committee
|
||||
ControlPoint8Mark1Lon:120.383445
|
||||
ControlPoint8Mark1Lat:36.055175
|
||||
|
||||
ControlPoint9UUID:3fdd2402-83be-11e2-88c0-10bf48d758ce
|
||||
ControlPoint9Name:Yellow
|
||||
ControlPoint9HasTwoPoints:0
|
||||
ControlPoint9ShortName:Y
|
||||
ControlPoint9DataSheet:Type=Buoy###BREAKLINE###Color=Yellow###BREAKLINE###Shape=Conical###BREAKLINE###Name=Yellow
|
||||
ControlPoint9Mark1Lon:120.383560
|
||||
ControlPoint9Mark1Lat:36.056408
|
||||
|
||||
ControlPoint10UUID:4c304720-7adc-0131-e608-60a44ce903c3
|
||||
ControlPoint10Name:Black Conical-Red
|
||||
ControlPoint10HasTwoPoints:1
|
||||
ControlPoint10ShortName:BR
|
||||
ControlPoint10DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Black###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Pattern=Checkered###BREAKLINE###P1.Name=Black Conical###BREAKLINE###P1.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Red###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Red###BREAKLINE###P2.UUID=5427c7d2-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint10Mark1Lon:120.381707
|
||||
ControlPoint10Mark1Lat:36.054402
|
||||
ControlPoint10Mark2Lon:120.383118
|
||||
ControlPoint10Mark2Lat:36.055012
|
||||
|
||||
ControlPoint11UUID:4e0c2a90-7adb-0131-e5cc-60a44ce903c3
|
||||
ControlPoint11Name:Red-Yellow
|
||||
ControlPoint11HasTwoPoints:1
|
||||
ControlPoint11ShortName:RY
|
||||
ControlPoint11DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Red###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Name=Red###BREAKLINE###P1.UUID=5427c7d2-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Yellow###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Yellow###BREAKLINE###P2.UUID=3fdd2402-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint11Mark1Lon:120.383118
|
||||
ControlPoint11Mark1Lat:36.055012
|
||||
ControlPoint11Mark2Lon:120.383560
|
||||
ControlPoint11Mark2Lat:36.056408
|
||||
|
||||
ControlPoint12UUID:5427c7d2-83be-11e2-88c0-10bf48d758ce
|
||||
ControlPoint12Name:Red
|
||||
ControlPoint12HasTwoPoints:0
|
||||
ControlPoint12ShortName:R
|
||||
ControlPoint12DataSheet:Type=Buoy###BREAKLINE###Color=Red###BREAKLINE###Shape=Conical###BREAKLINE###Name=Red
|
||||
ControlPoint12Mark1Lon:120.383118
|
||||
ControlPoint12Mark1Lat:36.055012
|
||||
|
||||
ControlPoint13UUID:584cfe30-b328-0131-5246-10b11c4ed8fd
|
||||
ControlPoint13Name:R2-Green
|
||||
ControlPoint13HasTwoPoints:0
|
||||
ControlPoint13ShortName:G
|
||||
ControlPoint13DataSheet:Name=Green
|
||||
ControlPoint13Mark1Lon:120.386972
|
||||
ControlPoint13Mark1Lat:36.046795
|
||||
|
||||
ControlPoint14UUID:621831d0-7adc-0131-e612-60a44ce903c3
|
||||
ControlPoint14Name:Black Conical-Green
|
||||
ControlPoint14HasTwoPoints:1
|
||||
ControlPoint14ShortName:BG
|
||||
ControlPoint14DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Black###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Pattern=Checkered###BREAKLINE###P1.Name=Black Conical###BREAKLINE###P1.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Green###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Green###BREAKLINE###P2.UUID=785c3e44-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint14Mark1Lon:120.381707
|
||||
ControlPoint14Mark1Lat:36.054402
|
||||
ControlPoint14Mark2Lon:120.379540
|
||||
ControlPoint14Mark2Lat:36.057548
|
||||
|
||||
ControlPoint15UUID:77b9e620-7adb-0131-e5d6-60a44ce903c3
|
||||
ControlPoint15Name:Green-Blue
|
||||
ControlPoint15HasTwoPoints:1
|
||||
ControlPoint15ShortName:GB
|
||||
ControlPoint15DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Green###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Name=Green###BREAKLINE###P1.UUID=785c3e44-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Blue###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Blue###BREAKLINE###P2.UUID=1286f15e-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint15Mark1Lon:120.379540
|
||||
ControlPoint15Mark1Lat:36.057548
|
||||
ControlPoint15Mark2Lon:120.380615
|
||||
ControlPoint15Mark2Lat:36.057808
|
||||
|
||||
ControlPoint16UUID:785c3e44-83be-11e2-88c0-10bf48d758ce
|
||||
ControlPoint16Name:Green
|
||||
ControlPoint16HasTwoPoints:0
|
||||
ControlPoint16ShortName:G
|
||||
ControlPoint16DataSheet:Type=Buoy###BREAKLINE###Color=Green###BREAKLINE###Shape=Conical###BREAKLINE###Name=Green
|
||||
ControlPoint16Mark1Lon:120.379540
|
||||
ControlPoint16Mark1Lat:36.057548
|
||||
|
||||
ControlPoint17UUID:7d9d1730-b3e8-0131-1d10-10b11c4ed8fd
|
||||
ControlPoint17Name:Race Committee - Finish Pole
|
||||
ControlPoint17HasTwoPoints:1
|
||||
ControlPoint17ShortName:RF
|
||||
ControlPoint17DataSheet:P1.Type=StartBoat###BREAKLINE###P1.Name=Race Committee###BREAKLINE###P1.UUID=3e6c1c94-83bf-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Color=Black###BREAKLINE###P2.Type=Landmark###BREAKLINE###P2.Name=Finish Pole###BREAKLINE###P2.UUID=3240586c-83c0-11e2-88c0-10bf48d758ce
|
||||
ControlPoint17Mark1Lon:120.383445
|
||||
ControlPoint17Mark1Lat:36.055175
|
||||
ControlPoint17Mark2Lon:120.382858
|
||||
ControlPoint17Mark2Lat:36.052662
|
||||
|
||||
ControlPoint18UUID:7e1b7a80-7d0b-0131-a109-10b11c4ed8fd
|
||||
ControlPoint18Name:Black Gate
|
||||
ControlPoint18HasTwoPoints:1
|
||||
ControlPoint18ShortName:S
|
||||
ControlPoint18DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Black###BREAKLINE###P1.Shape=Cylinder###BREAKLINE###P1.Pattern=Checkered###BREAKLINE###P1.Name=Black Cylinder###BREAKLINE###P1.UUID=b153dfd6-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Black###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Pattern=Checkered###BREAKLINE###P2.Name=Black Conical###BREAKLINE###P2.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint18Mark1Lon:103.855782
|
||||
ControlPoint18Mark1Lat:1.282103
|
||||
ControlPoint18Mark2Lon:103.857560
|
||||
ControlPoint18Mark2Lat:1.286382
|
||||
|
||||
ControlPoint19UUID:88ef6d40-7adc-0131-e61c-60a44ce903c3
|
||||
ControlPoint19Name:Finish Pole-Cylinder
|
||||
ControlPoint19HasTwoPoints:1
|
||||
ControlPoint19ShortName:F
|
||||
ControlPoint19DataSheet:P1.Color=Black###BREAKLINE###P1.Type=Landmark###BREAKLINE###P1.Name=Finish Pole###BREAKLINE###P1.UUID=3240586c-83c0-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Black###BREAKLINE###P2.Shape=Cylinder###BREAKLINE###P2.Pattern=Checkered###BREAKLINE###P2.Name=Black Cylinder###BREAKLINE###P2.UUID=b153dfd6-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint19Mark1Lon:120.382858
|
||||
ControlPoint19Mark1Lat:36.052662
|
||||
ControlPoint19Mark2Lon:120.384185
|
||||
ControlPoint19Mark2Lat:36.054085
|
||||
|
||||
ControlPoint20UUID:8f9a4ee0-7adb-0131-e5e0-60a44ce903c3
|
||||
ControlPoint20Name:Green-Yellow
|
||||
ControlPoint20HasTwoPoints:1
|
||||
ControlPoint20ShortName:GY
|
||||
ControlPoint20DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Green###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Name=Green###BREAKLINE###P1.UUID=785c3e44-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Yellow###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Yellow###BREAKLINE###P2.UUID=3fdd2402-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint20Mark1Lon:120.379540
|
||||
ControlPoint20Mark1Lat:36.057548
|
||||
ControlPoint20Mark2Lon:120.383560
|
||||
ControlPoint20Mark2Lat:36.056408
|
||||
|
||||
ControlPoint21UUID:a0f71190-7adb-0131-e5ea-60a44ce903c3
|
||||
ControlPoint21Name:Blue-Yellow
|
||||
ControlPoint21HasTwoPoints:1
|
||||
ControlPoint21ShortName:BY
|
||||
ControlPoint21DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Blue###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Name=Blue###BREAKLINE###P1.UUID=1286f15e-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Yellow###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Yellow###BREAKLINE###P2.UUID=3fdd2402-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint21Mark1Lon:120.380615
|
||||
ControlPoint21Mark1Lat:36.057808
|
||||
ControlPoint21Mark2Lon:120.383560
|
||||
ControlPoint21Mark2Lat:36.056408
|
||||
|
||||
ControlPoint22UUID:a68c6350-7adc-0131-e626-60a44ce903c3
|
||||
ControlPoint22Name:RC-Black Conical
|
||||
ControlPoint22HasTwoPoints:1
|
||||
ControlPoint22ShortName:S
|
||||
ControlPoint22DataSheet:P1.Type=StartBoat###BREAKLINE###P1.Name=Race Committee###BREAKLINE###P1.UUID=3e6c1c94-83bf-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Black###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Pattern=Checkered###BREAKLINE###P2.Name=Black Conical###BREAKLINE###P2.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint22Mark1Lon:120.383445
|
||||
ControlPoint22Mark1Lat:36.055175
|
||||
ControlPoint22Mark2Lon:120.381707
|
||||
ControlPoint22Mark2Lat:36.054402
|
||||
|
||||
ControlPoint23UUID:b153dfd6-83be-11e2-88c0-10bf48d758ce
|
||||
ControlPoint23Name:Black Cylinder
|
||||
ControlPoint23HasTwoPoints:0
|
||||
ControlPoint23ShortName:B
|
||||
ControlPoint23DataSheet:Type=Buoy###BREAKLINE###Color=Black###BREAKLINE###Shape=Cylinder###BREAKLINE###Pattern=Checkered###BREAKLINE###Name=Black Cylinder
|
||||
ControlPoint23Mark1Lon:120.384185
|
||||
ControlPoint23Mark1Lat:36.054085
|
||||
|
||||
ControlPoint24UUID:b62e0bf0-7adc-0131-e630-60a44ce903c3
|
||||
ControlPoint24Name:RC-Black Cylinder
|
||||
ControlPoint24HasTwoPoints:1
|
||||
ControlPoint24ShortName:S
|
||||
ControlPoint24DataSheet:P1.Type=StartBoat###BREAKLINE###P1.Name=Race Committee###BREAKLINE###P1.UUID=3e6c1c94-83bf-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Black###BREAKLINE###P2.Shape=Cylinder###BREAKLINE###P2.Pattern=Checkered###BREAKLINE###P2.Name=Black Cylinder###BREAKLINE###P2.UUID=b153dfd6-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint24Mark1Lon:120.383445
|
||||
ControlPoint24Mark1Lat:36.055175
|
||||
ControlPoint24Mark2Lon:120.384185
|
||||
ControlPoint24Mark2Lat:36.054085
|
||||
|
||||
ControlPoint25UUID:bd1fc330-7c10-0131-9c24-10b11c4ed8fd
|
||||
ControlPoint25Name:Black Cylinder-Yellow
|
||||
ControlPoint25HasTwoPoints:1
|
||||
ControlPoint25ShortName:S
|
||||
ControlPoint25DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Black###BREAKLINE###P1.Shape=Cylinder###BREAKLINE###P1.Pattern=Checkered###BREAKLINE###P1.Name=Black Cylinder###BREAKLINE###P1.UUID=b153dfd6-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Yellow###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Yellow###BREAKLINE###P2.UUID=3fdd2402-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint25Mark1Lon:120.384185
|
||||
ControlPoint25Mark1Lat:36.054085
|
||||
ControlPoint25Mark2Lon:120.383560
|
||||
ControlPoint25Mark2Lat:36.056408
|
||||
|
||||
ControlPoint26UUID:bf6777e6-83bd-11e2-88c0-10bf48d758ce
|
||||
ControlPoint26Name:White S
|
||||
ControlPoint26HasTwoPoints:0
|
||||
ControlPoint26ShortName:W
|
||||
ControlPoint26DataSheet:Type=Buoy###BREAKLINE###Color=White###BREAKLINE###Shape=Conical###BREAKLINE###Name=White S
|
||||
ControlPoint26Mark1Lon:120.382568
|
||||
ControlPoint26Mark1Lat:36.054268
|
||||
|
||||
ControlPoint27UUID:cd3c1dc0-7c11-0131-9c2e-10b11c4ed8fd
|
||||
ControlPoint27Name:Finish Pole-Conical
|
||||
ControlPoint27HasTwoPoints:1
|
||||
ControlPoint27ShortName:S
|
||||
ControlPoint27DataSheet:P1.Color=Black###BREAKLINE###P1.Type=Landmark###BREAKLINE###P1.Name=Finish Pole###BREAKLINE###P1.UUID=3240586c-83c0-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Black###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Pattern=Checkered###BREAKLINE###P2.Name=Black Conical###BREAKLINE###P2.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint27Mark1Lon:120.382858
|
||||
ControlPoint27Mark1Lat:36.052662
|
||||
ControlPoint27Mark2Lon:120.381707
|
||||
ControlPoint27Mark2Lat:36.054402
|
||||
|
||||
ControlPoint28UUID:d39a0d00-7adc-0131-e63a-60a44ce903c3
|
||||
ControlPoint28Name:White Gate
|
||||
ControlPoint28HasTwoPoints:1
|
||||
ControlPoint28ShortName:W
|
||||
ControlPoint28DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=White###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Name=White S###BREAKLINE###P1.UUID=bf6777e6-83bd-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=White###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=White P###BREAKLINE###P2.UUID=e9ec42f8-83bd-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint28Mark1Lon:120.382568
|
||||
ControlPoint28Mark1Lat:36.054268
|
||||
ControlPoint28Mark2Lon:120.381890
|
||||
ControlPoint28Mark2Lat:36.053973
|
||||
|
||||
ControlPoint29UUID:d78695ea-83be-11e2-88c0-10bf48d758ce
|
||||
ControlPoint29Name:Black Conical
|
||||
ControlPoint29HasTwoPoints:0
|
||||
ControlPoint29ShortName:B
|
||||
ControlPoint29DataSheet:Type=Buoy###BREAKLINE###Color=Black###BREAKLINE###Shape=Conical###BREAKLINE###Pattern=Checkered###BREAKLINE###Name=Black Conical
|
||||
ControlPoint29Mark1Lon:120.381707
|
||||
ControlPoint29Mark1Lat:36.054402
|
||||
|
||||
ControlPoint30UUID:e9ec42f8-83bd-11e2-88c0-10bf48d758ce
|
||||
ControlPoint30Name:White P
|
||||
ControlPoint30HasTwoPoints:0
|
||||
ControlPoint30ShortName:W
|
||||
ControlPoint30DataSheet:Type=Buoy###BREAKLINE###Color=White###BREAKLINE###Shape=Conical###BREAKLINE###Name=White P
|
||||
ControlPoint30Mark1Lon:120.381890
|
||||
ControlPoint30Mark1Lat:36.053973
|
||||
|
||||
ControlPoint31UUID:eff23330-7b84-0131-b9d2-10b11c4ed8fd
|
||||
ControlPoint31Name:RC-Red
|
||||
ControlPoint31HasTwoPoints:1
|
||||
ControlPoint31ShortName:S
|
||||
ControlPoint31DataSheet:P1.Type=StartBoat###BREAKLINE###P1.Name=Race Committee###BREAKLINE###P1.UUID=3e6c1c94-83bf-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Red###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Red###BREAKLINE###P2.UUID=5427c7d2-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint31Mark1Lon:120.383445
|
||||
ControlPoint31Mark1Lat:36.055175
|
||||
ControlPoint31Mark2Lon:120.383118
|
||||
ControlPoint31Mark2Lat:36.055012
|
||||
|
||||
|
||||
SegmentFile:segments.php
|
||||
Route1UUID:f6e91fa0-b56d-0131-1f9e-10b11c4ed8fd
|
||||
Route1Description:Race 29
|
||||
Route1Length:0
|
||||
Route1DataSheet:Seq.1=Line###BREAKLINE###Seq.2=Starboard###BREAKLINE###Seq.3=Gate###BREAKLINE###Seq.4=Starboard###BREAKLINE###Seq.5=Line###BREAKLINE###
|
||||
Route1ControlPoint1UUID:a68c6350-7adc-0131-e626-60a44ce903c3
|
||||
Route1ControlPoint2UUID:1286f15e-83be-11e2-88c0-10bf48d758ce
|
||||
Route1ControlPoint3UUID:d39a0d00-7adc-0131-e63a-60a44ce903c3
|
||||
Route1ControlPoint4UUID:1286f15e-83be-11e2-88c0-10bf48d758ce
|
||||
Route1ControlPoint5UUID:88ef6d40-7adc-0131-e61c-60a44ce903c3
|
||||
|
||||
//-------- AUTO GENERATED PARAMETERS END ------------------
|
||||
BIN
Binary file not shown.
+653
@@ -0,0 +1,653 @@
|
||||
stored-uri:datafiles/event_20140429_ESSQingdao-Race_4.mtb
|
||||
StartReplay:1
|
||||
|
||||
// Input from params_static:
|
||||
|
||||
// Input from event_parameters:
|
||||
|
||||
CompMarkerUUID:1
|
||||
CodanIsSponsor:0
|
||||
DefaultTailLength:60
|
||||
APzoomChangeTime:2500
|
||||
disableAutoProduce:0
|
||||
autoProduce:0
|
||||
APstartLineShowOfLeg:0.25
|
||||
APsideOfStartLine:0.30
|
||||
APstartSwitch:0.8
|
||||
APwholeLegBehindMarks:0.15
|
||||
APmarkSwitch:0.13
|
||||
APmarkZoomBehindMarks:0.10
|
||||
APmarkZoomInFrontOfMarks:0.20
|
||||
PopupMarkerUUID:2
|
||||
ManualUrl:http://www.tractrac.com/files/userguide_sailing.pdf
|
||||
//live-uri:tcp://192.168.1.203:4400
|
||||
//stored-uri:tcp://192.168.1.203:4401
|
||||
Marker1UUID:1
|
||||
Marker1Type:RGBMarkerFactory
|
||||
Marker1Directional:1
|
||||
Marker1Image:markers/boat_FF0000_big.png
|
||||
Marker1Length:5
|
||||
Marker1MinPixelSize:30
|
||||
Startlocation:120.38632089843748,36.049596263422494
|
||||
MaxDiffTime:1200
|
||||
MaxMetersPerSecond:20
|
||||
PrecisionMeters:20
|
||||
ShortAvgTime:180
|
||||
LongAvgTime:900
|
||||
TimeZone:
|
||||
CompMarkerTimeout:60
|
||||
FramesPerSecond:8
|
||||
replayspeedup:5
|
||||
MatchRaceClock:0
|
||||
MatchRaceClockNo:3
|
||||
MatchRaceClockSpacing:300
|
||||
Minimap:1
|
||||
MinimapUseLayers:2
|
||||
Minimapgeorect:120.36068115234377,36.06814954054894,120.41175086669921,36.03604889362103
|
||||
MinimapMarkerUUID:2
|
||||
Marker4UUID:2
|
||||
Marker4Type:RGBmarkerFactory
|
||||
Marker4Directional:1
|
||||
Marker4Image:markers/boat_FF0000_small.png
|
||||
MetersPerPixel:18
|
||||
MetersPerPixelMax:30
|
||||
MetersPerPixelMin:0.2
|
||||
isMatchRace:0
|
||||
DefaultDistanceUnits:meters
|
||||
weatherEnabled:0
|
||||
DefaultSpeedUnits:KmH
|
||||
showRaceClock:1
|
||||
BackGroundImage:graphics/background.jpg
|
||||
DisableRotation:0
|
||||
ControlPointMarkerRadius:13
|
||||
disableselection:0
|
||||
disableleaderline:0
|
||||
DisableChangeRace:0
|
||||
PopUpRow1Name:
|
||||
PopUpRow1Type:Name
|
||||
PopUpRow2Name:Knots
|
||||
PopUpRow2Type:BoatSpeed
|
||||
PopUpRow3Name:Ranking
|
||||
PopUpRow3Type:RowNumber
|
||||
PopUpRow4Name:Sail
|
||||
PopUpRow4Type:Ini
|
||||
PopUpRow5Name:After
|
||||
PopUpRow5Type:BoatAfter
|
||||
ResultColumn1Name:#
|
||||
ResultColumn1Size:20
|
||||
ResultColumn1Type:RowNumber
|
||||
ResultColumn2Name:sail
|
||||
ResultColumn2Size:45
|
||||
ResultColumn2Type:Ini
|
||||
ResultColumn3Name:name
|
||||
ResultColumn3Size:110
|
||||
ResultColumn3Type:Name
|
||||
ResultColumn4Name:after
|
||||
ResultColumn4Size:45
|
||||
ResultColumn4Type:BoatAfter
|
||||
ResultColumn5Name:kts
|
||||
ResultColumn5Size:40
|
||||
ResultColumn5Type:BoatSpeed
|
||||
DisableLeaderboard:0
|
||||
DisableAnalysis:0
|
||||
TableFontSize:11
|
||||
compInitialsFontSize:11
|
||||
AutoRotate:0
|
||||
MassStart:0
|
||||
SegmentFile:segments.php
|
||||
StartType:Mass
|
||||
ReCalcDirAndSpeed:0
|
||||
RaceHandicapSystem:NONE
|
||||
TeamCompetitionType:NONE
|
||||
LiveDelaySecs: 4
|
||||
|
||||
//-------- AUTO GENERATED PARAMETERS START ----------------
|
||||
|
||||
EventID:8b85f120-ada6-0131-e74f-60a44ce903c3
|
||||
EventName:ESS Qingdao 2014
|
||||
EventDB:event_20140429_ESSQingdao
|
||||
EventStartTime:2014-04-28 16:01:00
|
||||
EventEndTime:2014-05-04 15:00:00
|
||||
EventType:a1b74ca0-fdd8-11dc-8811-005056c00008
|
||||
|
||||
RaceID:05f3fbf0-b310-0131-50e4-10b11c4ed8fd
|
||||
RaceName:Race 4
|
||||
RaceStartTime:2014-05-01 06:59:59
|
||||
RaceEndTime:
|
||||
RaceTrackingStartTime:2014-05-01 06:56:20
|
||||
RaceTrackingEndTime:2014-05-01 07:19:39
|
||||
RaceDefaultRouteUUID:05ee3850-b310-0131-50e3-10b11c4ed8fd
|
||||
RaceHandicapSystem:NONE
|
||||
|
||||
Image1UUID:64a7b348-83db-11e2-88c0-10bf48d758ce
|
||||
Image1Type:Logo
|
||||
Image1Description:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/SUI.gif
|
||||
Image1Image:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/SUI.gif
|
||||
|
||||
Image2UUID:64c3a8fa-83db-11e2-88c0-10bf48d758ce
|
||||
Image2Type:Logo
|
||||
Image2Description:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/NZL.gif
|
||||
Image2Image:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/NZL.gif
|
||||
|
||||
Image3UUID:651130a2-83db-11e2-88c0-10bf48d758ce
|
||||
Image3Type:Logo
|
||||
Image3Description:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/KOR.gif
|
||||
Image3Image:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/KOR.gif
|
||||
|
||||
Image4UUID:653c1ab0-83db-11e2-88c0-10bf48d758ce
|
||||
Image4Type:Logo
|
||||
Image4Description:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/AUT.gif
|
||||
Image4Image:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/AUT.gif
|
||||
|
||||
Image5UUID:65637da8-83db-11e2-88c0-10bf48d758ce
|
||||
Image5Type:Logo
|
||||
Image5Description:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/DEN.gif
|
||||
Image5Image:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/DEN.gif
|
||||
|
||||
Image6UUID:65875138-83db-11e2-88c0-10bf48d758ce
|
||||
Image6Type:Logo
|
||||
Image6Description:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/OMN.gif
|
||||
Image6Image:http://germanmaster.traclive.dk/events/event_20100806_SailforGol/images/OMN.gif
|
||||
|
||||
Class1UUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Class1Name:Extreme40
|
||||
|
||||
Team1UUID:649f1dbe-83db-11e2-88c0-10bf48d758ce
|
||||
Team1Name:TeamA
|
||||
Team1Comp1UUID:648bd4f2-83db-11e2-88c0-10bf48d758ce
|
||||
|
||||
Team2UUID:64bf0854-83db-11e2-88c0-10bf48d758ce
|
||||
Team2Name:TeamB
|
||||
Team2Comp1UUID:64bbff7e-83db-11e2-88c0-10bf48d758ce
|
||||
|
||||
Team3UUID:64dd7988-83db-11e2-88c0-10bf48d758ce
|
||||
Team3Name:TeamC
|
||||
Team3Comp1UUID:64da7c24-83db-11e2-88c0-10bf48d758ce
|
||||
|
||||
Team4UUID:64ffc402-83db-11e2-88c0-10bf48d758ce
|
||||
Team4Name:TeamD
|
||||
|
||||
Team5UUID:65351d82-83db-11e2-88c0-10bf48d758ce
|
||||
Team5Name:TeamE
|
||||
Team5Comp1UUID:65322500-83db-11e2-88c0-10bf48d758ce
|
||||
|
||||
Team6UUID:655ed82a-83db-11e2-88c0-10bf48d758ce
|
||||
Team6Name:TeamF
|
||||
Team6Comp1UUID:655bd56c-83db-11e2-88c0-10bf48d758ce
|
||||
|
||||
Team7UUID:65829fa8-83db-11e2-88c0-10bf48d758ce
|
||||
Team7Name:TeamG
|
||||
Team7Comp1UUID:657fa5a0-83db-11e2-88c0-10bf48d758ce
|
||||
|
||||
Team8UUID:e4459a20-83db-11e2-88c0-10bf48d758ce
|
||||
Team8Name:TeamH
|
||||
Team8Comp1UUID:e442a414-83db-11e2-88c0-10bf48d758ce
|
||||
|
||||
Team9UUID:a73aabc0-d6d6-0130-8be2-60a44ce903c3
|
||||
Team9Name:TeamI
|
||||
Team9Comp1UUID:93085e80-7ad9-0131-e5b3-60a44ce903c3
|
||||
|
||||
Team10UUID:bbf81f60-d6d6-0130-8be3-60a44ce903c3
|
||||
Team10Name:TeamJ
|
||||
Team10Comp1UUID:f097f4f0-7ad9-0131-e5b4-60a44ce903c3
|
||||
|
||||
Team11UUID:65659280-eda3-0130-c5c0-10b11c4ed8fd
|
||||
Team11Name:TeamK
|
||||
Team11Comp1UUID:19dc3eb0-7ada-0131-e5b5-60a44ce903c3
|
||||
|
||||
Team12UUID:9ee14560-77af-0131-e5af-60a44ce903c3
|
||||
Team12Name:TeamL
|
||||
Team12Comp1UUID:5e15e7c0-7ada-0131-e5b6-60a44ce903c3
|
||||
|
||||
Team13UUID:b9677300-7ad7-0131-e5b0-60a44ce903c3
|
||||
Team13Name:TeamM
|
||||
Team13Comp1UUID:84e68b70-7ada-0131-e5b7-60a44ce903c3
|
||||
|
||||
Team14UUID:c9689a00-7ad7-0131-e5b1-60a44ce903c3
|
||||
Team14Name:TeamN
|
||||
|
||||
Team15UUID:d5712f30-7ad7-0131-e5b2-60a44ce903c3
|
||||
Team15Name:TeamO
|
||||
|
||||
Comp1UUID:648bd4f2-83db-11e2-88c0-10bf48d758ce
|
||||
Comp1Name:Alinghi
|
||||
Comp1NameShort:Alinghi
|
||||
Comp1Color:00FF00
|
||||
Comp1Nationality:SUI
|
||||
Comp1Description:
|
||||
Comp1Handicap:1.0000000000
|
||||
Comp1HandicapDistance:0.00000
|
||||
Comp1StartTime:2014-05-01 06:59:59
|
||||
Comp1PictureUUID:64a7b348-83db-11e2-88c0-10bf48d758ce
|
||||
Comp1ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp1RouteUUID:05ee3850-b310-0131-50e3-10b11c4ed8fd
|
||||
|
||||
Comp2UUID:64bbff7e-83db-11e2-88c0-10bf48d758ce
|
||||
Comp2Name:GAC Pindar
|
||||
Comp2NameShort:GAC Pindar
|
||||
Comp2Color:000080
|
||||
Comp2Nationality:AUS
|
||||
Comp2Description:
|
||||
Comp2Handicap:1.0000000000
|
||||
Comp2HandicapDistance:0.00000
|
||||
Comp2StartTime:2014-05-01 06:59:59
|
||||
Comp2PictureUUID:64c3a8fa-83db-11e2-88c0-10bf48d758ce
|
||||
Comp2ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp2RouteUUID:05ee3850-b310-0131-50e3-10b11c4ed8fd
|
||||
|
||||
Comp3UUID:64da7c24-83db-11e2-88c0-10bf48d758ce
|
||||
Comp3Name:Realteam by Realstone
|
||||
Comp3NameShort:Realstone
|
||||
Comp3Color:000000
|
||||
Comp3Nationality:AFG
|
||||
Comp3Description:
|
||||
Comp3Handicap:1.0000000000
|
||||
Comp3HandicapDistance:0.00000
|
||||
Comp3StartTime:2014-05-01 06:59:59
|
||||
Comp3PictureUUID:64a7b348-83db-11e2-88c0-10bf48d758ce
|
||||
Comp3ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp3RouteUUID:05ee3850-b310-0131-50e3-10b11c4ed8fd
|
||||
|
||||
Comp4UUID:65322500-83db-11e2-88c0-10bf48d758ce
|
||||
Comp4Name:Red Bull Sailing Team
|
||||
Comp4NameShort:Red Bull
|
||||
Comp4Color:008080
|
||||
Comp4Nationality:AUT
|
||||
Comp4Description:
|
||||
Comp4Handicap:1.0000000000
|
||||
Comp4HandicapDistance:0.00000
|
||||
Comp4StartTime:2014-05-01 06:59:59
|
||||
Comp4PictureUUID:653c1ab0-83db-11e2-88c0-10bf48d758ce
|
||||
Comp4ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp4RouteUUID:05ee3850-b310-0131-50e3-10b11c4ed8fd
|
||||
|
||||
Comp5UUID:655bd56c-83db-11e2-88c0-10bf48d758ce
|
||||
Comp5Name:SAP Extreme Sailing Team
|
||||
Comp5NameShort:SAP
|
||||
Comp5Color:FFFFFF
|
||||
Comp5Nationality:DEN
|
||||
Comp5Description:
|
||||
Comp5Handicap:1.0000000000
|
||||
Comp5HandicapDistance:0.00000
|
||||
Comp5StartTime:2014-05-01 06:59:59
|
||||
Comp5PictureUUID:65637da8-83db-11e2-88c0-10bf48d758ce
|
||||
Comp5ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp5RouteUUID:05ee3850-b310-0131-50e3-10b11c4ed8fd
|
||||
|
||||
Comp6UUID:657fa5a0-83db-11e2-88c0-10bf48d758ce
|
||||
Comp6Name:The Wave, Muscat
|
||||
Comp6NameShort:The Wave
|
||||
Comp6Color:800080
|
||||
Comp6Nationality:OMA
|
||||
Comp6Description:
|
||||
Comp6Handicap:1.0000000000
|
||||
Comp6HandicapDistance:0.00000
|
||||
Comp6StartTime:2014-05-01 06:59:59
|
||||
Comp6PictureUUID:65875138-83db-11e2-88c0-10bf48d758ce
|
||||
Comp6ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp6RouteUUID:05ee3850-b310-0131-50e3-10b11c4ed8fd
|
||||
|
||||
Comp7UUID:e442a414-83db-11e2-88c0-10bf48d758ce
|
||||
Comp7Name:Invite
|
||||
Comp7NameShort:Invite
|
||||
Comp7Color:FFFF00
|
||||
Comp7Nationality:SIN
|
||||
Comp7Description:
|
||||
Comp7Handicap:1.0000000000
|
||||
Comp7HandicapDistance:0.00000
|
||||
Comp7StartTime:2014-05-01 06:59:59
|
||||
Comp7ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp7RouteUUID:05ee3850-b310-0131-50e3-10b11c4ed8fd
|
||||
|
||||
Comp8UUID:93085e80-7ad9-0131-e5b3-60a44ce903c3
|
||||
Comp8Name:Emirates Team New Zealand
|
||||
Comp8NameShort:Emirates NZ
|
||||
Comp8Color:CC9900
|
||||
Comp8Nationality:NZL
|
||||
Comp8Description:
|
||||
Comp8Handicap:1.0000000000
|
||||
Comp8HandicapDistance:0.00000
|
||||
Comp8StartTime:2014-05-01 06:59:59
|
||||
Comp8PictureUUID:64c3a8fa-83db-11e2-88c0-10bf48d758ce
|
||||
Comp8ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp8RouteUUID:05ee3850-b310-0131-50e3-10b11c4ed8fd
|
||||
|
||||
Comp9UUID:f097f4f0-7ad9-0131-e5b4-60a44ce903c3
|
||||
Comp9Name:Gazprom Team Russia
|
||||
Comp9NameShort:Team Russia
|
||||
Comp9Color:999900
|
||||
Comp9Nationality:RUS
|
||||
Comp9Description:
|
||||
Comp9Handicap:1.0000000000
|
||||
Comp9HandicapDistance:0.00000
|
||||
Comp9StartTime:2014-05-01 06:59:59
|
||||
Comp9ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp9RouteUUID:05ee3850-b310-0131-50e3-10b11c4ed8fd
|
||||
|
||||
Comp10UUID:19dc3eb0-7ada-0131-e5b5-60a44ce903c3
|
||||
Comp10Name:Groupama sailing team
|
||||
Comp10NameShort:Groupama
|
||||
Comp10Color:33CC00
|
||||
Comp10Nationality:AFG
|
||||
Comp10Description:
|
||||
Comp10Handicap:1.0000000000
|
||||
Comp10HandicapDistance:0.00000
|
||||
Comp10StartTime:2014-05-01 06:59:59
|
||||
Comp10ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp10RouteUUID:05ee3850-b310-0131-50e3-10b11c4ed8fd
|
||||
|
||||
Comp11UUID:5e15e7c0-7ada-0131-e5b6-60a44ce903c3
|
||||
Comp11Name:J.P. Morgan BAR
|
||||
Comp11NameShort:J.P. Morgan
|
||||
Comp11Color:CCFF00
|
||||
Comp11Nationality:GBR
|
||||
Comp11Description:
|
||||
Comp11Handicap:1.0000000000
|
||||
Comp11HandicapDistance:0.00000
|
||||
Comp11StartTime:2014-05-01 06:59:59
|
||||
Comp11ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp11RouteUUID:05ee3850-b310-0131-50e3-10b11c4ed8fd
|
||||
|
||||
Comp12UUID:84e68b70-7ada-0131-e5b7-60a44ce903c3
|
||||
Comp12Name:Oman Air
|
||||
Comp12NameShort:Oman Air
|
||||
Comp12Color:CCFF99
|
||||
Comp12Nationality:OMA
|
||||
Comp12Description:
|
||||
Comp12Handicap:1.0000000000
|
||||
Comp12HandicapDistance:0.00000
|
||||
Comp12StartTime:2014-05-01 06:59:59
|
||||
Comp12PictureUUID:65875138-83db-11e2-88c0-10bf48d758ce
|
||||
Comp12ClassUUID:648ee25a-83db-11e2-88c0-10bf48d758ce
|
||||
Comp12RouteUUID:05ee3850-b310-0131-50e3-10b11c4ed8fd
|
||||
|
||||
ControlPoint1UUID:1100ea60-7adb-0131-e5b8-60a44ce903c3
|
||||
ControlPoint1Name:Red-Green
|
||||
ControlPoint1HasTwoPoints:1
|
||||
ControlPoint1ShortName:RG
|
||||
ControlPoint1DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Red###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Name=Red###BREAKLINE###P1.UUID=5427c7d2-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Green###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Green###BREAKLINE###P2.UUID=785c3e44-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint1Mark1Lon:120.386452
|
||||
ControlPoint1Mark1Lat:36.046283
|
||||
ControlPoint1Mark2Lon:120.386955
|
||||
ControlPoint1Mark2Lat:36.046803
|
||||
|
||||
ControlPoint2UUID:1286f15e-83be-11e2-88c0-10bf48d758ce
|
||||
ControlPoint2Name:Blue
|
||||
ControlPoint2HasTwoPoints:0
|
||||
ControlPoint2ShortName:Bl
|
||||
ControlPoint2DataSheet:Name=Blue
|
||||
ControlPoint2Mark1Lon:120.380233
|
||||
ControlPoint2Mark1Lat:36.049133
|
||||
|
||||
ControlPoint3UUID:1a94c6a0-7adc-0131-e5f4-60a44ce903c3
|
||||
ControlPoint3Name:Black Conical-Blue
|
||||
ControlPoint3HasTwoPoints:1
|
||||
ControlPoint3ShortName:BB
|
||||
ControlPoint3DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Black###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Pattern=Checkered###BREAKLINE###P1.Name=Black Conical###BREAKLINE###P1.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Blue###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Blue###BREAKLINE###P2.UUID=1286f15e-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint3Mark1Lon:120.380500
|
||||
ControlPoint3Mark1Lat:36.049228
|
||||
ControlPoint3Mark2Lon:120.380233
|
||||
ControlPoint3Mark2Lat:36.049133
|
||||
|
||||
ControlPoint4UUID:2dc7d9d0-7b84-0131-b9c3-10b11c4ed8fd
|
||||
ControlPoint4Name:Black Cylinder - Black Conical
|
||||
ControlPoint4HasTwoPoints:1
|
||||
ControlPoint4ShortName:BB
|
||||
ControlPoint4DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Black###BREAKLINE###P1.Shape=Cylinder###BREAKLINE###P1.Pattern=Checkered###BREAKLINE###P1.Name=Black Cylinder###BREAKLINE###P1.UUID=b153dfd6-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Black###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Pattern=Checkered###BREAKLINE###P2.Name=Black Conical###BREAKLINE###P2.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce
|
||||
ControlPoint4Mark1Lon:120.380302
|
||||
ControlPoint4Mark1Lat:36.048843
|
||||
ControlPoint4Mark2Lon:120.380500
|
||||
ControlPoint4Mark2Lat:36.049228
|
||||
|
||||
ControlPoint5UUID:2e37b410-7adc-0131-e5fe-60a44ce903c3
|
||||
ControlPoint5Name:Black Conical-Yellow
|
||||
ControlPoint5HasTwoPoints:1
|
||||
ControlPoint5ShortName:BY
|
||||
ControlPoint5DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Black###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Pattern=Checkered###BREAKLINE###P1.Name=Black Conical###BREAKLINE###P1.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Yellow###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Yellow###BREAKLINE###P2.UUID=3fdd2402-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint5Mark1Lon:120.380500
|
||||
ControlPoint5Mark1Lat:36.049228
|
||||
ControlPoint5Mark2Lon:120.386192
|
||||
ControlPoint5Mark2Lat:36.046997
|
||||
|
||||
ControlPoint6UUID:3240586c-83c0-11e2-88c0-10bf48d758ce
|
||||
ControlPoint6Name:Finish Pole
|
||||
ControlPoint6HasTwoPoints:0
|
||||
ControlPoint6ShortName:F
|
||||
ControlPoint6DataSheet:Color=Black###BREAKLINE###Type=Landmark###BREAKLINE###Name=Finish Pole
|
||||
ControlPoint6Mark1Lon:58.304032
|
||||
ControlPoint6Mark1Lat:23.615582
|
||||
|
||||
ControlPoint7UUID:37cb36e0-7adb-0131-e5c2-60a44ce903c3
|
||||
ControlPoint7Name:Red-Blue
|
||||
ControlPoint7HasTwoPoints:1
|
||||
ControlPoint7ShortName:RB
|
||||
ControlPoint7DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Red###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Name=Red###BREAKLINE###P1.UUID=5427c7d2-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Blue###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Blue###BREAKLINE###P2.UUID=1286f15e-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint7Mark1Lon:120.386452
|
||||
ControlPoint7Mark1Lat:36.046283
|
||||
ControlPoint7Mark2Lon:120.380233
|
||||
ControlPoint7Mark2Lat:36.049133
|
||||
|
||||
ControlPoint8UUID:3e6c1c94-83bf-11e2-88c0-10bf48d758ce
|
||||
ControlPoint8Name:Race Committee
|
||||
ControlPoint8HasTwoPoints:0
|
||||
ControlPoint8ShortName:RC
|
||||
ControlPoint8DataSheet:Type=StartBoat###BREAKLINE###Name=Race Committee
|
||||
ControlPoint8Mark1Lon:120.380227
|
||||
ControlPoint8Mark1Lat:36.047118
|
||||
|
||||
ControlPoint9UUID:3fdd2402-83be-11e2-88c0-10bf48d758ce
|
||||
ControlPoint9Name:Yellow
|
||||
ControlPoint9HasTwoPoints:0
|
||||
ControlPoint9ShortName:Y
|
||||
ControlPoint9DataSheet:Type=Buoy###BREAKLINE###Color=Yellow###BREAKLINE###Shape=Conical###BREAKLINE###Name=Yellow
|
||||
ControlPoint9Mark1Lon:120.386192
|
||||
ControlPoint9Mark1Lat:36.046997
|
||||
|
||||
ControlPoint10UUID:4c304720-7adc-0131-e608-60a44ce903c3
|
||||
ControlPoint10Name:Black Conical-Red
|
||||
ControlPoint10HasTwoPoints:1
|
||||
ControlPoint10ShortName:BR
|
||||
ControlPoint10DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Black###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Pattern=Checkered###BREAKLINE###P1.Name=Black Conical###BREAKLINE###P1.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Red###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Red###BREAKLINE###P2.UUID=5427c7d2-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint10Mark1Lon:120.380500
|
||||
ControlPoint10Mark1Lat:36.049228
|
||||
ControlPoint10Mark2Lon:120.386452
|
||||
ControlPoint10Mark2Lat:36.046283
|
||||
|
||||
ControlPoint11UUID:4e0c2a90-7adb-0131-e5cc-60a44ce903c3
|
||||
ControlPoint11Name:Red-Yellow
|
||||
ControlPoint11HasTwoPoints:1
|
||||
ControlPoint11ShortName:RY
|
||||
ControlPoint11DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Red###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Name=Red###BREAKLINE###P1.UUID=5427c7d2-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Yellow###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Yellow###BREAKLINE###P2.UUID=3fdd2402-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint11Mark1Lon:120.386452
|
||||
ControlPoint11Mark1Lat:36.046283
|
||||
ControlPoint11Mark2Lon:120.386192
|
||||
ControlPoint11Mark2Lat:36.046997
|
||||
|
||||
ControlPoint12UUID:5427c7d2-83be-11e2-88c0-10bf48d758ce
|
||||
ControlPoint12Name:Red
|
||||
ControlPoint12HasTwoPoints:0
|
||||
ControlPoint12ShortName:R
|
||||
ControlPoint12DataSheet:Type=Buoy###BREAKLINE###Color=Red###BREAKLINE###Shape=Conical###BREAKLINE###Name=Red
|
||||
ControlPoint12Mark1Lon:120.386452
|
||||
ControlPoint12Mark1Lat:36.046283
|
||||
|
||||
ControlPoint13UUID:584cfe30-b328-0131-5246-10b11c4ed8fd
|
||||
ControlPoint13Name:R2-Green
|
||||
ControlPoint13HasTwoPoints:0
|
||||
ControlPoint13ShortName:G
|
||||
ControlPoint13Mark1Lon:120.386972
|
||||
ControlPoint13Mark1Lat:36.046795
|
||||
|
||||
ControlPoint14UUID:621831d0-7adc-0131-e612-60a44ce903c3
|
||||
ControlPoint14Name:Black Conical-Green
|
||||
ControlPoint14HasTwoPoints:1
|
||||
ControlPoint14ShortName:BG
|
||||
ControlPoint14DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Black###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Pattern=Checkered###BREAKLINE###P1.Name=Black Conical###BREAKLINE###P1.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Green###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Green###BREAKLINE###P2.UUID=785c3e44-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint14Mark1Lon:120.380500
|
||||
ControlPoint14Mark1Lat:36.049228
|
||||
ControlPoint14Mark2Lon:120.386955
|
||||
ControlPoint14Mark2Lat:36.046803
|
||||
|
||||
ControlPoint15UUID:77b9e620-7adb-0131-e5d6-60a44ce903c3
|
||||
ControlPoint15Name:Green-Blue
|
||||
ControlPoint15HasTwoPoints:1
|
||||
ControlPoint15ShortName:GB
|
||||
ControlPoint15DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Green###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Name=Green###BREAKLINE###P1.UUID=785c3e44-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Blue###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Blue###BREAKLINE###P2.UUID=1286f15e-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint15Mark1Lon:120.386955
|
||||
ControlPoint15Mark1Lat:36.046803
|
||||
ControlPoint15Mark2Lon:120.380233
|
||||
ControlPoint15Mark2Lat:36.049133
|
||||
|
||||
ControlPoint16UUID:785c3e44-83be-11e2-88c0-10bf48d758ce
|
||||
ControlPoint16Name:Green
|
||||
ControlPoint16HasTwoPoints:0
|
||||
ControlPoint16ShortName:G
|
||||
ControlPoint16DataSheet:Type=Buoy###BREAKLINE###Color=Green###BREAKLINE###Shape=Conical###BREAKLINE###Name=Green
|
||||
ControlPoint16Mark1Lon:120.386955
|
||||
ControlPoint16Mark1Lat:36.046803
|
||||
|
||||
ControlPoint17UUID:7e1b7a80-7d0b-0131-a109-10b11c4ed8fd
|
||||
ControlPoint17Name:Black Gate
|
||||
ControlPoint17HasTwoPoints:1
|
||||
ControlPoint17ShortName:S
|
||||
ControlPoint17DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Black###BREAKLINE###P1.Shape=Cylinder###BREAKLINE###P1.Pattern=Checkered###BREAKLINE###P1.Name=Black Cylinder###BREAKLINE###P1.UUID=b153dfd6-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Black###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Pattern=Checkered###BREAKLINE###P2.Name=Black Conical###BREAKLINE###P2.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint17Mark1Lon:103.855782
|
||||
ControlPoint17Mark1Lat:1.282103
|
||||
ControlPoint17Mark2Lon:103.857560
|
||||
ControlPoint17Mark2Lat:1.286382
|
||||
|
||||
ControlPoint18UUID:88ef6d40-7adc-0131-e61c-60a44ce903c3
|
||||
ControlPoint18Name:Finish Pole-Cylinder
|
||||
ControlPoint18HasTwoPoints:1
|
||||
ControlPoint18ShortName:F
|
||||
ControlPoint18DataSheet:P1.Color=Black###BREAKLINE###P1.Type=Landmark###BREAKLINE###P1.Name=Finish Pole###BREAKLINE###P1.UUID=3240586c-83c0-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Black###BREAKLINE###P2.Shape=Cylinder###BREAKLINE###P2.Pattern=Checkered###BREAKLINE###P2.Name=Black Cylinder###BREAKLINE###P2.UUID=b153dfd6-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint18Mark1Lon:58.304032
|
||||
ControlPoint18Mark1Lat:23.615582
|
||||
ControlPoint18Mark2Lon:120.380302
|
||||
ControlPoint18Mark2Lat:36.048843
|
||||
|
||||
ControlPoint19UUID:8f9a4ee0-7adb-0131-e5e0-60a44ce903c3
|
||||
ControlPoint19Name:Green-Yellow
|
||||
ControlPoint19HasTwoPoints:1
|
||||
ControlPoint19ShortName:GY
|
||||
ControlPoint19DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Green###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Name=Green###BREAKLINE###P1.UUID=785c3e44-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Yellow###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Yellow###BREAKLINE###P2.UUID=3fdd2402-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint19Mark1Lon:120.386955
|
||||
ControlPoint19Mark1Lat:36.046803
|
||||
ControlPoint19Mark2Lon:120.386192
|
||||
ControlPoint19Mark2Lat:36.046997
|
||||
|
||||
ControlPoint20UUID:a0f71190-7adb-0131-e5ea-60a44ce903c3
|
||||
ControlPoint20Name:Blue-Yellow
|
||||
ControlPoint20HasTwoPoints:1
|
||||
ControlPoint20ShortName:BY
|
||||
ControlPoint20DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Blue###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Name=Blue###BREAKLINE###P1.UUID=1286f15e-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Yellow###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Yellow###BREAKLINE###P2.UUID=3fdd2402-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint20Mark1Lon:120.380233
|
||||
ControlPoint20Mark1Lat:36.049133
|
||||
ControlPoint20Mark2Lon:120.386192
|
||||
ControlPoint20Mark2Lat:36.046997
|
||||
|
||||
ControlPoint21UUID:a68c6350-7adc-0131-e626-60a44ce903c3
|
||||
ControlPoint21Name:RC-Black Conical
|
||||
ControlPoint21HasTwoPoints:1
|
||||
ControlPoint21ShortName:F
|
||||
ControlPoint21DataSheet:P1.Type=StartBoat###BREAKLINE###P1.Name=Race Committee###BREAKLINE###P1.UUID=3e6c1c94-83bf-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Black###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Pattern=Checkered###BREAKLINE###P2.Name=Black Conical###BREAKLINE###P2.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint21Mark1Lon:120.380227
|
||||
ControlPoint21Mark1Lat:36.047118
|
||||
ControlPoint21Mark2Lon:120.380500
|
||||
ControlPoint21Mark2Lat:36.049228
|
||||
|
||||
ControlPoint22UUID:b153dfd6-83be-11e2-88c0-10bf48d758ce
|
||||
ControlPoint22Name:Black Cylinder
|
||||
ControlPoint22HasTwoPoints:0
|
||||
ControlPoint22ShortName:B
|
||||
ControlPoint22DataSheet:Type=Buoy###BREAKLINE###Color=Black###BREAKLINE###Shape=Cylinder###BREAKLINE###Pattern=Checkered###BREAKLINE###Name=Black Cylinder
|
||||
ControlPoint22Mark1Lon:120.380302
|
||||
ControlPoint22Mark1Lat:36.048843
|
||||
|
||||
ControlPoint23UUID:b62e0bf0-7adc-0131-e630-60a44ce903c3
|
||||
ControlPoint23Name:RC-Black Cylinder
|
||||
ControlPoint23HasTwoPoints:1
|
||||
ControlPoint23ShortName:S
|
||||
ControlPoint23DataSheet:P1.Type=StartBoat###BREAKLINE###P1.Name=Race Committee###BREAKLINE###P1.UUID=3e6c1c94-83bf-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Black###BREAKLINE###P2.Shape=Cylinder###BREAKLINE###P2.Pattern=Checkered###BREAKLINE###P2.Name=Black Cylinder###BREAKLINE###P2.UUID=b153dfd6-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint23Mark1Lon:120.380227
|
||||
ControlPoint23Mark1Lat:36.047118
|
||||
ControlPoint23Mark2Lon:120.380302
|
||||
ControlPoint23Mark2Lat:36.048843
|
||||
|
||||
ControlPoint24UUID:bd1fc330-7c10-0131-9c24-10b11c4ed8fd
|
||||
ControlPoint24Name:Black Cylinder-Yellow
|
||||
ControlPoint24HasTwoPoints:1
|
||||
ControlPoint24ShortName:S
|
||||
ControlPoint24DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=Black###BREAKLINE###P1.Shape=Cylinder###BREAKLINE###P1.Pattern=Checkered###BREAKLINE###P1.Name=Black Cylinder###BREAKLINE###P1.UUID=b153dfd6-83be-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Yellow###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Yellow###BREAKLINE###P2.UUID=3fdd2402-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint24Mark1Lon:120.380302
|
||||
ControlPoint24Mark1Lat:36.048843
|
||||
ControlPoint24Mark2Lon:120.386192
|
||||
ControlPoint24Mark2Lat:36.046997
|
||||
|
||||
ControlPoint25UUID:bf6777e6-83bd-11e2-88c0-10bf48d758ce
|
||||
ControlPoint25Name:White S
|
||||
ControlPoint25HasTwoPoints:0
|
||||
ControlPoint25ShortName:W
|
||||
ControlPoint25DataSheet:Type=Buoy###BREAKLINE###Color=White###BREAKLINE###Shape=Conical###BREAKLINE###Name=White S
|
||||
ControlPoint25Mark1Lon:120.381432
|
||||
ControlPoint25Mark1Lat:36.047478
|
||||
|
||||
ControlPoint26UUID:cd3c1dc0-7c11-0131-9c2e-10b11c4ed8fd
|
||||
ControlPoint26Name:Finish Pole-Conical
|
||||
ControlPoint26HasTwoPoints:1
|
||||
ControlPoint26ShortName:S
|
||||
ControlPoint26DataSheet:P1.Color=Black###BREAKLINE###P1.Type=Landmark###BREAKLINE###P1.Name=Finish Pole###BREAKLINE###P1.UUID=3240586c-83c0-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Black###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Pattern=Checkered###BREAKLINE###P2.Name=Black Conical###BREAKLINE###P2.UUID=d78695ea-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint26Mark1Lon:58.304032
|
||||
ControlPoint26Mark1Lat:23.615582
|
||||
ControlPoint26Mark2Lon:120.380500
|
||||
ControlPoint26Mark2Lat:36.049228
|
||||
|
||||
ControlPoint27UUID:d39a0d00-7adc-0131-e63a-60a44ce903c3
|
||||
ControlPoint27Name:White Gate
|
||||
ControlPoint27HasTwoPoints:1
|
||||
ControlPoint27ShortName:W
|
||||
ControlPoint27DataSheet:P1.Type=Buoy###BREAKLINE###P1.Color=White###BREAKLINE###P1.Shape=Conical###BREAKLINE###P1.Name=White S###BREAKLINE###P1.UUID=bf6777e6-83bd-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=White###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=White P###BREAKLINE###P2.UUID=e9ec42f8-83bd-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint27Mark1Lon:120.381432
|
||||
ControlPoint27Mark1Lat:36.047478
|
||||
ControlPoint27Mark2Lon:120.381187
|
||||
ControlPoint27Mark2Lat:36.048325
|
||||
|
||||
ControlPoint28UUID:d78695ea-83be-11e2-88c0-10bf48d758ce
|
||||
ControlPoint28Name:Black Conical
|
||||
ControlPoint28HasTwoPoints:0
|
||||
ControlPoint28ShortName:B
|
||||
ControlPoint28DataSheet:Type=Buoy###BREAKLINE###Color=Black###BREAKLINE###Shape=Conical###BREAKLINE###Pattern=Checkered###BREAKLINE###Name=Black Conical
|
||||
ControlPoint28Mark1Lon:120.380500
|
||||
ControlPoint28Mark1Lat:36.049228
|
||||
|
||||
ControlPoint29UUID:e9ec42f8-83bd-11e2-88c0-10bf48d758ce
|
||||
ControlPoint29Name:White P
|
||||
ControlPoint29HasTwoPoints:0
|
||||
ControlPoint29ShortName:W
|
||||
ControlPoint29DataSheet:Type=Buoy###BREAKLINE###Color=White###BREAKLINE###Shape=Conical###BREAKLINE###Name=White P
|
||||
ControlPoint29Mark1Lon:120.381187
|
||||
ControlPoint29Mark1Lat:36.048325
|
||||
|
||||
ControlPoint30UUID:eff23330-7b84-0131-b9d2-10b11c4ed8fd
|
||||
ControlPoint30Name:RC-Red
|
||||
ControlPoint30HasTwoPoints:1
|
||||
ControlPoint30ShortName:S
|
||||
ControlPoint30DataSheet:P1.Type=StartBoat###BREAKLINE###P1.Name=Race Committee###BREAKLINE###P1.UUID=3e6c1c94-83bf-11e2-88c0-10bf48d758ce###BREAKLINE###P2.Type=Buoy###BREAKLINE###P2.Color=Red###BREAKLINE###P2.Shape=Conical###BREAKLINE###P2.Name=Red###BREAKLINE###P2.UUID=5427c7d2-83be-11e2-88c0-10bf48d758ce###BREAKLINE###
|
||||
ControlPoint30Mark1Lon:120.380227
|
||||
ControlPoint30Mark1Lat:36.047118
|
||||
ControlPoint30Mark2Lon:120.386452
|
||||
ControlPoint30Mark2Lat:36.046283
|
||||
|
||||
|
||||
SegmentFile:segments.php
|
||||
Route1UUID:05ee3850-b310-0131-50e3-10b11c4ed8fd
|
||||
Route1Description:Race 4
|
||||
Route1Length:0
|
||||
Route1DataSheet:Seq.1=Line###BREAKLINE###Seq.2=Starboard###BREAKLINE###Seq.3=Gate###BREAKLINE###Seq.4=Starboard###BREAKLINE###Seq.5=Line###BREAKLINE###
|
||||
Route1ControlPoint1UUID:b62e0bf0-7adc-0131-e630-60a44ce903c3
|
||||
Route1ControlPoint2UUID:785c3e44-83be-11e2-88c0-10bf48d758ce
|
||||
Route1ControlPoint3UUID:d39a0d00-7adc-0131-e63a-60a44ce903c3
|
||||
Route1ControlPoint4UUID:3fdd2402-83be-11e2-88c0-10bf48d758ce
|
||||
Route1ControlPoint5UUID:a68c6350-7adc-0131-e626-60a44ce903c3
|
||||
|
||||
//-------- AUTO GENERATED PARAMETERS END ------------------
|
||||
+9
-1
@@ -24,10 +24,18 @@ public class NaturalComparatorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCaseInsesitive(){
|
||||
public void testCaseInsensitive(){
|
||||
assertEquals(0, caseInsensitive.compare("E", "e"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCaseInsensitiveIsDifferent(){
|
||||
assertEquals(-1, caseInsensitive.compare("E", "F"));
|
||||
assertEquals(-1, caseInsensitive.compare("E", "f"));
|
||||
assertEquals(1, caseInsensitive.compare("F", "E"));
|
||||
assertEquals(1, caseInsensitive.compare("f", "E"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEmpty() {
|
||||
assertTrue(comparator.compare("", "a") < 0);
|
||||
|
||||
+4
-4
@@ -38,20 +38,20 @@ public abstract class AbstractManeuverDetectionTestCase extends OnlineTracTracBa
|
||||
* The type of maneuver that should have happened to the given time point.
|
||||
* @param maneuverTimePoint
|
||||
* The time point the maneuver type should have happened.
|
||||
* @param tolerance
|
||||
* @param toleranceInMillis
|
||||
* The tolerance of time, the maneuver should have happened in milliseconds.
|
||||
*/
|
||||
protected void assertManeuver(List<Maneuver> maneuverList, ManeuverType maneuverType,
|
||||
TimePoint maneuverTimePoint, int tolerance) {
|
||||
TimePoint maneuverTimePoint, int toleranceInMillis) {
|
||||
for (Maneuver maneuver : maneuverList) {
|
||||
assertNotNull(maneuver.getTimePoint());
|
||||
if (maneuver.getType() == maneuverType
|
||||
&& Math.abs(maneuver.getTimePoint().asMillis() - maneuverTimePoint.asMillis()) <= tolerance) {
|
||||
&& Math.abs(maneuver.getTimePoint().asMillis() - maneuverTimePoint.asMillis()) <= toleranceInMillis) {
|
||||
maneuversInvalid.remove(maneuver);
|
||||
return;
|
||||
}
|
||||
}
|
||||
fail("Didn't find maneuver type " + maneuverType + " in " + tolerance + "ms around " + maneuverTimePoint);
|
||||
fail("Didn't find maneuver type " + maneuverType + " in " + toleranceInMillis + "ms around " + maneuverTimePoint);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -48,13 +48,17 @@ public class LockTraceTest {
|
||||
NamedReentrantReadWriteLock lock = new NamedReentrantReadWriteLock("testReentrantReadLocking-Lock", /* fair */ true);
|
||||
LockUtil.lockForRead(lock);
|
||||
assertTrue(lock.getReaders().contains(Thread.currentThread()));
|
||||
assertEquals(1, lock.getReaders().size());
|
||||
LockUtil.lockForRead(lock);
|
||||
assertTrue(lock.getReaders().contains(Thread.currentThread()));
|
||||
assertEquals(2, lock.getReaders().size());
|
||||
LockUtil.unlockAfterRead(lock);
|
||||
assertTrue(lock.getReaders().contains(Thread.currentThread()));
|
||||
assertEquals(1, lock.getReaders().size());
|
||||
LockUtil.unlockAfterRead(lock);
|
||||
assertFalse(lock.getReaders().contains(Thread.currentThread()));
|
||||
assertEquals(0, lock.getReadHoldCount());
|
||||
assertEquals(0, lock.getReaders().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
package com.sap.sailing.domain.test;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNotSame;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.text.ParseException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.common.ManeuverType;
|
||||
import com.sap.sailing.domain.common.NoWindException;
|
||||
import com.sap.sailing.domain.common.WindSourceType;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
|
||||
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
||||
import com.sap.sailing.domain.tracking.Maneuver;
|
||||
import com.sap.sailing.domain.tracking.impl.WindImpl;
|
||||
import com.sap.sailing.domain.tractracadapter.ReceiverType;
|
||||
|
||||
public class ManeuverAnalysisQingdao2014Test extends AbstractManeuverDetectionTestCase {
|
||||
public ManeuverAnalysisQingdao2014Test() throws MalformedURLException, URISyntaxException {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getExpectedEventName() {
|
||||
return "ESS Qingdao 2014";
|
||||
}
|
||||
|
||||
|
||||
@Before
|
||||
public void setUp() throws URISyntaxException, IOException, InterruptedException, ParseException {
|
||||
super.setUp();
|
||||
URI storedUri = new URI("file:///"+new File("resources/event_20140429_ESSQingdao-Race_4.mtb").getCanonicalPath().replace('\\', '/'));
|
||||
super.setUp(
|
||||
new URL("file:///" + new File("resources/event_20140429_ESSQingdao-Race_4.txt").getCanonicalPath()),
|
||||
/* liveUri */null, /* storedUri */storedUri, new ReceiverType[] { ReceiverType.MARKPASSINGS,
|
||||
ReceiverType.MARKPOSITIONS, ReceiverType.RACECOURSE, ReceiverType.RAWPOSITIONS });
|
||||
getTrackedRace().recordWind(
|
||||
new WindImpl(/* position */null, new MillisecondsTimePoint(dateFormat.parse("05/01/2014-09:02:00")),
|
||||
new KnotSpeedWithBearingImpl(10, new DegreeBearingImpl(269))),
|
||||
new WindSourceImpl(WindSourceType.WEB));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the Race 4 for competitor "Alinghi" at a time where the maneuver detection test is likely to compute
|
||||
* a penalty although between the jibe and the tack there is a mark passing
|
||||
*/
|
||||
@Test
|
||||
public void testManeuversForAlinghiCriticalDetection() throws ParseException, NoWindException {
|
||||
Competitor competitor = getCompetitorByName("Alinghi");
|
||||
assertNotNull(competitor);
|
||||
Date fromDate = dateFormat.parse("05/01/2014-09:07:00");
|
||||
Date toDate = dateFormat.parse("05/01/2014-09:10:00");
|
||||
assertNotNull(fromDate);
|
||||
assertNotNull(toDate);
|
||||
List<Maneuver> maneuvers = getTrackedRace().getManeuvers(competitor, new MillisecondsTimePoint(fromDate),
|
||||
new MillisecondsTimePoint(toDate), /* waitForLatest */ true);
|
||||
maneuversInvalid = new ArrayList<Maneuver>(maneuvers);
|
||||
|
||||
assertManeuver(maneuvers, ManeuverType.JIBE, new MillisecondsTimePoint(dateFormat.parse("05/01/2014-09:08:15")), 5000);
|
||||
assertManeuver(maneuvers, ManeuverType.TACK, new MillisecondsTimePoint(dateFormat.parse("05/01/2014-09:08:51")), 5000);
|
||||
for (Maneuver maneuver : maneuvers) {
|
||||
// make sure there is no penalty detected in the time frame considered
|
||||
assertNotSame("Found an unexpected penalty "+maneuver, ManeuverType.PENALTY_CIRCLE, maneuver.getType());
|
||||
}
|
||||
}
|
||||
}
|
||||
+6
-4
@@ -1302,9 +1302,12 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race
|
||||
entryDTO.totalPoints = entry.getTotalPoints();
|
||||
entryDTO.reasonForMaxPoints = entry.getMaxPointsReason();
|
||||
entryDTO.discarded = entry.isDiscarded();
|
||||
final GPSFixTrack<Competitor, GPSFixMoving> track = trackedRace == null ? null : trackedRace.getTrack(competitor);
|
||||
if (trackedRace != null) {
|
||||
Date timePointOfLastPositionFixAtOrBeforeQueryTimePoint = getTimePointOfLastFixAtOrBefore(competitor, trackedRace, timePoint);
|
||||
entryDTO.averageSamplingInterval = trackedRace.getTrack(competitor).getAverageIntervalBetweenFixes();
|
||||
if (track != null) {
|
||||
entryDTO.averageSamplingInterval = track.getAverageIntervalBetweenFixes();
|
||||
}
|
||||
if (timePointOfLastPositionFixAtOrBeforeQueryTimePoint != null) {
|
||||
long timeDifferenceInMs = timePoint.asMillis() - timePointOfLastPositionFixAtOrBeforeQueryTimePoint.getTime();
|
||||
entryDTO.timeSinceLastPositionFixInSeconds = timeDifferenceInMs == 0 ? 0.0 : timeDifferenceInMs / 1000.0;
|
||||
@@ -1341,12 +1344,11 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race
|
||||
competitor, startOfRace);
|
||||
entryDTO.distanceToStartLineAtStartOfRaceInMeters = distanceToStartLineAtStartOfRace == null ? null
|
||||
: distanceToStartLineAtStartOfRace.getMeters();
|
||||
Speed speedAtStartTime = trackedRace.getTrack(competitor)
|
||||
.getEstimatedSpeed(startOfRace);
|
||||
Speed speedAtStartTime = track == null ? null : track.getEstimatedSpeed(startOfRace);
|
||||
entryDTO.speedOverGroundAtStartOfRaceInKnots = speedAtStartTime == null ? null
|
||||
: speedAtStartTime.getKnots();
|
||||
TimePoint competitorStartTime = firstMarkPassing.getTimePoint();
|
||||
Speed competitorSpeedWhenPassingStart = trackedRace.getTrack(competitor)
|
||||
Speed competitorSpeedWhenPassingStart = track == null ? null : track
|
||||
.getEstimatedSpeed(competitorStartTime);
|
||||
entryDTO.speedOverGroundAtPassingStartWaypointInKnots = competitorSpeedWhenPassingStart == null ? null
|
||||
: competitorSpeedWhenPassingStart.getKnots();
|
||||
|
||||
+12
-1
@@ -21,13 +21,24 @@ public abstract class HighPointFirstGetsFixedScore extends HighPoint {
|
||||
|
||||
private final double scoreForRaceWinner;
|
||||
|
||||
private final double minimumScoreFromRank;
|
||||
|
||||
public HighPointFirstGetsFixedScore(double scoreForRaceWinner) {
|
||||
this(scoreForRaceWinner, /* minimumScoreFromRank */ 1.0);
|
||||
}
|
||||
|
||||
protected HighPointFirstGetsFixedScore(double scoreForRaceWinner, double minimumScoreFromRank) {
|
||||
this.scoreForRaceWinner = scoreForRaceWinner;
|
||||
this.minimumScoreFromRank = minimumScoreFromRank;
|
||||
}
|
||||
|
||||
protected double getScoreForRaceWinner() {
|
||||
return scoreForRaceWinner;
|
||||
}
|
||||
|
||||
private double getMinimumScoreFromRank() {
|
||||
return minimumScoreFromRank;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getScoreForRank(RaceColumn raceColumn, Competitor competitor, int rank, Callable<Integer> numberOfCompetitorsInRaceFetcher, NumberOfCompetitorsInLeaderboardFetcher numberOfCompetitorsInLeaderboardFetcher) {
|
||||
@@ -36,7 +47,7 @@ public abstract class HighPointFirstGetsFixedScore extends HighPoint {
|
||||
if (effectiveRank == 0) {
|
||||
result = null;
|
||||
} else {
|
||||
result = Math.max(1.0, (double) (getScoreForRaceWinner() - effectiveRank + 1));
|
||||
result = Math.max(getMinimumScoreFromRank(), (double) (getScoreForRaceWinner() - effectiveRank + 1));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
+3
-3
@@ -3,10 +3,10 @@ package com.sap.sailing.domain.leaderboard.impl;
|
||||
import com.sap.sailing.domain.common.ScoringSchemeType;
|
||||
|
||||
public class HighPointWinnerGetsFive extends HighPointFirstGetsFixedScore {
|
||||
private static final long serialVersionUID = 1367473387431601943L;
|
||||
private static final long serialVersionUID = 1367473387431601943L;
|
||||
|
||||
public HighPointWinnerGetsFive() {
|
||||
super(/* scoreForRaceWinner */ 5);
|
||||
public HighPointWinnerGetsFive() {
|
||||
super(/* scoreForRaceWinner */ 5, /* minimumScoreFromRank */ 0.0);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -398,7 +398,8 @@ public interface TrackedRace extends Serializable {
|
||||
/**
|
||||
* Uses a {@link DouglasPeucker Douglas-Peucker} algorithm to approximate this track's fixes starting at time
|
||||
* <code>from</code> until time point <code>to</code> such that the maximum distance between the track's fixes and
|
||||
* the approximation is at most <code>maxDistance</code>.
|
||||
* the approximation is at most <code>maxDistance</code>. The approximation's fixes are original fixes from
|
||||
* the competitor's {@link GPSFixTrack track}.
|
||||
*/
|
||||
List<GPSFixMoving> approximate(Competitor competitor, Distance maxDistance, TimePoint from, TimePoint to);
|
||||
|
||||
|
||||
+121
-57
@@ -5,6 +5,7 @@ import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.ConcurrentModificationException;
|
||||
import java.util.Date;
|
||||
@@ -1927,11 +1928,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
||||
}
|
||||
if (extendedTo != null) {
|
||||
try {
|
||||
List<Maneuver> extendedResultForCache = detectManeuvers(
|
||||
competitor,
|
||||
approximate(competitor,
|
||||
getRace().getBoatClass().getMaximumDistanceForCourseApproximation(), extendedFrom,
|
||||
extendedTo));
|
||||
List<Maneuver> extendedResultForCache = detectManeuvers(competitor, extendedFrom, extendedTo, /* ignoreMarkPassings */ false);
|
||||
result = new Triple<TimePoint, TimePoint, List<Maneuver>>(extendedFrom, extendedTo,
|
||||
extendedResultForCache);
|
||||
} catch (NoWindException ex) {
|
||||
@@ -1951,11 +1948,28 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
||||
+ (System.currentTimeMillis() - startedAt) + "ms");
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ignoreMarkPassings
|
||||
* When <code>true</code>, no {@link ManeuverType#MARK_PASSING} maneuvers will be identified, and the
|
||||
* fact that a mark passing would split up what else may be a penalty circle is ignored. This is helpful
|
||||
* for recursive calls, e.g., after identifying a tack and a jibe around a mark passing and trying to
|
||||
* identify for the time before and after the mark passing which maneuvers exist on which side of the
|
||||
* passing.
|
||||
* @return a valid but possibly empty list
|
||||
* @see #detectManeuvers(Competitor, List, boolean, TimePoint, TimePoint)
|
||||
*/
|
||||
private List<Maneuver> detectManeuvers(Competitor competitor, TimePoint from, TimePoint to, boolean ignoreMarkPassings) throws NoWindException {
|
||||
return detectManeuvers(
|
||||
competitor, approximate(competitor, getRace().getBoatClass().getMaximumDistanceForCourseApproximation(),
|
||||
from, to), ignoreMarkPassings, from, to);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to detect maneuvers on the <code>competitor</code>'s track based on a number of approximating fixes. The
|
||||
* fixes contain bearing information, but this is not the bearing leading to the next approximation fix but the
|
||||
* bearing the boat had at the time of the approximating fix which is taken from the original track.<p>
|
||||
* bearing the boat had at the time of the approximating fix which is taken from the original track.
|
||||
* <p>
|
||||
*
|
||||
* The time period assumed for a maneuver duration is taken from the
|
||||
* {@link BoatClass#getApproximateManeuverDurationInMilliseconds() boat class}. If no maneuver is detected, an empty
|
||||
@@ -1966,10 +1980,28 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
||||
* timely distance than {@link #getApproximateManeuverDurationInMilliseconds()} (including single course changes
|
||||
* that have no surrounding other course changes to group) are grouped into one {@link Maneuver}.
|
||||
*
|
||||
* @param ignoreMarkPassings
|
||||
* When <code>true</code>, no {@link ManeuverType#MARK_PASSING} maneuvers will be identified, and the
|
||||
* fact that a mark passing would split up what else may be a penalty circle is ignored. This is helpful
|
||||
* for recursive calls, e.g., after identifying a tack and a jibe around a mark passing and trying to
|
||||
* identify for the time before and after the mark passing which maneuvers exist on which side of the
|
||||
* passing.
|
||||
* @param earliestManeuverStart
|
||||
* maneuver start will not be before this time point; if a maneuver is found whose time point is at or
|
||||
* after this time point, no matter how close it is, its start regarding speed and course into the
|
||||
* maneuver and the leg before the maneuver is not taken from an earlier time point, even if half the
|
||||
* maneuver duration before the maneuver time point were before this time point.
|
||||
* @param latestManeuverEnd
|
||||
* maneuver end will not be after this time point; if a maneuver is found whose time point is at or
|
||||
* before this time point, no matter how close it is, its end regarding speed and course out of the
|
||||
* maneuver and the leg after the maneuver is not taken from a later time point, even if half the
|
||||
* maneuver duration after the maneuver time point were after this time point.
|
||||
*
|
||||
* @return an empty list if no maneuver is detected for <code>competitor</code> between <code>from</code> and
|
||||
* <code>to</code>, or else the list of maneuvers detected.
|
||||
*/
|
||||
private List<Maneuver> detectManeuvers(Competitor competitor, List<GPSFixMoving> approximatingFixesToAnalyze)
|
||||
private List<Maneuver> detectManeuvers(Competitor competitor, List<GPSFixMoving> approximatingFixesToAnalyze,
|
||||
boolean ignoreMarkPassings, TimePoint earliestManeuverStart, TimePoint latestManeuverEnd)
|
||||
throws NoWindException {
|
||||
List<Maneuver> result = new ArrayList<Maneuver>();
|
||||
if (approximatingFixesToAnalyze.size() > 2) {
|
||||
@@ -1998,7 +2030,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
||||
// start new list
|
||||
List<Maneuver> maneuvers = groupChangesInSameDirectionIntoManeuvers(competitor,
|
||||
speedWithBearingOnApproximationAtBeginningOfUnidirectionalCourseChanges,
|
||||
courseChangeSequenceInSameDirection);
|
||||
courseChangeSequenceInSameDirection, ignoreMarkPassings, earliestManeuverStart, latestManeuverEnd);
|
||||
result.addAll(maneuvers);
|
||||
courseChangeSequenceInSameDirection.clear();
|
||||
speedWithBearingOnApproximationAtBeginningOfUnidirectionalCourseChanges = speedWithBearingOnApproximationFromPreviousToCurrent;
|
||||
@@ -2011,7 +2043,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
||||
if (!courseChangeSequenceInSameDirection.isEmpty()) {
|
||||
result.addAll(groupChangesInSameDirectionIntoManeuvers(competitor,
|
||||
speedWithBearingOnApproximationAtBeginningOfUnidirectionalCourseChanges,
|
||||
courseChangeSequenceInSameDirection));
|
||||
courseChangeSequenceInSameDirection, ignoreMarkPassings, earliestManeuverStart, latestManeuverEnd));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
@@ -2062,18 +2094,34 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
||||
* direction which may, e.g., represent a penalty circle or a mark rounding maneuver. As the maneuver's time point,
|
||||
* the average time point of the course changes that went into the maneuver construction is used.
|
||||
* <p>
|
||||
*
|
||||
* @param speedWithBearingOnApproximationAtBeginning
|
||||
* the speed/bearing before the first approximating fix passed in
|
||||
* <code>courseChangeSequenceInSameDirection</code>
|
||||
* @param courseChangeSequenceInSameDirection
|
||||
* all expected to have equal {@link CourseChange#to()} values
|
||||
* @param ignoreMarkPassings
|
||||
* When <code>true</code>, no {@link ManeuverType#MARK_PASSING} maneuvers will be identified, and the
|
||||
* fact that a mark passing would split up what else may be a penalty circle is ignored. This is helpful
|
||||
* for recursive calls, e.g., after identifying a tack and a jibe around a mark passing and trying to
|
||||
* identify for the time before and after the mark passing which maneuvers exist on which side of the
|
||||
* passing.
|
||||
* @param earliestManeuverStart
|
||||
* maneuver start will not be before this time point; if a maneuver is found whose time point is at or
|
||||
* after this time point, no matter how close it is, its start regarding speed and course into the
|
||||
* maneuver and the leg before the maneuver is not taken from an earlier time point, even if half the
|
||||
* maneuver duration before the maneuver time point were before this time point.
|
||||
* @param latestManeuverEnd
|
||||
* maneuver end will not be after this time point; if a maneuver is found whose time point is at or
|
||||
* before this time point, no matter how close it is, its end regarding speed and course out of the
|
||||
* maneuver and the leg after the maneuver is not taken from a later time point, even if half the
|
||||
* maneuver duration after the maneuver time point were after this time point.
|
||||
*
|
||||
* @return a non-<code>null</code> list
|
||||
*/
|
||||
private List<Maneuver> groupChangesInSameDirectionIntoManeuvers(Competitor competitor,
|
||||
SpeedWithBearing speedWithBearingOnApproximationAtBeginning,
|
||||
List<Pair<GPSFixMoving, CourseChange>> courseChangeSequenceInSameDirection) throws NoWindException {
|
||||
List<Pair<GPSFixMoving, CourseChange>> courseChangeSequenceInSameDirection, boolean ignoreMarkPassings,
|
||||
TimePoint earliestManeuverStart, TimePoint latestManeuverEnd) throws NoWindException {
|
||||
List<Maneuver> result = new ArrayList<Maneuver>();
|
||||
List<Pair<GPSFixMoving, CourseChange>> group = new ArrayList<Pair<GPSFixMoving, CourseChange>>();
|
||||
if (!courseChangeSequenceInSameDirection.isEmpty()) {
|
||||
@@ -2104,7 +2152,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
||||
// if next is more then approximate maneuver duration later or further apart than two hull lengths,
|
||||
// turn the current group into a maneuver and add to result
|
||||
Util.addAll(createManeuverFromGroupOfCourseChanges(competitor, beforeGroupOnApproximation,
|
||||
group, afterCurrentCourseChange, totalCourseChangeInDegrees, totalMilliseconds), result);
|
||||
group, afterCurrentCourseChange, totalCourseChangeInDegrees, totalMilliseconds, earliestManeuverStart, latestManeuverEnd), result);
|
||||
group.clear();
|
||||
totalCourseChangeInDegrees = 0.0;
|
||||
totalMilliseconds = 0l;
|
||||
@@ -2120,7 +2168,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
||||
} while (iter.hasNext());
|
||||
if (!group.isEmpty()) {
|
||||
Util.addAll(createManeuverFromGroupOfCourseChanges(competitor, beforeGroupOnApproximation, group,
|
||||
afterCurrentCourseChange, totalCourseChangeInDegrees, totalMilliseconds), result);
|
||||
afterCurrentCourseChange, totalCourseChangeInDegrees, totalMilliseconds, earliestManeuverStart, latestManeuverEnd), result);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
@@ -2129,19 +2177,15 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
||||
private Iterable<Maneuver> createManeuverFromGroupOfCourseChanges(Competitor competitor,
|
||||
SpeedWithBearing speedWithBearingOnApproximationAtBeginning, List<Pair<GPSFixMoving, CourseChange>> group,
|
||||
SpeedWithBearing speedWithBearingOnApproximationAtEnd, double totalCourseChangeInDegrees,
|
||||
long totalMilliseconds) throws NoWindException {
|
||||
long totalMilliseconds, TimePoint earliestManeuverStart, TimePoint latestManeuverEnd) throws NoWindException {
|
||||
List<Maneuver> result = new ArrayList<>();
|
||||
MillisecondsTimePoint timePointBeforeManeuver = new MillisecondsTimePoint(group.get(0).getA().getTimePoint()
|
||||
.asMillis()
|
||||
- getApproximateManeuverDurationInMilliseconds() / 2);
|
||||
MillisecondsTimePoint timePointAfterManeuver = new MillisecondsTimePoint(group.get(group.size() - 1).getA()
|
||||
.getTimePoint().asMillis()
|
||||
+ getApproximateManeuverDurationInMilliseconds() / 2);
|
||||
TimePoint maneuverTimePoint = computeManeuverTimepoint(competitor, timePointBeforeManeuver,
|
||||
timePointAfterManeuver);
|
||||
TimePoint timePointBeforeManeuver = Collections.max(Arrays.asList(new MillisecondsTimePoint(group.get(0).getA().getTimePoint()
|
||||
.asMillis() - getApproximateManeuverDurationInMilliseconds() / 2), earliestManeuverStart));
|
||||
TimePoint timePointAfterManeuver = Collections.min(Arrays.asList(new MillisecondsTimePoint(group.get(group.size() - 1).getA()
|
||||
.getTimePoint().asMillis() + getApproximateManeuverDurationInMilliseconds() / 2), latestManeuverEnd));
|
||||
TimePoint maneuverTimePoint = computeManeuverTimepoint(competitor, timePointBeforeManeuver, timePointAfterManeuver);
|
||||
final GPSFixTrack<Competitor, GPSFixMoving> competitorTrack = getTrack(competitor);
|
||||
Position maneuverPosition = competitorTrack
|
||||
.getEstimatedPosition(maneuverTimePoint, /* extrapolate */false);
|
||||
Position maneuverPosition = competitorTrack.getEstimatedPosition(maneuverTimePoint, /* extrapolate */false);
|
||||
Tack tackAfterManeuver = getTack(maneuverPosition, timePointAfterManeuver,
|
||||
speedWithBearingOnApproximationAtEnd.getBearing());
|
||||
ManeuverType maneuverType;
|
||||
@@ -2154,18 +2198,23 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
||||
final NauticalSide courseChangedTo = totalCourseChangeInDegrees < 0 ? NauticalSide.PORT : NauticalSide.STARBOARD;
|
||||
// check for mask passing first; a tacking / jibe-setting mark rounding thus takes precedence over being
|
||||
// detected as a penalty circle
|
||||
final TimePoint markPassingTimePoint;
|
||||
if (legBeforeManeuver != legAfterManeuver
|
||||
// a maneuver at the start line is not to be considered a MARK_PASSING maneuver; show a tack as a tack
|
||||
&& legAfterManeuver != null
|
||||
&& legAfterManeuver.getLeg().getFrom() != getRace().getCourse().getFirstWaypoint()) {
|
||||
maneuverType = ManeuverType.MARK_PASSING;
|
||||
waypointPassed = legAfterManeuver.getLeg().getFrom();
|
||||
MarkPassing markPassing = getMarkPassing(competitor, waypointPassed);
|
||||
markPassingTimePoint = markPassing != null ? markPassing.getTimePoint() : maneuverTimePoint;
|
||||
Position markPassingPosition = markPassing != null ? competitorTrack.getEstimatedPosition(markPassingTimePoint, /* extrapolate */false) : maneuverPosition;
|
||||
sideToWhichWaypointWasPassed = courseChangedTo;
|
||||
// produce an additional mark passing maneuver; continue to analyze to catch jibe sets and kiwi drops
|
||||
result.add(new MarkPassingManeuverImpl(maneuverType, tackAfterManeuver, maneuverPosition,
|
||||
maneuverTimePoint, speedWithBearingOnApproximationAtBeginning,
|
||||
result.add(new MarkPassingManeuverImpl(ManeuverType.MARK_PASSING, tackAfterManeuver, markPassingPosition,
|
||||
markPassingTimePoint, speedWithBearingOnApproximationAtBeginning,
|
||||
speedWithBearingOnApproximationAtEnd, totalCourseChangeInDegrees, maneuverLoss, waypointPassed,
|
||||
sideToWhichWaypointWasPassed));
|
||||
} else {
|
||||
markPassingTimePoint = null;
|
||||
}
|
||||
final Wind wind = getWind(maneuverPosition, maneuverTimePoint);
|
||||
final SpeedWithBearing estimatedSpeedBeforeManeuver = competitorTrack.getEstimatedSpeed(timePointBeforeManeuver);
|
||||
@@ -2178,36 +2227,51 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
||||
courseAfterManeuver, wind.getBearing());
|
||||
boolean tacked = bearingChangeAnalyzer.didPass(courseBeforeManeuver, totalCourseChangeInDegrees,
|
||||
courseAfterManeuver, wind.getFrom());
|
||||
if (tacked && jibed) {
|
||||
maneuverType = ManeuverType.PENALTY_CIRCLE;
|
||||
if (legBeforeManeuver != null) {
|
||||
maneuverLoss = legBeforeManeuver.getManeuverLoss(timePointBeforeManeuver, maneuverTimePoint,
|
||||
timePointAfterManeuver);
|
||||
}
|
||||
} else if (tacked) {
|
||||
maneuverType = ManeuverType.TACK;
|
||||
if (legBeforeManeuver != null) {
|
||||
maneuverLoss = legBeforeManeuver.getManeuverLoss(timePointBeforeManeuver, maneuverTimePoint,
|
||||
timePointAfterManeuver);
|
||||
}
|
||||
} else if (jibed) {
|
||||
maneuverType = ManeuverType.JIBE;
|
||||
if (legBeforeManeuver != null) {
|
||||
maneuverLoss = legBeforeManeuver.getManeuverLoss(timePointBeforeManeuver, maneuverTimePoint,
|
||||
timePointAfterManeuver);
|
||||
}
|
||||
if (markPassingTimePoint != null && (tacked || jibed)) {
|
||||
// In case of a mark passing we need to split the maneuver analysis into the phase before and after
|
||||
// the mark passing. First of all, this is important to identify the correct maneuver time point for
|
||||
// each tack and jibe, second it is essential to call a penalty which is only the case if the tack and
|
||||
// the jibe are on the same side of the mark passing; otherwise this may have been a jibe set or a
|
||||
// kiwi drop.
|
||||
// Therefore, we recursively detect the maneuvers for the segment before and the segment after the
|
||||
// mark passing and add the results to our result.
|
||||
result.addAll(detectManeuvers(competitor, timePointBeforeManeuver, markPassingTimePoint.minus(1), /* ignoreMarkPassings */ true));
|
||||
result.addAll(detectManeuvers(competitor, markPassingTimePoint.plus(1), timePointAfterManeuver, /* ignoreMarkPassings */ true));
|
||||
} else {
|
||||
// heading up or bearing away
|
||||
Bearing windBearing = wind.getBearing();
|
||||
Bearing toWindBeforeManeuver = windBearing.getDifferenceTo(speedWithBearingOnApproximationAtBeginning.getBearing());
|
||||
Bearing toWindAfterManeuver = windBearing.getDifferenceTo(speedWithBearingOnApproximationAtEnd.getBearing());
|
||||
maneuverType = Math.abs(toWindBeforeManeuver.getDegrees()) < Math.abs(toWindAfterManeuver.getDegrees()) ? ManeuverType.HEAD_UP
|
||||
: ManeuverType.BEAR_AWAY;
|
||||
// Either there was no mark passing, or the mark passing was not accompanied by a tack or a jibe
|
||||
if (tacked && jibed && markPassingTimePoint == null) {
|
||||
maneuverType = ManeuverType.PENALTY_CIRCLE;
|
||||
if (legBeforeManeuver != null) {
|
||||
maneuverLoss = legBeforeManeuver.getManeuverLoss(timePointBeforeManeuver, maneuverTimePoint,
|
||||
timePointAfterManeuver);
|
||||
}
|
||||
} else if (tacked) {
|
||||
maneuverType = ManeuverType.TACK;
|
||||
if (legBeforeManeuver != null) {
|
||||
maneuverLoss = legBeforeManeuver.getManeuverLoss(timePointBeforeManeuver, maneuverTimePoint,
|
||||
timePointAfterManeuver);
|
||||
}
|
||||
} else if (jibed) {
|
||||
maneuverType = ManeuverType.JIBE;
|
||||
if (legBeforeManeuver != null) {
|
||||
maneuverLoss = legBeforeManeuver.getManeuverLoss(timePointBeforeManeuver, maneuverTimePoint,
|
||||
timePointAfterManeuver);
|
||||
}
|
||||
} else {
|
||||
// heading up or bearing away
|
||||
Bearing windBearing = wind.getBearing();
|
||||
Bearing toWindBeforeManeuver = windBearing
|
||||
.getDifferenceTo(speedWithBearingOnApproximationAtBeginning.getBearing());
|
||||
Bearing toWindAfterManeuver = windBearing.getDifferenceTo(speedWithBearingOnApproximationAtEnd
|
||||
.getBearing());
|
||||
maneuverType = Math.abs(toWindBeforeManeuver.getDegrees()) < Math.abs(toWindAfterManeuver
|
||||
.getDegrees()) ? ManeuverType.HEAD_UP : ManeuverType.BEAR_AWAY;
|
||||
}
|
||||
final Maneuver maneuver = new ManeuverImpl(maneuverType, tackAfterManeuver, maneuverPosition,
|
||||
maneuverTimePoint, speedWithBearingOnApproximationAtBeginning,
|
||||
speedWithBearingOnApproximationAtEnd, totalCourseChangeInDegrees, maneuverLoss);
|
||||
result.add(maneuver);
|
||||
}
|
||||
final Maneuver maneuver = new ManeuverImpl(maneuverType, tackAfterManeuver, maneuverPosition,
|
||||
maneuverTimePoint, speedWithBearingOnApproximationAtBeginning,
|
||||
speedWithBearingOnApproximationAtEnd, totalCourseChangeInDegrees, maneuverLoss);
|
||||
result.add(maneuver);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -2216,8 +2280,8 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
||||
* Computes the maneuver time point as the time point along between maneuver start and end where the competitor's
|
||||
* track has greatest change in course.
|
||||
*/
|
||||
private TimePoint computeManeuverTimepoint(Competitor competitor, MillisecondsTimePoint timePointBeforeManeuver,
|
||||
MillisecondsTimePoint timePointAfterManeuver) {
|
||||
private TimePoint computeManeuverTimepoint(Competitor competitor, TimePoint timePointBeforeManeuver,
|
||||
TimePoint timePointAfterManeuver) {
|
||||
TimePoint result = timePointBeforeManeuver;
|
||||
GPSFixTrack<Competitor, GPSFixMoving> track = getTrack(competitor);
|
||||
GPSFixMoving lastFix = null;
|
||||
|
||||
+1
-1
@@ -76,7 +76,7 @@ public class MasterDataResource extends AbstractSailingServerResource {
|
||||
|
||||
final TopLevelMasterData masterData = new TopLevelMasterData(groupsToExport,
|
||||
getService().getAllEvents(), getService().getPersistentRegattasForRaceIDs(), getService()
|
||||
.getAllMediaTracks(), exportWind);
|
||||
.getAllMediaTracks(), exportWind);
|
||||
|
||||
ResponseBuilder resp;
|
||||
if (compress) {
|
||||
|
||||
@@ -38,6 +38,19 @@
|
||||
<h2 class="articleSubheadline">May 2014</h2>
|
||||
|
||||
<ul class="bulletList">
|
||||
<li>Analysis of tacks and jibes around mark passings has now been improved. Before,
|
||||
a jibe followed by a tack that turns in the same direction (e.g., to port) so far
|
||||
was always called a penalty maneuver. Now, if a mark passing separates such a tack
|
||||
from such a jibe, no penalty is called anymore, and the two maneuvers are identified
|
||||
correctly.
|
||||
</li>
|
||||
<li>Another note on maneuver analysis: we received questions regarding the maneuvers
|
||||
involved in clearing an OCS. The SAP Sailing Analytics treat a clearing of
|
||||
an OCS, going back behind the start line and crossing it again, as if the competitor
|
||||
started again. In particular this means that all maneuvers prior to this new start
|
||||
do not count for the metrics; neither does the distance sailed between the first (OCS)
|
||||
start and the clear start.
|
||||
</li>
|
||||
<li>A hint regarding the "distance to start line" metrics: please keep in mind that currently this
|
||||
measurement is calculated as the distance of the GPS tracker from the line. Unless the tracker
|
||||
is mounted near the bow (or at the bow sprit, if any), the distance calculated this way will
|
||||
|
||||
Reference in new issue
Block a user