I am trying to create an application where a user can define the layer definition for a map service. I can it get it work if I add the layer in the action script, but I would really like to apply the layer definition to an existing map layer. Here is the code that works (adds a layer and applies the query):
I can't get the layer definition to work using an existing layer. Here is the code that doesn't work:
The layer does appear on the map, but nothing happens when the layer definition is applied.
I am a FLEX newbie, so any insight would be appreciated.
Jon Barlett
GIS Analyst
Dallas PD
Code:
private function PerformQuery():void {
var dLayer:ArcGISDynamicMapServiceLayer = new ArcGISDynamicMapServiceLayer("http://apdpdgismap01:6080/arcgis/rest/services/GISDPD01/CrimePart1_28Days/MapServer");
map.addLayer(dLayer);
dLayer.visible = true;
//var dLayer:ArcGISDynamicMapServiceLayer = map.getLayer("CrimePart1_28Days") as ArcGISDynamicMapServiceLayer;
dLayer.name = "CrimePart1_28Days"
var layerDefs:Array = new Array();
var layerStr:String = new String();
layerStr = "DIVISION = '" + Offense.text + "'"
layerDefs[0] = layerStr;
dLayer.layerDefinitions = layerDefs;
dLayer.refresh();
}
]]>
</fx:Script>
<viewer:WidgetTemplate id="DPD_Crime_Data"
width="300" height="300">
<viewer:layout>
<s:VerticalLayout horizontalAlign="center" verticalAlign="middle"/>
</viewer:layout>
<s:Label id="lbl"
width="100%"
fontSize="18"
fontStyle="italic"
fontWeight="bold"/>
<s:TextInput id="Offense"
width="100%" />
<s:Button label="Query Crime" click="PerformQuery();"/>
</viewer:WidgetTemplate>
</viewer:BaseWidget>
Code:
private function PerformQuery():void {
//var dLayer:ArcGISDynamicMapServiceLayer = new ArcGISDynamicMapServiceLayer("http://apdpdgismap01:6080/arcgis/rest/services/GISDPD01/CrimePart1_28Days/MapServer");
//map.addLayer(dLayer);
//dLayer.visible = true;
var dLayer:ArcGISDynamicMapServiceLayer = map.getLayer("CrimePart1_28Days") as ArcGISDynamicMapServiceLayer;
dLayer.name = "CrimePart1_28Days"
var layerDefs:Array = new Array();
var layerStr:String = new String();
layerStr = "DIVISION = '" + Offense.text + "'"
layerDefs[0] = layerStr;
dLayer.layerDefinitions = layerDefs;
dLayer.refresh();
}
]]>
</fx:Script>
<viewer:WidgetTemplate id="DPD_Crime_Data"
width="300" height="300">
<viewer:layout>
<s:VerticalLayout horizontalAlign="center" verticalAlign="middle"/>
</viewer:layout>
<s:Label id="lbl"
width="100%"
fontSize="18"
fontStyle="italic"
fontWeight="bold"/>
<s:TextInput id="Offense"
width="100%" />
<s:Button label="Query Crime" click="PerformQuery();"/>
</viewer:WidgetTemplate>
</viewer:BaseWidget>
This is how the layer is added in the config file:
<layer label="CrimePart1_28Days" id="CrimePart1_28Days" type="feature" visible="true" alpha="1.0"
url="http://apdpdgismap01:6080/arcgis/rest/services/GISDPD01/CrimePart1_28Days/MapServer/0"/>
</operationallayers>
I am a FLEX newbie, so any insight would be appreciated.
Jon Barlett
GIS Analyst
Dallas PD