mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-05 20:03:52 +00:00
boats now zoom when map is zoomed, also when paused
This commit is contained in:
1 parent
b630be9418
commit
1f799dd70e
1 file changed
+46
-27
+46
-27
@@ -203,6 +203,16 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener,
|
|||||||
@Override
|
@Override
|
||||||
public void onZoomEnd(MapZoomEndEvent event) {
|
public void onZoomEnd(MapZoomEndEvent event) {
|
||||||
mapZoomedOrPannedSinceLastRaceSelectionChange = true;
|
mapZoomedOrPannedSinceLastRaceSelectionChange = true;
|
||||||
|
Set<CompetitorDAO> competitorDAOsOfUnusedMarkers = new HashSet<CompetitorDAO>(boatMarkers.keySet());
|
||||||
|
for (CompetitorDAO competitorDAO : getCompetitorsToShow()) {
|
||||||
|
boolean usedExistingMarker = updateMarkerForCompetitor(competitorDAO);
|
||||||
|
if (usedExistingMarker) {
|
||||||
|
competitorDAOsOfUnusedMarkers.remove(competitorDAO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (CompetitorDAO unusedMarkerCompetitorDAO : competitorDAOsOfUnusedMarkers) {
|
||||||
|
map.removeOverlay(boatMarkers.remove(unusedMarkerCompetitorDAO));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
map.addMapDragEndHandler(new MapDragEndHandler() {
|
map.addMapDragEndHandler(new MapDragEndHandler() {
|
||||||
@@ -498,33 +508,9 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener,
|
|||||||
newMapBounds.extend(bounds.getNorthEast());
|
newMapBounds.extend(bounds.getNorthEast());
|
||||||
newMapBounds.extend(bounds.getSouthWest());
|
newMapBounds.extend(bounds.getSouthWest());
|
||||||
}
|
}
|
||||||
if (lastShownFix.containsKey(competitorDAO) && lastShownFix.get(competitorDAO) != -1) {
|
boolean usedExistingMarker = updateMarkerForCompetitor(competitorDAO);
|
||||||
GPSFixDAO lastPos = getBoatFix(competitorDAO);
|
if (usedExistingMarker) {
|
||||||
Marker boatMarker = boatMarkers.get(competitorDAO);
|
competitorDAOsOfUnusedMarkers.remove(competitorDAO);
|
||||||
if (boatMarker == null) {
|
|
||||||
boatMarker = createBoatMarker(competitorDAO, false);
|
|
||||||
map.addOverlay(boatMarker);
|
|
||||||
boatMarkers.put(competitorDAO, boatMarker);
|
|
||||||
} else {
|
|
||||||
competitorDAOsOfUnusedMarkers.remove(competitorDAO);
|
|
||||||
// check if anchors match; re-use marker with setImage only if anchors match
|
|
||||||
Point newAnchor = imageResources.getBoatImageTransformator(lastPos,
|
|
||||||
selectedMapCompetitors.contains(competitorDAO)).getAnchor();
|
|
||||||
Point oldAnchor = boatMarker.getIcon().getIconAnchor();
|
|
||||||
if (oldAnchor.getX() == newAnchor.getX() && oldAnchor.getY() == newAnchor.getY()) {
|
|
||||||
boatMarker.setLatLng(LatLng.newInstance(lastPos.position.latDeg,
|
|
||||||
lastPos.position.lngDeg));
|
|
||||||
boatMarker.setImage(imageResources.getBoatImageURL(lastPos,
|
|
||||||
selectedMapCompetitors.contains(competitorDAO)));
|
|
||||||
} else {
|
|
||||||
// anchors don't match; replace marker
|
|
||||||
map.removeOverlay(boatMarker);
|
|
||||||
boatMarker = createBoatMarker(competitorDAO,
|
|
||||||
selectedMapCompetitors.contains(competitorDAO));
|
|
||||||
map.addOverlay(boatMarker);
|
|
||||||
boatMarkers.put(competitorDAO, boatMarker);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -541,6 +527,39 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean updateMarkerForCompetitor(CompetitorDAO competitorDAO) {
|
||||||
|
boolean usedExistingMarker = false;
|
||||||
|
if (lastShownFix.containsKey(competitorDAO) && lastShownFix.get(competitorDAO) != -1) {
|
||||||
|
GPSFixDAO lastPos = getBoatFix(competitorDAO);
|
||||||
|
Marker boatMarker = boatMarkers.get(competitorDAO);
|
||||||
|
if (boatMarker == null) {
|
||||||
|
boatMarker = createBoatMarker(competitorDAO, false);
|
||||||
|
map.addOverlay(boatMarker);
|
||||||
|
boatMarkers.put(competitorDAO, boatMarker);
|
||||||
|
} else {
|
||||||
|
usedExistingMarker = true;
|
||||||
|
// check if anchors match; re-use marker with setImage only if anchors match
|
||||||
|
Point newAnchor = imageResources.getBoatImageTransformator(lastPos,
|
||||||
|
selectedMapCompetitors.contains(competitorDAO)).getAnchor();
|
||||||
|
Point oldAnchor = boatMarker.getIcon().getIconAnchor();
|
||||||
|
if (oldAnchor.getX() == newAnchor.getX() && oldAnchor.getY() == newAnchor.getY()) {
|
||||||
|
boatMarker.setLatLng(LatLng.newInstance(lastPos.position.latDeg,
|
||||||
|
lastPos.position.lngDeg));
|
||||||
|
boatMarker.setImage(imageResources.getBoatImageURL(lastPos,
|
||||||
|
selectedMapCompetitors.contains(competitorDAO)));
|
||||||
|
} else {
|
||||||
|
// anchors don't match; replace marker
|
||||||
|
map.removeOverlay(boatMarker);
|
||||||
|
boatMarker = createBoatMarker(competitorDAO,
|
||||||
|
selectedMapCompetitors.contains(competitorDAO));
|
||||||
|
map.addOverlay(boatMarker);
|
||||||
|
boatMarkers.put(competitorDAO, boatMarker);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return usedExistingMarker;
|
||||||
|
}
|
||||||
|
|
||||||
protected Marker createBuoyMarker(final MarkDAO markDAO) {
|
protected Marker createBuoyMarker(final MarkDAO markDAO) {
|
||||||
MarkerOptions options = MarkerOptions.newInstance();
|
MarkerOptions options = MarkerOptions.newInstance();
|
||||||
|
|||||||
Reference in new issue
Block a user