/examples/ArcGISLink/src/Find.mxml

http://gmaps-utility-library-flash.googlecode.com/ · Macromedia eXtensible Markup Language · 155 lines · 139 code · 16 blank · 0 comment · 0 complexity · 77ba535df4df28462c1a9b45ab4e1ea1 MD5 · raw file

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
  3. layout="absolute"
  4. width="100%"
  5. height="100%">
  6. <mx:Panel title="Layer Find:"
  7. width="100%"
  8. height="100%">
  9. <mx:HBox width="100%"
  10. height="100%">
  11. <mx:VBox height="100%"
  12. width="80%">
  13. <mx:HBox>
  14. <mx:Label text="Search a State, City or River with name containing text:"/>
  15. <mx:TextInput text="KS"
  16. id="q"
  17. maxChars="20"
  18. width="84"/>
  19. <mx:Button label="Find"
  20. id="find"
  21. enabled="false"
  22. click="findData(q.text)"/>
  23. <mx:CheckBox label="Exact Match"
  24. id="exact"/>
  25. </mx:HBox>
  26. <mx:Label text="Running...."
  27. id="busy"
  28. color="#FF1200"
  29. width="131"
  30. visible="false"/>
  31. <maps:Map xmlns:maps="com.google.maps.*"
  32. id="map"
  33. mapevent_mapready="onMapReady(event)"
  34. width="100%"
  35. height="100%"
  36. key="ABQIAAAA7QUChpcnvnmXxsjC7s1fCxQGj0PqsCtxKvarsoS-iqLdqZSKfxTd7Xf-2rEc_PC9o8IsJde80Wnj4g" sensor="false"/>
  37. </mx:VBox>
  38. <mx:List height="100%"
  39. width="20%"
  40. id="results">
  41. </mx:List>
  42. </mx:HBox>
  43. </mx:Panel>
  44. <mx:Script>
  45. <![CDATA[
  46. import mx.events.ListEvent;
  47. import mx.controls.*;
  48. import mx.controls.dataGridClasses.*;
  49. import com.google.maps.controls.*;
  50. import com.google.maps.overlays.*;
  51. import com.google.maps.*;
  52. import com.google.maps.interfaces.*;
  53. import com.google.maps.extras.arcgislink.*;
  54. private var service:MapService;
  55. private var grid:DataGrid;
  56. [Bindable]
  57. private var findValues:Array=new Array();
  58. private var overlayResults:Array=new Array();
  59. private function onMapReady(event:Event):void {
  60. map.setCenter(new LatLng(40, -100), 4);
  61. map.addControl(new MapTypeControl());
  62. map.addControl(new NavigationControl());
  63. map.enableScrollWheelZoom();
  64. map.enableContinuousZoom();
  65. grid=new DataGrid();
  66. var c:DataGridColumn=new DataGridColumn();
  67. c.headerText='Name';
  68. c.dataField='name';
  69. var c2:DataGridColumn=new DataGridColumn();
  70. c2.headerText='Value';
  71. c2.dataField='value';
  72. grid.columns=[c, c2];
  73. //var t:List = new List();
  74. grid.width=300;
  75. grid.height=200;
  76. service=new MapService('http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer');
  77. service.addEventListener(ServiceEvent.LOAD, function(evt:Event):void {
  78. find.enabled=true;
  79. });
  80. service.addEventListener(ServiceEvent.ERROR, function(evt:ServiceEvent):void{
  81. Alert.show(evt.data.toString());
  82. });
  83. results.dataProvider=findValues;
  84. results.addEventListener(ListEvent.ITEM_CLICK, function(evt:ListEvent):void {
  85. var row:int=evt.rowIndex;
  86. if (overlayResults[row]) {
  87. var ov:*=overlayResults[row];
  88. ov.dispatchEvent(new MapMouseEvent(MapMouseEvent.CLICK, ov, (ov is Marker) ? (ov as Marker).getLatLng() : ov.getLatLngBounds().getCenter()));
  89. }
  90. });
  91. }
  92. private function findData(q:String):void {
  93. map.clearOverlays();
  94. map.closeInfoWindow();
  95. var ex:Boolean=exact.selected;
  96. findValues=[];
  97. overlayResults=[];
  98. var params:FindParameters=new FindParameters({returnGeometry: true, searchText: q,
  99. contains: !ex, layerIds: service.getLayerIdsByName(['Cities', 'Rivers', 'States']),
  100. searchFields: ["CITY_NAME", "NAME", "SYSTEM", "STATE_ABBR", "STATE_NAME"]});;
  101. busy.visible=true;
  102. service.find(params, processFindResults);
  103. }
  104. private function processFindResults(rs:FindResults):void {
  105. busy.visible=false;
  106. var fs:Array=rs.results;
  107. for (var i:int=0, c:int=fs.length; i < c; i++) {
  108. processFindResult(fs[i]);
  109. }
  110. results.dataProvider=findValues;
  111. }
  112. private function processFindResult(res:FindResult):void {
  113. var title:String=res.layerName + ':' + res.foundFieldName + ' = ' + res.value;
  114. var ovs:Array= res.geometry;
  115. var a:*=res.attributes;
  116. var html:Array=[];
  117. for (var x:String in a) {
  118. if (a.hasOwnProperty(x)) {
  119. html.push({name: x, value: a[x]});
  120. }
  121. }
  122. findValues.push(title);
  123. for (var j:int=0, jc:int=ovs.length; j < jc; j++) {
  124. var ov:*=ovs[j];
  125. var idx:int = overlayResults.length;
  126. ov.addEventListener(MapMouseEvent.CLICK, function(evt:MapMouseEvent):void {
  127. var latlng:LatLng= evt.latLng;
  128. grid.dataProvider=html;
  129. var options:InfoWindowOptions=new InfoWindowOptions({customContent: grid, drawDefaultFrame: true});
  130. map.openInfoWindow(latlng, options);
  131. results.selectedIndex = idx;
  132. });
  133. overlayResults.push(ov);
  134. map.addOverlay(ov);
  135. }
  136. }
  137. ]]>
  138. </mx:Script>
  139. </mx:Application>