Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   *
   * ==============================================================================
   * Licensed under the Apache License, Version 2.0 (the "License"); you may not
   * use this file except in compliance with the License. You may obtain a copy of
   * the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  * License for the specific language governing permissions and limitations under
  * the License.
  */
 package wicket.contrib.gmap;
 
 import java.util.List;
 import java.util.Set;
 
 
Wicket component to embed Google Maps into your pages.

The Google Maps API requires an API key to use it. You will need to generate one for each deployment context you have. See the Google Maps API sign up page for more information.

 
 public class GMap2 extends Panel implements GOverlayContainer
 {
log.
 
 	private static final Logger log = LoggerFactory.getLogger(GMap2.class);
 
 	private static final long serialVersionUID = 1L;
 
 	private GLatLng center = new GLatLng(37.4419, -122.1419);
 
 	private boolean googleBarEnabled = false;
 
 	private boolean draggingEnabled = true;
 
 	private boolean doubleClickZoomEnabled = false;
 
 	private boolean scrollWheelZoomEnabled = false;
 
 
 	private int zoom = 13;
 
 	private final Set<GControlcontrols = new HashSet<GControl>();
 
 	private final List<GOverlayoverlays = new ArrayList<GOverlay>();
 
 	private final WebMarkupContainer map;
 
 	private final GInfoWindow infoWindow;
 
 	private GLatLngBounds bounds;
 
 	private final OverlayListener overlayListener;

Construct.

Parameters:
id
gMapKey Google gmap API KEY
 
 	public GMap2(final String idfinal String gMapKey)
 	{
 		this(idnew GMapHeaderContributor(gMapKey), new ArrayList<GOverlay>());
 	}

Construct.

Deprecated:
The usage is discouraged. Use this(String, String) instead and add the overlays later on.
Parameters:
id
gMapKey Google gmap API KEY
overlays
	public GMap2(final String idfinal String gMapKeyList<GOverlayoverlays)
	{
		this(idnew GMapHeaderContributor(gMapKey), overlays);
	}

Construct.

Parameters:
id
headerContrib
	public GMap2(final String idfinal GMapHeaderContributor headerContrib)
	{
		super(id);
		add(headerContrib);
		 = new WebMarkupContainer("map");
	}

Construct.

Deprecated:
The usage is discouraged. Use this(String, String) instead and add the overlays later on.
Parameters:
id
headerContrib
overlays
	public GMap2(final String idfinal GMapHeaderContributor headerContribList<GOverlayoverlays)
	{
		this(idheaderContrib);
		for (GOverlay overlay : overlays)
		{
			addOverlay(overlay);
		}
	}


	public void renderHead(IHeaderResponse response)
	{
	}


	protected void onBeforeRender()
	{
		RuntimeConfigurationType configurationType = Application.get().getConfigurationType();
		if (configurationType.equals(.) &&
		{
			.warn("Application is in DEVELOPMENT mode && Wicket tags are not stripped,"
" Firefox 3.0 will not render the GMap."
" Change to DEPLOYMENT mode  || turn on Wicket tags stripping." + " See:"
" http://www.nabble.com/Gmap2-problem-with-Firefox-3.0-to18137475.html.");
		}
	}


Add a control.

Parameters:
control control to add
Returns:
This
	public GMap2 addControl(GControl control)
	{
		.add(control);
		if (AjaxRequestTarget.get() != null && findPage() != null)
		{
			AjaxRequestTarget.get().appendJavaScript(control.getJSadd(GMap2.this));
		}
		return this;
	}

Remove a control.

Parameters:
control control to remove
Returns:
This
	public GMap2 removeControl(GControl control)
	{
		.remove(control);
		if (AjaxRequestTarget.get() != null && findPage() != null)
		{
			AjaxRequestTarget.get().appendJavaScript(control.getJSremove(GMap2.this));
		}
		return this;
	}

Add an overlay.

Parameters:
overlay overlay to add
Returns:
This
	public GMap2 addOverlay(GOverlay overlay)
	{
		.add(overlay);
		overlay.setParent(this);
		if (AjaxRequestTarget.get() != null && findPage() != null)
		{
			AjaxRequestTarget.get().appendJavaScript(overlay.getJSadd());
		}
		return this;
	}

Remove an overlay.

Parameters:
overlay overlay to remove
Returns:
This
	public GMap2 removeOverlay(GOverlay overlay)
	{
		while (.contains(overlay))
		{
			.remove(overlay);
		}
		if (AjaxRequestTarget.get() != null && findPage() != null)
		{
			AjaxRequestTarget.get().appendJavaScript(overlay.getJSremove());
		}
		overlay.setParent(null);
		return this;
	}

Clear all overlays.

Returns:
This
	{
		for (GOverlay overlay : )
		{
			overlay.setParent(null);
		}
		if (AjaxRequestTarget.get() != null && findPage() != null)
		{
			AjaxRequestTarget.get().appendJavaScript(getJSinvoke("clearOverlays()"));
		}
		return this;
	}
	{
		return Collections.unmodifiableList();
	}
	{
		return Collections.unmodifiableSet();
	}
	public GLatLng getCenter()
	{
		return ;
	}
	{
		return ;
	}
	public void enableGoogleBar(boolean enabled)
	{
		if ( != enabled)
		{
			 = enabled;
			if (AjaxRequestTarget.get() != null && findPage() != null)
			{
				AjaxRequestTarget.get().appendJavaScript(getJSsetGoogleBarEnabled(enabled));
			}
		}
	}
	public void setDraggingEnabled(boolean enabled)
	{
		if ( != enabled)
		{
			 = enabled;
			if (AjaxRequestTarget.get() != null && findPage() != null)
			{
				AjaxRequestTarget.get().appendJavaScript(getJSsetDraggingEnabled(enabled));
			}
		}
	}
	public boolean isDraggingEnabled()
	{
	}
	public void setDoubleClickZoomEnabled(boolean enabled)
	{
		if ( != enabled)
		{
			if (AjaxRequestTarget.get() != null && findPage() != null)
			{
			}
		}
	}
	public boolean isDoubleClickZoomEnabled()
	{
	}
	public void setScrollWheelZoomEnabled(boolean enabled)
	{
		if ( != enabled)
		{
			if (AjaxRequestTarget.get() != null && findPage() != null)
			{
			}
		}
	}
	public boolean isScrollWheelZoomEnabled()
	{
	}
	{
		return ;
	}
	public void setMapType(GMapType mapType)
	{
		if (this. != mapType)
		{
			this. = mapType;
			if (AjaxRequestTarget.get() != null && findPage() != null)
			{
				AjaxRequestTarget.get().appendJavaScript(mapType.getJSsetMapType(GMap2.this));
			}
		}
	}
	public int getZoom()
	{
		return ;
	}
	public void setZoom(int level)
	{
		if ( != level)
		{
			 = level;
			if (AjaxRequestTarget.get() != null && findPage() != null)
			{
				AjaxRequestTarget.get().appendJavaScript(getJSsetZoom());
			}
		}
	}

Set the center.

Parameters:
center center to set
	public void setCenter(GLatLng center)
	{
		if (!this..equals(center))
		{
			this. = center;
			if (AjaxRequestTarget.get() != null && findPage() != null)
			{
				AjaxRequestTarget.get().appendJavaScript(getJSsetCenter(center));
			}
		}
	}

Changes the center point of the map to the given point. If the point is already visible in the current map view, change the center in a smooth animation.

Parameters:
center the new center of the map
	public void panTo(GLatLng center)
	{
		if (!this..equals(center))
		{
			this. = center;
			if (AjaxRequestTarget.get() != null && findPage() != null)
			{
				AjaxRequestTarget.get().appendJavaScript(getJSpanTo(center));
			}
		}
	}
	{
		return ;
	}

Generates the JavaScript used to instantiate this GMap2 as an JavaScript class on the client side.

Returns:
The generated JavaScript
	private String getJSinit()
	{
		StringBuffer js = new StringBuffer("new WicketMap2('" + .getMarkupId() + "');\n");
		// Add the controls.
		for (GControl control : )
		{
			js.append(control.getJSadd(this));
		}
		// Add the overlays.
		for (GOverlay overlay : )
		{
			js.append(overlay.getJSadd());
		}
		for (Object behavior : getBehaviors(GEventListenerBehavior.class))
		{
		}
		return js.toString();
	}

Convenience method for generating a JavaScript call on this GMap2 with the given invocation.

Parameters:
invocation The JavaScript call to invoke on this GMap2.
Returns:
The generated JavaScript.
	// TODO Could this become default or protected?
	public String getJSinvoke(String invocation)
	{
		return "Wicket.maps['" + .getMarkupId() + "']." + invocation + ";\n";
	}

	public void fitMarkers(final List<GLatLngmarkersToShow)
	{
		fitMarkers(markersToShowfalse, 0.0);
	}

	public void fitMarkers(final List<GLatLngmarkersToShowboolean showMarkersForPoints)
	{
		fitMarkers(markersToShowshowMarkersForPoints, 0.0);
	}

Makes the map zoom out and centre around all the GLatLng points in markersToShow.

Big ups to Doug Leeper for the code.

Parameters:
markersToShow the points to centre around.
showMarkersForPoints if true, will also add basic markers to the map for each point focused on. Just a simple convenience method - you will probably want to turn this off so that you can show more information with each marker when clicked etc.
See also:
Doug's Nabble post
	public void fitMarkers(final List<GLatLngmarkersToShowboolean showMarkersForPoints,
		final double zoomAdjustment)
	{
		if (markersToShow.isEmpty())
		{
			.warn("Empty list provided to GMap2.fitMarkers method.");
			return;
		}
		this.add(new Behavior()
		{
			private static final long serialVersionUID = 1L;
			public void renderHead(Component componentIHeaderResponse response)
			{
				StringBuffer buf = new StringBuffer();
				buf.append("var bounds = new GLatLngBounds();\n");
				buf.append("var map = " + GMap2.this.getJSinvoke("map"));
				// Ask google maps to keep extending the bounds to include each
				// point
				for (GLatLng point : markersToShow)
				{
					buf.append("bounds.extend( " + point.getJSconstructor() + " );\n");
				}
				// set the zoom level that shows the bounds
				buf.append("map.setZoom( map.getBoundsZoomLevel(bounds) + " + zoomAdjustment +
					");\n");
				// center in the middle of the bounds
				buf.append("map.setCenter( bounds.getCenter() );\n");
			}
		});
		// show the markers
		if (showMarkersForPoints)
		{
			for (GLatLng location : markersToShow)
			{
				addOverlay(new GMarker(location));
			}
		}
	}
	private String getJSsetGoogleBarEnabled(boolean enabled)
	{
		return getJSinvoke("setGoogleBarEnabled(" + enabled + ")");
	}
	private String getJSsetDraggingEnabled(boolean enabled)
	{
		return getJSinvoke("setDraggingEnabled(" + enabled + ")");
	}
	private String getJSsetDoubleClickZoomEnabled(boolean enabled)
	{
		return getJSinvoke("setDoubleClickZoomEnabled(" + enabled + ")");
	}
	private String getJSsetScrollWheelZoomEnabled(boolean enabled)
	{
		return getJSinvoke("setScrollWheelZoomEnabled(" + enabled + ")");
	}
	private String getJSsetZoom(int zoom)
	{
		return getJSinvoke("setZoom(" + zoom + ")");
	}
	private String getJSsetCenter(GLatLng center)
	{
		if (center != null)
			return getJSinvoke("setCenter(" + center.getJSconstructor() + ")");
		else
			return "";
	}
	private String getJSpanDirection(int dxint dy)
	{
		return getJSinvoke("panDirection(" + dx + "," + dy + ")");
	}
	private String getJSpanTo(GLatLng center)
	{
		return getJSinvoke("panTo(" + center.getJSconstructor() + ")");
	}
	private String getJSzoomOut()
	{
		return getJSinvoke("zoomOut()");
	}
	private String getJSzoomIn()
	{
		return getJSinvoke("zoomIn()");
	}

Update state from a request to an AJAX target.
	public void update(AjaxRequestTarget target)
	{
		Request request = RequestCycle.get().getRequest();
		// Attention: don't use setters as this will result in an endless
		// AJAX request loop
		 = GLatLngBounds.parse(request.getRequestParameters()
		 = GLatLng.parse(request.getRequestParameters()
		 = GMapType.valueOf(request.getRequestParameters()
			.getParameterValue("currentMapType")
	}
	public void setOverlays(List<GOverlayoverlays)
	{
		for (GOverlay overlay : overlays)
		{
			addOverlay(overlay);
		}
	}
	private abstract class JSMethodBehavior extends Behavior
	{
		private static final long serialVersionUID = 1L;
		private final String attribute;
		public JSMethodBehavior(final String attribute)
		{
			this. = attribute;
		}

		public void onComponentTag(Component componentComponentTag tag)
		{
			String invoke = getJSinvoke();
			{
				invoke = "javascript:" + invoke;
			}
			tag.put(invoke);
		}
		protected abstract String getJSinvoke();
	}
	public class ZoomOutBehavior extends JSMethodBehavior
	{
		private static final long serialVersionUID = 1L;
		public ZoomOutBehavior(String event)
		{
			super(event);
		}
		protected String getJSinvoke()
		{
			return getJSzoomOut();
		}
	}
	public class ZoomInBehavior extends JSMethodBehavior
	{
		private static final long serialVersionUID = 1L;
		public ZoomInBehavior(String event)
		{
			super(event);
		}
		protected String getJSinvoke()
		{
			return getJSzoomIn();
		}
	}
	public class PanDirectionBehavior extends JSMethodBehavior
	{
		private static final long serialVersionUID = 1L;
		private final int dx;
		private final int dy;
		public PanDirectionBehavior(String eventfinal int dxfinal int dy)
		{
			super(event);
			this. = dx;
			this. = dy;
		}
		protected String getJSinvoke()
		{
		}
	}
	public class SetZoomBehavior extends JSMethodBehavior
	{
		private static final long serialVersionUID = 1L;
		private final int zoom;
		public SetZoomBehavior(final String eventfinal int zoom)
		{
			super(event);
			this. = zoom;
		}
		protected String getJSinvoke()
		{
		}
	}
	public class SetCenterBehavior extends JSMethodBehavior
	{
		private static final long serialVersionUID = 1L;
		private final GLatLng gLatLng;
		public SetCenterBehavior(String eventGLatLng gLatLng)
		{
			super(event);
			this. = gLatLng;
		}
		protected String getJSinvoke()
		{
		}
	}
	public class SetMapTypeBehavior extends JSMethodBehavior
	{
		private static final long serialVersionUID = 1L;
		private final GMapType mapType;
		public SetMapTypeBehavior(String eventGMapType mapType)
		{
			super(event);
			this. = mapType;
		}
		protected String getJSinvoke()
		{
		}
	}
	{
		private static final long serialVersionUID = 1L;
		protected void respond(AjaxRequestTarget target)
		{
			Request request = RequestCycle.get().getRequest();
			String overlayId = request.getRequestParameters()
				.getParameterValue("overlay.overlayId")
			String event = request.getRequestParameters()
				.getParameterValue("overlay.event")
			// TODO this is ugly
			// the id's of the Overlays are unique within the ArrayList
			// maybe we should change that collection
			for (GOverlay overlay : )
			{
				if (overlay.getId().equals(overlayId))
				{
					overlay.onEvent(target, GEvent.valueOf(event));
					break;
				}
			}
		}
		public Object getJSinit()
		{
			return getJSinvoke("overlayListenerCallbackUrl = '" + getCallbackUrl() +
				"'");
		}
	}