<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%"
height="100%"
layout="absolute"
viewSourceURL="srcview/index.html">
<mx:Panel title="Nearest Placemark Search with Google Maps Demo"
width="100%"
height="100%">
<mx:VBox width="100%"
height="100%">
<mx:HBox width="100%"
height="25">
<mx:Label text="Enter address: "/>
<mx:TextInput id="address"
text="2400 4TH AVE APT 368 SEATTLE, WA 98121"
dropShadowColor="0x000000"
enter="doGeocode(event);"/>
<mx:Button id="submitButton"
label="Search"
click="doGeocode(event);"/>
</mx:HBox>
<mx:UIComponent id="mapHolder"
initialize="onHolderCreated(event);"
resize="onHolderResized(event)"
width="100%"
height="100%"/>
</mx:VBox>
</mx:Panel>
<mx:Script>
<![CDATA[
import com.google.maps.InfoWindowOptions;
import com.google.maps.LatLng;
import com.google.maps.LatLngBounds;
import com.google.maps.Map;
import com.google.maps.MapEvent;
import com.google.maps.MapMouseEvent;
import com.google.maps.MapType;
import com.google.maps.controls.ZoomControl;
import com.google.maps.overlays.Marker;
import com.google.maps.overlays.MarkerOptions;
import com.google.maps.services.ClientGeocoder;
import com.google.maps.services.ClientGeocoderOptions;
import com.google.maps.services.GeocodingEvent;
import mx.controls.Alert;
private var map:Map;
private var theMarkers:Array=[];
public function onHolderCreated(event:Event):void
{
map=new Map();
map.key="ABQIAAAA7QUChpcnvnmXxsjC7s1fCxQGj0PqsCtxKvarsoS-iqLdqZSKfxTd7Xf-2rEc_PC9o8IsJde80Wnj4g";
map.addEventListener(MapEvent.MAP_READY, onMapReady);
mapHolder.addChild(map);
}
public function onHolderResized(event:Event):void
{
map.setSize(new Point(mapHolder.width, mapHolder.height));
}
private function onMapReady(event:Event):void
{
map.enableScrollWheelZoom();
map.enableContinuousZoom();
map.setCenter(new LatLng(47.614495, -122.341861), 13);
map.addControl(new ZoomControl());
getXml();
}
public function getXml():void
{
var xmlString:URLRequest=new URLRequest("markers.xml");
var xmlLoader:URLLoader=new URLLoader(xmlString);
xmlLoader.addEventListener("complete", readXml);
}
public function readXml(event:Event):void
{
var markersXML:XML=new XML(event.target.data);
var markers:XMLList=markersXML..marker;
var markersCount:int=markers.length();
var i:Number;
for(i=0; i < markersCount; i++)
{
var markerXml:XML=markers[i];
var name:String=markerXml.@name;
var address:String=markerXml.@address;
var latlng:LatLng=new LatLng(markerXml.@lat, markerXml.@lng);
var marker:Marker=createMarker(latlng, name, address);
theMarkers.push({name:name, address:address, latlng:latlng, marker:marker});
}
}
public function createMarker(latlng:LatLng, name:String, address:String):Marker
{
var marker:Marker=new Marker(latlng);
var html:String="<b>" + name + "</b> <br/>" + address;
marker.addEventListener(MapMouseEvent.CLICK, function(e:MapMouseEvent):void
{
marker.openInfoWindow(new InfoWindowOptions({contentHTML:html}));
});
return marker;
}
private function distanceCmp(point:LatLng):Function
{
return function(a:Object, b:Object):Number
{
return point.distanceFrom(a.latlng) - point.distanceFrom(b.latlng);
}
}
private function doGeocode(event:Event):void
{
var geocoder:ClientGeocoder=new ClientGeocoder();
geocoder.addEventListener(GeocodingEvent.GEOCODING_SUCCESS, function(event:GeocodingEvent):void
{
var placemarks:Array=event.response.placemarks;
if (placemarks.length > 0)
{
map.setCenter(placemarks[0].point);
var marker:Marker=new Marker(placemarks[0].point);
marker.addEventListener(MapMouseEvent.CLICK, function(event:MapMouseEvent):void
{
marker.openInfoWindow(new InfoWindowOptions({content:placemarks[0].address}));
});
map.clearOverlays();
map.addOverlay(marker);
theMarkers.sort(distanceCmp(placemarks[0].point));
for(var i=0; i < 3; ++i)
{
map.addOverlay(theMarkers[i].marker);
}
}
});
geocoder.addEventListener(GeocodingEvent.GEOCODING_FAILURE, function(event:GeocodingEvent):void
{
Alert.show("Geocoding failed");
});
geocoder.geocode(address.text);
}
]]>
</mx:Script>
</mx:Application>