Solved! Go to Solution.
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:esri="http://www.esri.com/2008/ags" pageTitle="Geocoder Component Sample"> <fx:Script> <![CDATA[ import com.esri.ags.Graphic; import com.esri.ags.events.GeocoderEvent; import com.esri.ags.geometry.Geometry; import com.esri.ags.symbols.SimpleFillSymbol; import com.esri.ags.symbols.SimpleMarkerSymbol; import com.esri.ags.symbols.Symbol; import mx.controls.Alert; import mx.rpc.events.FaultEvent; protected function onGeocoderResultSelected(event:GeocoderEvent):void { var symbol:Symbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 24, 0xFF0000); var gr:Graphic = new Graphic(event.result.geometry, symbol); gr.toolTip = event.result.label + "\n(" + event.result.sourceName + ")"; gLayer.clear(); gLayer.add(gr); } protected function onGeocoderFault(event:FaultEvent):void { Alert.show(event.message.toString(), "Geocoder fault"); } protected function onGeocoderSearchComplete(event:GeocoderEvent):void { // do something } ]]> </fx:Script> <esri:Map id="map"> <esri:extent> <esri:WebMercatorExtent xmin="-20119163" ymin="1160734" xmax="-1333999" ymax="10416341"/> </esri:extent> <esri:ArcGISTiledMapServiceLayer/> <esri:GraphicsLayer id="gLayer" /> </esri:Map> <esri:Geocoder width="300" height="30" top="20" horizontalCenter="0" map="{map}" resultSelected="onGeocoderResultSelected(event)" fault="onGeocoderFault(event)" searchComplete="onGeocoderSearchComplete(event)" /> </s:Application>
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:esri="http://www.esri.com/2008/ags"> <s:layout> <s:VerticalLayout paddingBottom="15" paddingLeft="10" paddingRight="10" paddingTop="15"/> </s:layout> <fx:Script> <![CDATA[ import com.esri.ags.Graphic; import com.esri.ags.events.LocatorEvent; import com.esri.ags.events.MapMouseEvent; import com.esri.ags.geometry.MapPoint; import com.esri.ags.tasks.supportClasses.AddressCandidate; import com.esri.ags.tasks.supportClasses.AddressToLocationsParameters; import com.esri.ags.utils.WebMercatorUtil; import flashx.textLayout.conversion.TextConverter; import mx.collections.ArrayList; import mx.controls.Alert; import mx.rpc.AsyncResponder; import mx.utils.StringUtil; import spark.events.GridEvent; [Bindable] private var lastFoundAddreses:ArrayList = new ArrayList(); private function onMapClick(event:MapMouseEvent):void { locateTask.locationToAddress(event.mapPoint, 100); } private function onLocationToAddressComplete(event:LocatorEvent):void { var candidate:AddressCandidate = event.addressCandidate; if (candidate) { showCandidateOnMap(candidate); } else { Alert.show("This location does not have a known street address."); } } private function doFind():void { var params:AddressToLocationsParameters = new AddressToLocationsParameters(); params.address = { "StreetName": onelineaddress.text, City: "Helsinki", Country: "Finland" }; params.outFields = ["*"]; //all // Use outFields to get back extra information // The exact fields available depends on the specific Locator used. locateTask.outSpatialReference = myMap.spatialReference; locateTask.addressToLocations(params, new AsyncResponder(onResultFunction, onFaultFunction)); function onResultFunction(candidates:Array, token:Object = null):void { if (candidates.length > 0) { lastFoundAddreses.removeAll(); var infoHtmlString:String = ""; for (var indexer:int = 0; indexer < candidates.length; indexer++) { var nextCandidate:AddressCandidate = candidates[indexer]; if (nextCandidate && nextCandidate.address && nextCandidate.location && nextCandidate.score && nextCandidate.score > 0) { var obj:Object = new Object(); obj.candidate = nextCandidate; obj.address = StringUtil.substitute("{0}; score is >>> {1}", nextCandidate.address.toString(), nextCandidate.score.toString()); obj.coords = StringUtil.substitute("X={0}, Y={1}", nextCandidate.location.x.toFixed(0), nextCandidate.location.y.toFixed(0)); obj.geometry = nextCandidate.location; lastFoundAddreses.addItem(obj); } } var addressCandidate:AddressCandidate = candidates[0]; showCandidateOnMap(addressCandidate); } else { Alert.show("Sorry, couldn't find a location for this address" + "\nAddress: " + onelineaddress.text); }; } function onFaultFunction(info:Object, token:Object = null):void { Alert.show("Failure: \n" + info.toString()); } } private function showCandidateOnMap(candidate:AddressCandidate):void { var address:Object = candidate.address; var candidateMapPoint:MapPoint = candidate.location; if (candidateMapPoint.spatialReference.wkid != myMap.spatialReference.wkid) { candidateMapPoint = WebMercatorUtil.geographicToWebMercator(candidate.location) as MapPoint; } var myGraphic:Graphic = new Graphic(candidateMapPoint, mySymbol, address); myGraphic.id = "graphic"; myGraphicsLayer.clear(); myGraphicsLayer.add(myGraphic); var htmlText:String = "<b>Address:</b><br>"; if (address.hasOwnProperty("Address")) { htmlText += address.Address.toString() + "<br>"; } else if (address.hasOwnProperty("StreetName")) { htmlText += address.StreetName.toString() + "<br>"; } else { htmlText += address.toString() + "<br>"; } textArea.textFlow = TextConverter.importToFlow(htmlText, TextConverter.TEXT_FIELD_HTML_FORMAT); myMap.infoWindow.label = "Geocode an Address"; myMap.infoWindow.show(myGraphic.geometry as MapPoint); myMap.centerAt(myGraphic.geometry as MapPoint); if (lastFoundAddreses != null) { var updatedLastFoundAddress:ArrayList = new ArrayList(); for (var ind:int = 0; ind < lastFoundAddreses.length; ind++) { var obj:Object = lastFoundAddreses.getItemAt(ind); var objPoint:MapPoint = obj.geometry; var dX:Number = objPoint.x-candidateMapPoint.x; var dY:Number = objPoint.y-candidateMapPoint.y; var half:Number = 0.5; var distance:Number = Math.pow((Math.pow(dX, 2) + Math.pow(dY, 2)), half); var distanceToPoint:String = StringUtil.substitute(" ~ {0} m", distance.toFixed(0)); var updatedObj:Object = new Object(); updatedObj.address = obj.address; updatedObj.distance = obj.distance; updatedObj.distance2 = distanceToPoint; updatedObj.geometry = obj.geometry; updatedObj.coords = obj.coords; updatedObj.candidate = obj.candidate; updatedLastFoundAddress.addItem(updatedObj); } lastFoundAddreses.removeAll(); lastFoundAddreses.addAll(updatedLastFoundAddress); } } protected function myMap_mouseMoveHandler(event:MouseEvent):void { var currentMousePoint:MapPoint = myMap.toMapFromStage(event.stageX, event.stageY); if (lastFoundAddreses != null) { var updatedLastFoundAddress:ArrayList = new ArrayList(); for (var ind:int = 0; ind < lastFoundAddreses.length; ind++) { var obj:Object = lastFoundAddreses.getItemAt(ind); var objPoint:MapPoint = obj.geometry; var dX:Number = objPoint.x-currentMousePoint.x; var dY:Number = objPoint.y-currentMousePoint.y; var half:Number = 0.5; var distance:Number = Math.pow((Math.pow(dX, 2) + Math.pow(dY, 2)), half); var updatedDistance:String = StringUtil.substitute("~ {0} m", distance.toFixed(0)); var updatedObj:Object = new Object(); updatedObj.address = obj.address; updatedObj.geometry = obj.geometry; updatedObj.coords = obj.coords; updatedObj.distance2 = obj.distance2; updatedObj.distance = updatedDistance; updatedObj.candidate = obj.candidate; updatedLastFoundAddress.addItem(updatedObj); } lastFoundAddreses.removeAll(); lastFoundAddreses.addAll(updatedLastFoundAddress); } } protected function lastFoundGrid_gridClickHandler(event:GridEvent):void { if (lastFoundGrid.selectedItem != null) { var selectedCandidate:AddressCandidate = lastFoundGrid.selectedItem.candidate as AddressCandidate; if (selectedCandidate != null) { showCandidateOnMap(selectedCandidate); } } } ]]> </fx:Script> <fx:Declarations> <esri:Locator id="locateTask" concurrency="last" locationToAddressComplete="onLocationToAddressComplete(event)" url="http://tasks.arcgisonline.com/ArcGIS/rest/services/Locators/TA_Address_EU/GeocodeServer"/> <esri:SimpleMarkerSymbol id="mySymbol" alpha="0.5" color="0xFF0000" size="19" style="circle"> <esri:SimpleLineSymbol width="2"/> </esri:SimpleMarkerSymbol> </fx:Declarations> <s:Label fontSize="12" fontWeight="bold" text="Click on map to obtain the address of a location."/> <esri:Map id="myMap" mapClick="onMapClick(event)" mouseMove="myMap_mouseMoveHandler(event)" openHandCursorVisible="false"> <esri:extent> <esri:Extent xmin="2730524.567128713" xmax="2826835.222767905" ymin="8425522.38792159" ymax="8477346.69309887"/> </esri:extent> <esri:infoWindowContent> <s:TextArea id="textArea" editable="false" heightInLines="4"/> </esri:infoWindowContent> <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/> <esri:GraphicsLayer id="myGraphicsLayer"/> </esri:Map> <s:Panel width="100%" top="5" horizontalCenter="0" title="Find an address"> <s:layout> <s:VerticalLayout horizontalAlign="center" verticalAlign="middle"/> </s:layout> <!-- Single line geocode --> <s:TextInput id="onelineaddress" width="95%" enter="doFind()" text="Koskelantie 5"/> <s:Button click="doFind()" label="Find Address"/> <s:DataGrid id="lastFoundGrid" width="100%" gridClick="lastFoundGrid_gridClickHandler(event)" dataProvider="{lastFoundAddreses}"> <s:columns> <s:ArrayList> <s:GridColumn dataField="address" headerText="Address"/> <s:GridColumn dataField="distance" headerText="Distance to cursor" width="200"/> <s:GridColumn dataField="distance2" headerText="Distance to last clicked" width="200"/> <s:GridColumn dataField="coords" headerText="Coordinates" width="200"/> </s:ArrayList> </s:columns> </s:DataGrid> </s:Panel> </s:Application>
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:esri="http://www.esri.com/2008/ags" pageTitle="Geocoder Component Sample"> <fx:Script> <![CDATA[ import com.esri.ags.Graphic; import com.esri.ags.events.GeocoderEvent; import com.esri.ags.geometry.Geometry; import com.esri.ags.symbols.SimpleFillSymbol; import com.esri.ags.symbols.SimpleMarkerSymbol; import com.esri.ags.symbols.Symbol; import mx.controls.Alert; import mx.rpc.events.FaultEvent; protected function onGeocoderResultSelected(event:GeocoderEvent):void { var symbol:Symbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 24, 0xFF0000); var gr:Graphic = new Graphic(event.result.geometry, symbol); gr.toolTip = event.result.label + "\n(" + event.result.sourceName + ")"; gLayer.clear(); gLayer.add(gr); } protected function onGeocoderFault(event:FaultEvent):void { Alert.show(event.message.toString(), "Geocoder fault"); } protected function onGeocoderSearchComplete(event:GeocoderEvent):void { // do something } ]]> </fx:Script> <esri:Map id="map"> <esri:extent> <esri:WebMercatorExtent xmin="-20119163" ymin="1160734" xmax="-1333999" ymax="10416341"/> </esri:extent> <esri:ArcGISTiledMapServiceLayer/> <esri:GraphicsLayer id="gLayer" /> </esri:Map> <esri:Geocoder width="300" height="30" top="20" horizontalCenter="0" map="{map}" resultSelected="onGeocoderResultSelected(event)" fault="onGeocoderFault(event)" searchComplete="onGeocoderSearchComplete(event)" /> </s:Application>