mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-13 15:50:59 +00:00
move course area circles to simulator map;
This commit is contained in:
1 parent
7e8306b98f
commit
06e9ae5c42
3 files changed
+127
-110
No files matched your search
+16
-6
@@ -9,10 +9,14 @@ import com.google.gwt.maps.client.base.Point;
|
||||
import com.google.gwt.maps.client.events.click.ClickMapEvent;
|
||||
import com.google.gwt.maps.client.events.click.ClickMapHandler;
|
||||
import com.google.gwt.maps.client.mvc.MVCArray;
|
||||
import com.google.gwt.maps.client.overlays.MapCanvasProjection;
|
||||
import com.google.gwt.maps.client.overlays.Marker;
|
||||
import com.google.gwt.maps.client.overlays.MarkerOptions;
|
||||
import com.google.gwt.maps.client.overlays.OverlayView;
|
||||
import com.google.gwt.maps.client.overlays.Polyline;
|
||||
import com.google.gwt.maps.client.overlays.PolylineOptions;
|
||||
import com.google.gwt.maps.client.overlays.overlayhandlers.OverlayViewMethods;
|
||||
import com.google.gwt.maps.client.overlays.overlayhandlers.OverlayViewOnDrawHandler;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.sap.sailing.domain.common.Bearing;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
@@ -66,6 +70,8 @@ public class PathPolyline {
|
||||
private List<SimulatorWindDTO> allPoints = null;
|
||||
private SimulatorServiceAsync simulatorService = null;
|
||||
private MapWidget map = null;
|
||||
protected OverlayView mapView;
|
||||
protected MapCanvasProjection mapProjection;
|
||||
private ErrorReporter errorReporter = null;
|
||||
private boolean warningAlreadyShown = false;
|
||||
private SimulatorMap simulatorMap = null;
|
||||
@@ -114,6 +120,12 @@ public class PathPolyline {
|
||||
this.allPoints = pathPoints;
|
||||
this.simulatorService = simulatorService;
|
||||
this.map = map;
|
||||
this.mapView = OverlayView.newInstance(map, new OverlayViewOnDrawHandler() {
|
||||
@Override
|
||||
public void onDraw(OverlayViewMethods methods) {
|
||||
mapProjection = methods.getProjection();
|
||||
}
|
||||
}, null, null);
|
||||
this.selectedBoatClassIndex = selection.boatClassIndex;
|
||||
this.selectedRaceIndex = selection.raceIndex;
|
||||
this.selectedCompetitorIndex = selection.competitorIndex;
|
||||
@@ -234,7 +246,7 @@ public class PathPolyline {
|
||||
simulatorMap.setPolyline(polyline);
|
||||
polyline.setEditable(true);
|
||||
// old call: polyline.setEditingEnabled(PolyEditingOptions.newInstance(turnPoints.length - 1));
|
||||
|
||||
|
||||
getTotalTime();
|
||||
}
|
||||
|
||||
@@ -1037,7 +1049,7 @@ public class PathPolyline {
|
||||
|
||||
/**
|
||||
* Converts a LatLng object to a TwoD object. Considering that a LatLng represent a point on a sphere, and that the
|
||||
* TwoDPoint represent one on a plane, it will use the MapWidget aproximation to a container pixel in order to do
|
||||
* TwoDPoint represent one on a plane, it will use the MapWidget approximation to a container pixel in order to do
|
||||
* so.
|
||||
*
|
||||
* @param latLng
|
||||
@@ -1045,8 +1057,7 @@ public class PathPolyline {
|
||||
* @returns a TwoDPoint object.
|
||||
*/
|
||||
private TwoDPoint toTwoDPoint(LatLng latLng) {
|
||||
// TODO MigrationV3: Point point = map.convertLatLngToContainerPixel(latLng);
|
||||
Point point = Point.newInstance(latLng.getLatitude(), latLng.getLongitude());
|
||||
Point point = this.mapProjection.fromLatLngToContainerPixel(latLng);
|
||||
return new TwoDPoint(point.getX(), point.getY());
|
||||
}
|
||||
|
||||
@@ -1065,8 +1076,7 @@ public class PathPolyline {
|
||||
* @returns a LatLng object.
|
||||
*/
|
||||
private LatLng toLatLng(TwoDPoint point) {
|
||||
return LatLng.newInstance((int) point.getX(), (int) point.getY());
|
||||
// TODO MigrationV3: return this.map.convertContainerPixelToLatLng(Point.newInstance((int) point.getX(), (int) point.getY()));
|
||||
return this.mapProjection.fromContainerPixelToLatLng(Point.newInstance((int) point.getX(), (int) point.getY()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+14
-102
@@ -5,12 +5,6 @@ import com.google.gwt.canvas.dom.client.Context2d.TextAlign;
|
||||
import com.google.gwt.maps.client.MapWidget;
|
||||
import com.google.gwt.maps.client.base.LatLng;
|
||||
import com.google.gwt.maps.client.base.Point;
|
||||
import com.google.gwt.maps.client.events.click.ClickMapEvent;
|
||||
import com.google.gwt.maps.client.events.click.ClickMapHandler;
|
||||
import com.google.gwt.maps.client.events.idle.IdleMapEvent;
|
||||
import com.google.gwt.maps.client.events.idle.IdleMapHandler;
|
||||
import com.google.gwt.maps.client.overlays.Circle;
|
||||
import com.google.gwt.maps.client.overlays.CircleOptions;
|
||||
import com.sap.sailing.gwt.ui.simulator.racemap.FullCanvasOverlay;
|
||||
import com.sap.sailing.simulator.util.SailingSimulatorConstants;
|
||||
|
||||
@@ -22,7 +16,6 @@ public class RegattaAreaCanvasOverlay extends FullCanvasOverlay {
|
||||
private CourseAreaDescriptor currentCourseArea = null;
|
||||
|
||||
private boolean initial;
|
||||
private boolean mapPan = false;
|
||||
private double raceBearing = 0.0;
|
||||
private double diffBearing = 0.0;
|
||||
|
||||
@@ -32,58 +25,7 @@ public class RegattaAreaCanvasOverlay extends FullCanvasOverlay {
|
||||
|
||||
this.simulatorMap = simulatorMap;
|
||||
this.venue = VenueDescriptorFactory.createVenue(event);
|
||||
this.currentCourseArea = this.venue.getDefaultCourseArea();
|
||||
|
||||
/*getMap().addZoomChangeHandler(new ZoomChangeMapHandler() {
|
||||
|
||||
@Override
|
||||
public void onEvent(ZoomChangeMapEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
simulatorMap.windRoseCanvasOverlay.removeFromMap();
|
||||
simulatorMap.windNeedleCanvasOverlay.removeFromMap();
|
||||
mapPan = true;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
getMap().addDragStartHandler(new DragStartMapHandler() {
|
||||
|
||||
@Override
|
||||
public void onEvent(DragStartMapEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
simulatorMap.windRoseCanvasOverlay.removeFromMap();
|
||||
simulatorMap.windNeedleCanvasOverlay.removeFromMap();
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
getMap().addDragEndHandler(new DragEndMapHandler() {
|
||||
|
||||
@Override
|
||||
public void onEvent(DragEndMapEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
simulatorMap.windRoseCanvasOverlay.addToMap();
|
||||
simulatorMap.windNeedleCanvasOverlay.addToMap();
|
||||
}
|
||||
|
||||
|
||||
});*/
|
||||
|
||||
getMap().addIdleHandler(new IdleMapHandler() {
|
||||
|
||||
@Override
|
||||
public void onEvent(IdleMapEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
if (mapPan) {
|
||||
//System.out.println("Map Idle Event Handler.");
|
||||
simulatorMap.getWindRoseCanvasOverlay().addToMap();
|
||||
simulatorMap.getWindNeedleCanvasOverlay().addToMap();
|
||||
mapPan = false;
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
this.currentCourseArea = this.venue.getDefaultCourseArea();
|
||||
|
||||
}
|
||||
|
||||
@@ -93,7 +35,7 @@ public class RegattaAreaCanvasOverlay extends FullCanvasOverlay {
|
||||
|
||||
int counter = 0;
|
||||
for (CourseAreaDescriptor courseArea : venue.getCourseAreas()) {
|
||||
drawCircleFromRadius(counter++, courseArea);
|
||||
simulatorMap.drawCircleFromRadius(counter++, courseArea);
|
||||
}
|
||||
|
||||
map.panTo(venue.getCenterPos());
|
||||
@@ -142,48 +84,6 @@ public class RegattaAreaCanvasOverlay extends FullCanvasOverlay {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO MigrationV3: This is not the right place to create Circles being not drawn to the canvas -> move to SimulatorMap
|
||||
public void drawCircleFromRadius(int regIdx, CourseAreaDescriptor courseArea) {
|
||||
|
||||
CircleOptions circleOptions = CircleOptions.newInstance();
|
||||
circleOptions.setStrokeColor("white");
|
||||
circleOptions.setStrokeWeight(1);
|
||||
circleOptions.setStrokeOpacity(0.0);
|
||||
circleOptions.setFillColor("green");
|
||||
circleOptions.setFillOpacity(0.0);
|
||||
circleOptions.setCenter(courseArea.getCenterPos());
|
||||
Circle circle = Circle.newInstance(circleOptions);
|
||||
circle.setRadius(courseArea.getRadiusInMeters());
|
||||
|
||||
final int regIdxFinal = regIdx;
|
||||
|
||||
circle.addClickHandler(new ClickMapHandler() {
|
||||
public void onEvent(ClickMapEvent e) {
|
||||
//System.out.println("Click: "+currentCourseArea.getName());
|
||||
CourseAreaDescriptor newRegArea = venue.getCourseAreas().get(regIdxFinal);
|
||||
|
||||
if (newRegArea != currentCourseArea) {
|
||||
currentCourseArea = newRegArea;
|
||||
simulatorMap.clearOverlays();
|
||||
simulatorMap.getWindRoseCanvasOverlay().removeFromMap();
|
||||
simulatorMap.getWindNeedleCanvasOverlay().removeFromMap();
|
||||
updateRaceCourse(0, 0);
|
||||
raceCourseCanvasOverlay.draw();
|
||||
}
|
||||
|
||||
map.panTo(currentCourseArea.getCenterPos());
|
||||
mapPan = true;
|
||||
if (map.getZoom() < 14) {
|
||||
map.setZoom(14);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
circle.setMap(getMap());
|
||||
|
||||
}
|
||||
|
||||
protected void updateRaceCourse(int type, double bearing) {
|
||||
|
||||
if (type == 1) {
|
||||
@@ -209,6 +109,14 @@ public class RegattaAreaCanvasOverlay extends FullCanvasOverlay {
|
||||
}
|
||||
}
|
||||
|
||||
public CourseAreaDescriptor getCurrentCourseArea() {
|
||||
return this.currentCourseArea;
|
||||
}
|
||||
|
||||
public void setCurrentCourseArea(CourseAreaDescriptor courseArea) {
|
||||
this.currentCourseArea = courseArea;
|
||||
}
|
||||
|
||||
protected void drawCourseArea(String name, Context2d context2d, Point centerPoint, Point borderPoint,
|
||||
String color, String colorText, double pxStroke) {
|
||||
|
||||
@@ -282,4 +190,8 @@ public class RegattaAreaCanvasOverlay extends FullCanvasOverlay {
|
||||
this.raceCourseCanvasOverlay = rcCanvas;
|
||||
}
|
||||
|
||||
public VenueDescriptor getVenue() {
|
||||
return this.venue;
|
||||
}
|
||||
|
||||
}
|
||||
+97
-2
@@ -19,7 +19,13 @@ import com.google.gwt.maps.client.controls.MapTypeStyle;
|
||||
import com.google.gwt.maps.client.controls.PanControlOptions;
|
||||
import com.google.gwt.maps.client.controls.ScaleControlOptions;
|
||||
import com.google.gwt.maps.client.controls.ZoomControlOptions;
|
||||
import com.google.gwt.maps.client.events.click.ClickMapEvent;
|
||||
import com.google.gwt.maps.client.events.click.ClickMapHandler;
|
||||
import com.google.gwt.maps.client.events.idle.IdleMapEvent;
|
||||
import com.google.gwt.maps.client.events.idle.IdleMapHandler;
|
||||
import com.google.gwt.maps.client.maptypes.MapTypeStyleFeatureType;
|
||||
import com.google.gwt.maps.client.overlays.Circle;
|
||||
import com.google.gwt.maps.client.overlays.CircleOptions;
|
||||
import com.google.gwt.maps.client.overlays.Polyline;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
@@ -58,6 +64,7 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
private static SimulatorResources resources = GWT.create(SimulatorResources.class);
|
||||
|
||||
private MapWidget map;
|
||||
private boolean mapPan = false;
|
||||
private boolean dataInitialized;
|
||||
private boolean overlaysInitialized;
|
||||
private WindFieldGenParamsDTO windParams;
|
||||
@@ -376,7 +383,56 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
|
||||
add(map, 0, 0);
|
||||
map.setSize("100%", "100%");
|
||||
|
||||
|
||||
/*map.addZoomChangeHandler(new ZoomChangeMapHandler() {
|
||||
|
||||
@Override
|
||||
public void onEvent(ZoomChangeMapEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
windRoseCanvasOverlay.removeFromMap();
|
||||
windNeedleCanvasOverlay.removeFromMap();
|
||||
mapPan = true;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
map.addDragStartHandler(new DragStartMapHandler() {
|
||||
|
||||
@Override
|
||||
public void onEvent(DragStartMapEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
windRoseCanvasOverlay.removeFromMap();
|
||||
windNeedleCanvasOverlay.removeFromMap();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
map.addDragEndHandler(new DragEndMapHandler() {
|
||||
|
||||
@Override
|
||||
public void onEvent(DragEndMapEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
windRoseCanvasOverlay.addToMap();
|
||||
windNeedleCanvasOverlay.addToMap();
|
||||
}
|
||||
|
||||
});*/
|
||||
|
||||
map.addIdleHandler(new IdleMapHandler() {
|
||||
|
||||
@Override
|
||||
public void onEvent(IdleMapEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
if (mapPan) {
|
||||
//System.out.println("Map Idle Event Handler.");
|
||||
getWindRoseCanvasOverlay().addToMap();
|
||||
getWindNeedleCanvasOverlay().addToMap();
|
||||
mapPan = false;
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
initializeOverlays();
|
||||
|
||||
dataInitialized = true;
|
||||
@@ -889,5 +945,44 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
public RaceCourseCanvasOverlay getRaceCourseCanvasOverlay() {
|
||||
return raceCourseCanvasOverlay;
|
||||
}
|
||||
|
||||
|
||||
public void drawCircleFromRadius(int regIdx, CourseAreaDescriptor courseArea) {
|
||||
|
||||
CircleOptions circleOptions = CircleOptions.newInstance();
|
||||
circleOptions.setStrokeColor("white");
|
||||
circleOptions.setStrokeWeight(1);
|
||||
circleOptions.setStrokeOpacity(0.0);
|
||||
circleOptions.setFillColor("green");
|
||||
circleOptions.setFillOpacity(0.0);
|
||||
circleOptions.setCenter(courseArea.getCenterPos());
|
||||
Circle circle = Circle.newInstance(circleOptions);
|
||||
circle.setRadius(courseArea.getRadiusInMeters());
|
||||
|
||||
final int regIdxFinal = regIdx;
|
||||
|
||||
circle.addClickHandler(new ClickMapHandler() {
|
||||
public void onEvent(ClickMapEvent e) {
|
||||
//System.out.println("Click: "+currentCourseArea.getName());
|
||||
CourseAreaDescriptor newRegArea = regattaAreaCanvasOverlay.getVenue().getCourseAreas().get(regIdxFinal);
|
||||
|
||||
if (newRegArea != regattaAreaCanvasOverlay.getCurrentCourseArea()) {
|
||||
regattaAreaCanvasOverlay.setCurrentCourseArea(newRegArea);
|
||||
clearOverlays();
|
||||
getWindRoseCanvasOverlay().removeFromMap();
|
||||
getWindNeedleCanvasOverlay().removeFromMap();
|
||||
regattaAreaCanvasOverlay.updateRaceCourse(0, 0);
|
||||
raceCourseCanvasOverlay.draw();
|
||||
}
|
||||
|
||||
map.panTo(regattaAreaCanvasOverlay.getCurrentCourseArea().getCenterPos());
|
||||
mapPan = true;
|
||||
if (map.getZoom() < 14) {
|
||||
map.setZoom(14);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
circle.setMap(getMap());
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user