+ protected void mapClick(MapClickEvent event) {
+ latitude.setText("" + event.getLatLng().getLatitude());
+ longitude.setText("" + event.getLatLng().getLongitude());
+ setMapMarker(event.getLatLng().getLatitude(), event.getLatLng().getLongitude(), false);
+ changeListener.onChange(latitude);
+ changeListener.onChange(longitude);
+ }
+
+ protected void mapMarkerMoved() {
+ latitude.setText("" + mapMarker.getLatLng().getLatitude());
+ longitude.setText("" + mapMarker.getLatLng().getLongitude());
+ changeListener.onChange(latitude);
+ changeListener.onChange(longitude);
+ }
+
+ protected void setMapMarker(double lat, double lon, boolean zoomAndCenter) {
+ if (mapMarker != null) {
+ map.removeOverlay(mapMarker);
+ }
+ LatLng ll = LatLng.newInstance(lat, lon);
+ if (zoomAndCenter) {
+ map.setCenter(ll);
+ map.setZoomLevel(12);
+ }
+ if (mapMarker != null) {
+ mapMarker.setLatLng(ll);
+ } else {
+ MarkerOptions opt = MarkerOptions.newInstance();
+ opt.setDraggable(true);
+ mapMarker = new Marker(ll, opt);
+ mapMarker.addMarkerDragEndHandler(new MarkerDragEndHandler() {
+ public void onDragEnd(MarkerDragEndEvent event) {
+ mapMarkerMoved();
+ }
+ });
+ }
+ map.addOverlay(mapMarker);
+ }
+