Solved! Go to Solution.
From reference addLayer:
if you find MapManager.mxml in Flex Viewer application (v 2.5) sources (~ line 620) - layer id is defined and it is the same as layer namevar featureLayer:FeatureLayer = new FeatureLayer(url); ... featureLayer.id = label; // <layer label="Test" ...> in config.xml featureLayer.name = label; // <layer label="Test" ...> in config.xml ... map.addLayer(featureLayer); ...
In your situation:var layerId:String="Test"; // <layer label="Test" type="feature" ...> in config.xml var myLayer:FeatureLayer = map.getLayer(layerId) as FeatureLayer;
<operationallayers>
<layer label="Test" type="feature" id="idlayer"
url="http://trainingcloud.arcgis.com/ArcGIS/rest/services/Redlands_Collisions2008/MapServer/0"/>
[bindable] public var fLayer:FeatureLayer;
protected function widgetOpenedHandler(event:Event):void
{
map.timeSlider = myTimeSlider;
fLayer= map.getLayer(idlayer);
fLayer.mode = "snapshot";
var timeInfo:TimeInfo=fLayer.layerDetails.timeInfo;
var timeInterval:int=timeInt.value;
myTimeSlider.createTimeStopsByTimeInterval(timeInfo.timeExtent,timeInterval,timeInfo.timeIntervalUnits);
}...
Hi,
I want to load a layer as a featurelayer in my widget.
WHAT WORKED:
Outside flexviewer, in a standalone mxml, I managed to call the layer via the following way:
<esri:FeatureLayer id="fLayer" url="http://trainingcloud.arcgis.com/ArcGIS/rest/services/Redlands_Collisions2008/MapServer/0" load="fLayer_loadHandler(event)" mode="snapshot"/>
In this case, once the layer was loaded, I could define the timesliderstopsbyTimeInterval from the timeslider using parameters coming from the layer.
protected function fLayer_loadHandler(event:LayerEvent):void
{
var timeInfo:TimeInfo=fLayer.layerDetails.timeInfo;
var timeInterval:int=timeInt.value;
myTimeSlider.createTimeStopsByTimeInterval(timeInfo.timeExtent,timeInterval,timeInfo.timeIntervalUnits)
Now, I want to integrate this in the flexviewer as a widget which calls a layer and let a timeslider work on that layer.
But how do I call this featurelayer from within my widget mxml?
WHAT DOES NOT WORK:
I tried:
In my config file, I have mentioned the layer under the group of operational layers:
<layer label="GPS Track" type="dynamic" visible="false" id="track" url="http://trainingcloud.arcgis.com/ArcGIS/rest/services/Redlands_Collisions2008/MapServer/0"/>
When I put "visible" on true, it shows in the flexviewer -> there is no issue. But, I want the layer to be invisible untill the user clicks on the widget for the timeslider.
In my widget.mxml I tried:
protected function widgetOpenedHandler(event:Event):void
{
map.timeSlider = myTimeSlider;
var fLayer:FeatureLayer = map(track) as FeatureLayer;
fLayer.mode="snapshot";
fLayer.load=LoaderEvent (? and then?)
}
But he informs that 'access of undefined property 'track'.
So I want to do exactly the same as in the standolane mxml, but from the widget:
-on click -> the layer (with id="track" in the config file) should be loaded -> when loaded the createtimestopinterval should be created (I use for that the name "flayer")
Thanks a lot in advance for any help!
Leen
private var myLayer:FeatureLayer = null; private var myLayerName:String = "Test"; // defined in config.xml <layer label="Test"... initialized in MapManager.mxml protected function onWidgetOpened(event:Event):void { if (!myLayer) // if (myLayer == null) { initializeMyLayer(); } } private function initializeMyLayer():void { if (map) { var layer:Layer = null; for each (layer in map.layers) { if (layer is FeatureLayer && layer.name == myLayerName) //any other conditions (id, visibility, loaded or not, ...) { myLayer = layer as FeatureLayer; break; } } } }
private var myLayer:FeatureLayer = null; private var myLayerName:String = "Test"; // defined in config.xml <layer label="Test"... initialized in MapManager.mxml protected function onWidgetOpened(event:Event):void { if (!myLayer) // if (myLayer == null) { initializeMyLayer(); } } private function initializeMyLayer():void { if (map) { var layer:Layer = null; for each (layer in map.layers) { if (layer is FeatureLayer && layer.name == myLayerName) //any other conditions (id, visibility, loaded or not, ...) { myLayer = layer as FeatureLayer; break; } } if (!myLayer) { addMyLayer(); } } } private function addMyLayer():void { if (map) { myLayer = new FeatureLayer("serviceUrl"); // set other needed params (http://help.arcgis.com/en/webapi/flex/apiref/com/esri/ags/layers/FeatureLayer.html) var myLayerId:String = map.addLayer(myLayer); trace("Feature layer added. Layer id=" + myLayerId); } }
wrong code
...
<operationallayers>
<layer label="Test" type="feature" id="idlayer"
url="http://trainingcloud.arcgis.com/ArcGIS/rest/services/Redlands_Collisions2008/MapServer/0"/>
protected function widgetOpenedHandler(event:Event):void { map.timeSlider = myTimeSlider; fLayer= map.getLayer(idlayer); fLayer.mode = "snapshot"; var timeInfo:TimeInfo=fLayer.layerDetails.timeInfo; var timeInterval:int=timeInt.value; myTimeSlider.createTimeStopsByTimeInterval(timeInfo.timeExtent,timeInterval,timeInfo.timeIntervalUnits); }
<operationallayers> <layer label="Test" type="feature" url="http://trainingcloud.arcgis.com/ArcGIS/rest/services/Redlands_Collisions2008/MapServer/0"/>
<?xml version="1.0" encoding="utf-8"?> <viewer:BaseWidget 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:viewer="com.esri.viewer.*" xmlns:esri="http://www.esri.com/2008/ags"> <fx:Script> <![CDATA[ import com.esri.ags.components.supportClasses.IntegerField; import com.esri.ags.events.LayerEvent; import com.esri.ags.layers.FeatureLayer; import com.esri.ags.layers.supportClasses.TimeInfo; import flashx.textLayout.tlf_internal; import mx.events.ItemClickEvent; import org.osmf.events.LoaderEvent; import spark.events.TrackBaseEvent; import com.esri.ags.layers.supportClasses.TimeInfo; [bindable] private var fLayer:FeatureLayer = null; private var fLayerName:String = "Test"; // defined in config.xml <layer label="Test"... initialized in MapManager.mxml protected function onWidgetOpened(event:Event):void { if (!fLayer) // if (fLayer == null) { initializeMyLayer(); } } private function initializeMyLayer():void { if (map) { var layer:Layer = null; //here the error is given for each (layer in map.layers) { if (layer is FeatureLayer && layer.name == fLayerName) //any other conditions (id, visibility, loaded or not, ...) { fLayer = layer as FeatureLayer; fLayer.mode="snapshot"; var timeInfo:TimeInfo=fLayer.layerDetails.timeInfo; var timeInterval:int=timeInt.value; myTimeSlider.createTimeStopsByTimeInterval(timeInfo.timeExtent,timeInterval,timeInfo.timeIntervalUnits); break; } } } }
private var myLayer:FeatureLayer = null; private var myLayerName:String = "Test"; // defined in config.xml <layer label="Test"... initialized in MapManager.mxml protected function onWidgetOpened(event:Event):void { if (!myLayer) // if (myLayer == null) { initializeMyLayer(); } } private function initializeMyLayer():void { if (map) { var layer:Layer = null; for each (layer in map.layers) { if (layer is FeatureLayer && layer.name == myLayerName) //any other conditions (id, visibility, loaded or not, ...) { myLayer = layer as FeatureLayer; break; } } } }
As you can read in documentation (Flex Viewer version 2.5) about config.xml layer tag (if you can read), <layer> has no id attribute.
So what documentation you read? Can you provide me with link.
so it cannot work with "getlayer"?
Type was not found or was not a compile type constant: Layer.
import com.esri.ags.layers.Layer;
Leen,
1-
No, map.getLayer(layerid) works, if you know valid layer id, do you know it?
2-
Think before you write :confused:import com.esri.ags.layers.Layer;
Read documentation of...
hei, Leen do you understand what difference between ArcGIS API (application programming interface) fo Flex vs. ArcGIS Viewer for Flex?
The Viewer for Flex is just sample application. (With great functionality and interface, extendable ... but still sample application, better one, but still...)
The confix.xml <layer> tag in Viewer for Flex and Layer in Flex API reference are not equals things.
Good luck. 😄
...Adds a layer to the map. If an ID was not defined, a unique name will be created and assigned to the layer. The unique name is created using NameUtil.createUniqueName, which will combine the unqualified class name with an incrementing counter to create something like "Layer2"...
var featureLayer:FeatureLayer = new FeatureLayer(url); ... featureLayer.id = label; // <layer label="Test" ...> in config.xml featureLayer.name = label; // <layer label="Test" ...> in config.xml ... map.addLayer(featureLayer); ...
var layerId:String="Test"; // <layer label="Test" type="feature" ...> in config.xml var myLayer:FeatureLayer = map.getLayer(layerId) as FeatureLayer;
From reference addLayer:
if you find MapManager.mxml in Flex Viewer application (v 2.5) sources (~ line 620) - layer id is defined and it is the same as layer namevar featureLayer:FeatureLayer = new FeatureLayer(url); ... featureLayer.id = label; // <layer label="Test" ...> in config.xml featureLayer.name = label; // <layer label="Test" ...> in config.xml ... map.addLayer(featureLayer); ...
In your situation:var layerId:String="Test"; // <layer label="Test" type="feature" ...> in config.xml var myLayer:FeatureLayer = map.getLayer(layerId) as FeatureLayer;