diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java index 3c2cb355a14..a7087bad7f0 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java @@ -685,7 +685,8 @@ public class RaceMap extends AbstractCompositeComponent impleme coordinateSystem.setCoordinateSystem(new RotateAndTranslateCoordinateSystem(centerOfCourse, lastCombinedTrueWindFromDirection.add(new DegreeBearingImpl(90)))); if (map != null) { - mapOptions = getMapOptions(settings.isShowMapControls(), /* wind-up */ true); + mapOptions = getMapOptions(settings.isShowMapControls(), /* wind-up */ true, + settings.isShowSatelliteLayer()); } else { mapOptions = null; } @@ -702,7 +703,8 @@ public class RaceMap extends AbstractCompositeComponent impleme } } else { if (map != null) { - mapOptions = getMapOptions(settings.isShowMapControls(), /* wind-up */ false); + mapOptions = getMapOptions(settings.isShowMapControls(), /* wind-up */ false, + settings.isShowSatelliteLayer()); } else { mapOptions = null; } @@ -747,7 +749,8 @@ public class RaceMap extends AbstractCompositeComponent impleme }); } - private void loadMapsAPIV3(final boolean showMapControls, final boolean showHeaderPanel) { + private void loadMapsAPIV3(final boolean showMapControls, final boolean showHeaderPanel, + final boolean showSatelliteLayer) { // load all the libs for use in the maps ArrayList loadLibraries = new ArrayList(); loadLibraries.add(LoadLibrary.DRAWING); @@ -756,7 +759,7 @@ public class RaceMap extends AbstractCompositeComponent impleme Runnable onLoad = new Runnable() { @Override public void run() { - MapOptions mapOptions = getMapOptions(showMapControls, /* wind up */ false); + MapOptions mapOptions = getMapOptions(showMapControls, /* wind up */ false, showSatelliteLayer); map = new MapWidget(mapOptions); rootPanel.add(map, 0, 0); if (showHeaderPanel) { @@ -2843,6 +2846,10 @@ public class RaceMap extends AbstractCompositeComponent impleme boolean requiresRedraw = false; boolean requiresUpdateCoordinateSystem = false; + if (newSettings.isShowSatelliteLayer() != settings.isShowSatelliteLayer()) { + requiresUpdateCoordinateSystem = true; + } + if (newSettings.isShowManeuverLossVisualization() != settings.isShowManeuverLossVisualization()) { showManeuverLossChanged = true; } @@ -3031,7 +3038,7 @@ public class RaceMap extends AbstractCompositeComponent impleme @Override public void initializeData(boolean showMapControls, boolean showHeaderPanel) { - loadMapsAPIV3(showMapControls, showHeaderPanel); + loadMapsAPIV3(showMapControls, showHeaderPanel, this.settings.isShowSatelliteLayer()); } @Override @@ -3212,40 +3219,42 @@ public class RaceMap extends AbstractCompositeComponent impleme return new BoatsBoundsCalculator().calculateNewBounds(RaceMap.this); } - private MapOptions getMapOptions(final boolean showMapControls, boolean windUp) { + private MapOptions getMapOptions(final boolean showMapControls, boolean windUp, boolean showSatelliteLayer) { MapOptions mapOptions = MapOptions.newInstance(); - mapOptions.setScrollWheel(true); - mapOptions.setMapTypeControl(false); - mapOptions.setPanControl(showMapControls); - mapOptions.setZoomControl(showMapControls); - mapOptions.setScaleControl(true); - if (windUp) { - mapOptions.setMinZoom(8); - } else { - mapOptions.setMinZoom(0); - } - MapTypeStyle[] mapTypeStyles = new MapTypeStyle[4]; - - // hide all transit lines including ferry lines - mapTypeStyles[0] = GoogleMapStyleHelper.createHiddenStyle(MapTypeStyleFeatureType.TRANSIT); - // hide points of interest - mapTypeStyles[1] = GoogleMapStyleHelper.createHiddenStyle(MapTypeStyleFeatureType.POI); - // simplify road display - mapTypeStyles[2] = GoogleMapStyleHelper.createSimplifiedStyle(MapTypeStyleFeatureType.ROAD); - // set water color - mapTypeStyles[3] = GoogleMapStyleHelper.createColorStyle(MapTypeStyleFeatureType.WATER, WATER_COLOR); + // Google Maps API does not support rotated satellite images + mapOptions.setMapTypeId(showSatelliteLayer && !windUp ? MapTypeId.SATELLITE : MapTypeId.ROADMAP); + mapOptions.setScrollWheel(true); + mapOptions.setMapTypeControl(false); + mapOptions.setPanControl(showMapControls); + mapOptions.setZoomControl(showMapControls); + mapOptions.setScaleControl(true); + if (windUp) { + mapOptions.setMinZoom(8); + } else { + mapOptions.setMinZoom(0); + } + MapTypeStyle[] mapTypeStyles = new MapTypeStyle[4]; - mapOptions.setMapTypeStyles(mapTypeStyles); - // no need to try to position the scale control; it always ends up at the right bottom corner - mapOptions.setStreetViewControl(false); - if (showMapControls) { - ZoomControlOptions zoomControlOptions = ZoomControlOptions.newInstance(); - zoomControlOptions.setPosition(ControlPosition.RIGHT_TOP); - mapOptions.setZoomControlOptions(zoomControlOptions); - PanControlOptions panControlOptions = PanControlOptions.newInstance(); - panControlOptions.setPosition(ControlPosition.RIGHT_TOP); - mapOptions.setPanControlOptions(panControlOptions); - } + // hide all transit lines including ferry lines + mapTypeStyles[0] = GoogleMapStyleHelper.createHiddenStyle(MapTypeStyleFeatureType.TRANSIT); + // hide points of interest + mapTypeStyles[1] = GoogleMapStyleHelper.createHiddenStyle(MapTypeStyleFeatureType.POI); + // simplify road display + mapTypeStyles[2] = GoogleMapStyleHelper.createSimplifiedStyle(MapTypeStyleFeatureType.ROAD); + // set water color + mapTypeStyles[3] = GoogleMapStyleHelper.createColorStyle(MapTypeStyleFeatureType.WATER, WATER_COLOR); + + mapOptions.setMapTypeStyles(mapTypeStyles); + // no need to try to position the scale control; it always ends up at the right bottom corner + mapOptions.setStreetViewControl(false); + if (showMapControls) { + ZoomControlOptions zoomControlOptions = ZoomControlOptions.newInstance(); + zoomControlOptions.setPosition(ControlPosition.RIGHT_TOP); + mapOptions.setZoomControlOptions(zoomControlOptions); + PanControlOptions panControlOptions = PanControlOptions.newInstance(); + panControlOptions.setPosition(ControlPosition.RIGHT_TOP); + mapOptions.setPanControlOptions(panControlOptions); + } return mapOptions; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapSettingsDialogComponent.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapSettingsDialogComponent.java index 6c51abf7805..a76989037df 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapSettingsDialogComponent.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapSettingsDialogComponent.java @@ -81,6 +81,7 @@ public class RaceMapSettingsDialogComponent implements SettingsDialogComponent