001 package com.google.gwt.maps.client.layers; 002 003 import com.google.gwt.core.client.JavaScriptObject; 004 import com.google.gwt.event.shared.HandlerRegistration; 005 import com.google.gwt.maps.client.MapImpl; 006 import com.google.gwt.maps.client.MapWidget; 007 import com.google.gwt.maps.client.base.LatLngBounds; 008 import com.google.gwt.maps.client.events.MapEventType; 009 import com.google.gwt.maps.client.events.MapHandlerRegistration; 010 import com.google.gwt.maps.client.events.kmlmouse.KmlMouseEventFormatter; 011 import com.google.gwt.maps.client.events.kmlmouse.KmlMouseMapHandler; 012 import com.google.gwt.maps.client.events.kmlviewport.DefaultViewportChangeEventFormatter; 013 import com.google.gwt.maps.client.events.kmlviewport.DefaultViewportChangeMapHandler; 014 015 /** 016 * A KmlLayer adds geographic markup to the map from a KML, KMZ or GeoRSS file that is hosted on a publicly accessible web server. A KmlFeatureData object is provided for each feature when clicked. This class extends MVCObject. 017 * <br><br> 018 * See <a href="https://developers.google.com/maps/documentation/javascript/reference#KmlLayer">KmlLayer API Doc</a> 019 */ 020 public class KmlLayer extends JavaScriptObject { 021 022 /** 023 * use newInstance(); 024 */ 025 protected KmlLayer() {} 026 027 /** 028 * Creates a KmlLayer which renders the contents of the specified KML/KMZ file (<a href="https://developers.google.com/kml/documentation/kmlreference">KML API Doc</a>) or GeoRSS file (<a href="http://www.georss.org">GeoRSS API Doc</a>). 029 * @param url 030 * @param options {@link KmlLayerOptions} 031 * @return {@link KmlLayerOptions} 032 */ 033 public final static KmlLayer newInstance(String url, KmlLayerOptions options) { 034 return createJso(url, options).cast(); 035 } 036 037 /** 038 * Creates a KmlLayer which renders the contents of the specified KML/KMZ file (<a href="https://developers.google.com/kml/documentation/kmlreference">KML API Doc</a>) or GeoRSS file (<a href="http://www.georss.org">GeoRSS API Doc</a>). 039 * @param url 040 */ 041 public final static KmlLayer newInstance(String url) { 042 return createJso(url).cast(); 043 } 044 045 private static native JavaScriptObject createJso(String url) /*-{ 046 return new $wnd.google.maps.KmlLayer(url); 047 }-*/; 048 049 private static native JavaScriptObject createJso(String url, KmlLayerOptions options) /*-{ 050 return new $wnd.google.maps.KmlLayer(url, options); 051 }-*/; 052 053 /** 054 * Get the default viewport for the layer being displayed. 055 */ 056 public final native LatLngBounds getDefaultViewport() /*-{ 057 return this.getDefaultViewport(); 058 }-*/; 059 060 /** 061 * Renders the KML Layer on the specified map. If map is set to null, the layer is removed. 062 * @param mapWidget 063 */ 064 public final void setMap(MapWidget mapWidget) { 065 if (mapWidget == null) { 066 close(); 067 } else { 068 setMapImpl(mapWidget.getJso()); 069 } 070 } 071 072 private final native void setMapImpl(MapImpl map) /*-{ 073 this.setMap(map); 074 }-*/; 075 076 /** 077 * Get the map on which the KML Layer is being rendered. 078 */ 079 public final MapWidget getMap() { 080 return MapWidget.newInstance(getMapImpl()); 081 } 082 083 private final native MapImpl getMapImpl() /*-{ 084 return this.getMap(); 085 }-*/; 086 087 /** 088 * Get the metadata associated with this layer, as specified in the layer markup. 089 */ 090 public final native KmlLayerMetadata getMetadata() /*-{ 091 return this.getMetadata(); 092 }-*/; 093 094 /** 095 * Get the URL of the geographic markup which is being displayed. 096 */ 097 public final native String getUrl() /*-{ 098 return this.getUrl(); 099 }-*/; 100 101 /** 102 * This event is fired when a feature in the layer is clicked. 103 * @param handler 104 */ 105 public final HandlerRegistration addClickHandler(KmlMouseMapHandler handler) { 106 return MapHandlerRegistration.addHandler(this, MapEventType.CLICK, handler, new KmlMouseEventFormatter()); 107 } 108 109 /** 110 * This event is fired when the KML layers default viewport has changed. 111 * @param handler 112 */ 113 public final HandlerRegistration addDefaultViewportChangeHandler(DefaultViewportChangeMapHandler handler) { 114 return MapHandlerRegistration.addHandler(this, MapEventType.DEFAULTVIEWPORT_CHANGED, handler, new DefaultViewportChangeEventFormatter()); 115 } 116 117 /** 118 * erase kml layer 119 */ 120 public final native void close() /*-{ 121 this.setMap(); 122 }-*/; 123 }