Solved! Go to Solution.
package ee.alphagis.layers { import com.esri.ags.events.LayerEvent; import com.esri.ags.layers.FeatureLayer; public class MyFeatureLayer extends FeatureLayer { public function MyFeatureLayer(url:String=null, proxyURL:String=null, token:String=null) { super(url, proxyURL, token); } public function setFilterFunction(func:Function):void { $graphicProvider.filterFunction = func; $graphicProvider.refresh(); dispatchEvent(new LayerEvent(LayerEvent.UPDATE_END, this, null, true)); } } }
<?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:mx="library://ns.adobe.com/flex/mx" xmlns:esri="http://www.esri.com/2008/ags" xmlns:layers="ee.alphagis.layers.*"> <s:layout> <s:HorizontalLayout gap="5" paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10" /> </s:layout> <fx:Script> <![CDATA[ import com.esri.ags.Graphic; import com.esri.ags.events.GraphicEvent; import com.esri.ags.events.LayerEvent; import mx.collections.ArrayCollection; [Bindable] private var totalGraphicsShown:String = ""; private var filterParam:int; protected function onGraphicAdd(event:GraphicEvent):void { event.graphic.toolTip = "FIPS: " + event.graphic.attributes.FIPS + "\n" + "POP2000: " + event.graphic.attributes.POP2000; } protected function onFilterClick(event:MouseEvent):void { var bt:Button = Button(event.target); switch (bt.id) { case bt100.id: filterParam = 100; break; case bt300.id: filterParam = 300; break; case bt500.id: filterParam = 500; break; case bt700.id: filterParam = 700; break; case bt900.id: filterParam = 900; break; } fLayer.setFilterFunction(providerFilterFunction); } protected function onClearFilters(event:MouseEvent):void { fLayer.setFilterFunction(null); } protected function providerFilterFunction(item:Object):Boolean { var isFiltered:Boolean = false; var gr:Graphic = Graphic(item); if (int(gr.attributes.POP2000) < filterParam) { isFiltered = true; } return isFiltered; } protected function onLayerUpdateEnd(event:LayerEvent):void { totalGraphicsShown = "Total graphics shown: " + (fLayer.graphicProvider as ArrayCollection).length; } ]]> </fx:Script> <fx:Declarations> <esri:SimpleMarkerSymbol id="symbol1" alpha="0.7" color="0xFF0000" size="6" style="triangle"/> <esri:SimpleMarkerSymbol id="symbol2" alpha="0.7" color="0xFF0000" size="10" style="triangle"/> <esri:SimpleMarkerSymbol id="symbol3" alpha="0.7" color="0xFF0000" size="16" style="triangle"/> <esri:SimpleMarkerSymbol id="symbol4" alpha="0.7" color="0xFF0000" size="22" style="triangle"/> <esri:SimpleMarkerSymbol id="symbol5" alpha="0.7" color="0xFF0000" size="26" style="triangle"/> </fx:Declarations> <s:Panel width="100%" height="100%" title="Map"> <esri:Map> <esri:extent> <esri:Extent id="lowerManhattan" xmin="-8239000" ymin="4968000" xmax="-8235000" ymax="4971000"> <esri:SpatialReference wkid="102100"/> </esri:Extent> </esri:extent> <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/> <layers:MyFeatureLayer id="fLayer" graphicAdd="onGraphicAdd(event)" updateEnd="onLayerUpdateEnd(event)" outFields="[FIPS,POP2000]" url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/0"> <layers:renderer> <esri:ClassBreaksRenderer field="POP2000"> <esri:ClassBreakInfo maxValue="61" symbol="{symbol1}"/> <esri:ClassBreakInfo maxValue="264" minValue="62" symbol="{symbol2}"/> <esri:ClassBreakInfo maxValue="759" minValue="265" symbol="{symbol3}"/> <esri:ClassBreakInfo maxValue="1900" minValue="760" symbol="{symbol4}"/> <esri:ClassBreakInfo minValue="1901" symbol="{symbol5}"/> </esri:ClassBreaksRenderer> </layers:renderer> </layers:MyFeatureLayer> </esri:Map> </s:Panel> <s:Panel width="300" height="100%" title="Filters"> <s:VGroup paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5" gap="10"> <s:Button id="bt100" label="Filter POP2000 less 100" click="onFilterClick(event)"/> <s:Button id="bt300" label="Filter POP2000 less 300" click="onFilterClick(event)"/> <s:Button id="bt500" label="Filter POP2000 less 500" click="onFilterClick(event)"/> <s:Button id="bt700" label="Filter POP2000 less 700" click="onFilterClick(event)"/> <s:Button id="bt900" label="Filter POP2000 less 900" click="onFilterClick(event)"/> <s:Button label="Clear filters" click="onClearFilters(event)"/> <s:Label text="{totalGraphicsShown}" /> </s:VGroup> </s:Panel> </s:Application>
package ee.alphagis.layers { import com.esri.ags.events.LayerEvent; import com.esri.ags.layers.FeatureLayer; public class MyFeatureLayer extends FeatureLayer { public function MyFeatureLayer(url:String=null, proxyURL:String=null, token:String=null) { super(url, proxyURL, token); } public function setFilterFunction(func:Function):void { $graphicProvider.filterFunction = func; $graphicProvider.refresh(); dispatchEvent(new LayerEvent(LayerEvent.UPDATE_END, this, null, true)); } } }
<?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:mx="library://ns.adobe.com/flex/mx" xmlns:esri="http://www.esri.com/2008/ags" xmlns:layers="ee.alphagis.layers.*"> <s:layout> <s:HorizontalLayout gap="5" paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10" /> </s:layout> <fx:Script> <![CDATA[ import com.esri.ags.Graphic; import com.esri.ags.events.GraphicEvent; import com.esri.ags.events.LayerEvent; import mx.collections.ArrayCollection; [Bindable] private var totalGraphicsShown:String = ""; private var filterParam:int; protected function onGraphicAdd(event:GraphicEvent):void { event.graphic.toolTip = "FIPS: " + event.graphic.attributes.FIPS + "\n" + "POP2000: " + event.graphic.attributes.POP2000; } protected function onFilterClick(event:MouseEvent):void { var bt:Button = Button(event.target); switch (bt.id) { case bt100.id: filterParam = 100; break; case bt300.id: filterParam = 300; break; case bt500.id: filterParam = 500; break; case bt700.id: filterParam = 700; break; case bt900.id: filterParam = 900; break; } fLayer.setFilterFunction(providerFilterFunction); } protected function onClearFilters(event:MouseEvent):void { fLayer.setFilterFunction(null); } protected function providerFilterFunction(item:Object):Boolean { var isFiltered:Boolean = false; var gr:Graphic = Graphic(item); if (int(gr.attributes.POP2000) < filterParam) { isFiltered = true; } return isFiltered; } protected function onLayerUpdateEnd(event:LayerEvent):void { totalGraphicsShown = "Total graphics shown: " + (fLayer.graphicProvider as ArrayCollection).length; } ]]> </fx:Script> <fx:Declarations> <esri:SimpleMarkerSymbol id="symbol1" alpha="0.7" color="0xFF0000" size="6" style="triangle"/> <esri:SimpleMarkerSymbol id="symbol2" alpha="0.7" color="0xFF0000" size="10" style="triangle"/> <esri:SimpleMarkerSymbol id="symbol3" alpha="0.7" color="0xFF0000" size="16" style="triangle"/> <esri:SimpleMarkerSymbol id="symbol4" alpha="0.7" color="0xFF0000" size="22" style="triangle"/> <esri:SimpleMarkerSymbol id="symbol5" alpha="0.7" color="0xFF0000" size="26" style="triangle"/> </fx:Declarations> <s:Panel width="100%" height="100%" title="Map"> <esri:Map> <esri:extent> <esri:Extent id="lowerManhattan" xmin="-8239000" ymin="4968000" xmax="-8235000" ymax="4971000"> <esri:SpatialReference wkid="102100"/> </esri:Extent> </esri:extent> <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/> <layers:MyFeatureLayer id="fLayer" graphicAdd="onGraphicAdd(event)" updateEnd="onLayerUpdateEnd(event)" outFields="[FIPS,POP2000]" url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/0"> <layers:renderer> <esri:ClassBreaksRenderer field="POP2000"> <esri:ClassBreakInfo maxValue="61" symbol="{symbol1}"/> <esri:ClassBreakInfo maxValue="264" minValue="62" symbol="{symbol2}"/> <esri:ClassBreakInfo maxValue="759" minValue="265" symbol="{symbol3}"/> <esri:ClassBreakInfo maxValue="1900" minValue="760" symbol="{symbol4}"/> <esri:ClassBreakInfo minValue="1901" symbol="{symbol5}"/> </esri:ClassBreaksRenderer> </layers:renderer> </layers:MyFeatureLayer> </esri:Map> </s:Panel> <s:Panel width="300" height="100%" title="Filters"> <s:VGroup paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5" gap="10"> <s:Button id="bt100" label="Filter POP2000 less 100" click="onFilterClick(event)"/> <s:Button id="bt300" label="Filter POP2000 less 300" click="onFilterClick(event)"/> <s:Button id="bt500" label="Filter POP2000 less 500" click="onFilterClick(event)"/> <s:Button id="bt700" label="Filter POP2000 less 700" click="onFilterClick(event)"/> <s:Button id="bt900" label="Filter POP2000 less 900" click="onFilterClick(event)"/> <s:Button label="Clear filters" click="onClearFilters(event)"/> <s:Label text="{totalGraphicsShown}" /> </s:VGroup> </s:Panel> </s:Application>