move course area circles to simulator map;

This commit is contained in:
Christopher Ronnewinkel (D036654) committed 2013-11-06 17:28:36 +01:00
1 parent 7e8306b98f
commit 06e9ae5c42
3 files changed
+127 -110

No files matched your search

@@ -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()));
}
/**
@@ -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;
}
}
@@ -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());
}
}