Select to view content in your preferred language

Searching a feature id in multiple feature classes

830
3
Jump to solution
04-16-2013 09:23 AM
ab1
by
Deactivated User
Hello,

I'd like to look for all features, existing in all feature classes (located on the server side), that have an id equal to myId.

I'm using FindTask to do that, but it doesn't return anything. It is supposed to return one feature!

Is there a way to do that without using QueryTasks on all feature classes?

Thanks 🙂
Tags (2)
0 Kudos
1 Solution

Accepted Solutions
IvanBespalov
Frequent Contributor
in "Find features in Map Layers" example used FindTask.
Set FindParameters -> searchFields="[your id field name]".

<?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"       pageTitle="Find features in Map Layers">    <s:layout>   <s:VerticalLayout horizontalAlign="center"/>  </s:layout>    <fx:Script>   <![CDATA[    import com.esri.ags.Graphic;    import com.esri.ags.events.FindEvent;    import com.esri.ags.geometry.Geometry;        private function doFind():void    {     findTask.execute(myFindParams);    }        private function executeCompleteHandler(event:FindEvent):void    {     myGraphicsLayer.clear();     var graphic:Graphic;     resultSummary.text = "Found " + event.findResults.length + " results.";     var resultCount:int = event.findResults.length;     for (var i:Number = 0; i < resultCount; i++)     {      graphic = event.findResults.feature;      graphic.toolTip = event.findResults.foundFieldName + ": " + event.findResults.value;            switch (graphic.geometry.type)      {       case Geometry.MAPPOINT:       {        graphic.symbol = smsFind;        break;       }       case Geometry.POLYLINE:       {        graphic.symbol = slsFind;        break;       }       case Geometry.POLYGON:       {        graphic.symbol = sfsFind;        break;       }      }      myGraphicsLayer.add(graphic);     }    }   ]]>  </fx:Script>    <fx:Declarations>   <!-- Symbol for Find Result as Polyline -->   <esri:SimpleLineSymbol id="slsFind"           width="3"           alpha="0.9"           color="0xFFFF00"           style="solid"/>      <!-- Symbol for Find Result as Point -->   <esri:SimpleMarkerSymbol id="smsFind"          alpha="0.9"          color="0xFFFF00"          size="11"          style="square">    <esri:SimpleLineSymbol color="0x000000"/>   </esri:SimpleMarkerSymbol>      <!-- Symbol for Find Result as Polygon -->   <esri:SimpleFillSymbol id="sfsFind"           alpha="0.7"           color="0xFFFF00"/>      <!-- Find Task -->   <esri:FindTask id="findTask"         executeComplete="executeCompleteHandler(event)"         url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer"/>   <esri:FindParameters id="myFindParams"         contains="true"         layerIds="[0,1,2]"         outSpatialReference="{map.spatialReference}"         returnGeometry="true"         searchFields="[FID]"         searchText="{fText.text}"/>  </fx:Declarations>    <s:BorderContainer width="100%" height="40"         backgroundColor="0xDDDDFF">   <s:layout>    <s:HorizontalLayout horizontalAlign="center" verticalAlign="middle"/>   </s:layout>   <s:Label text="Search for FID:"/>   <s:TextInput id="fText"       enter="doFind()"       maxWidth="400"       text="0"/>   <s:Button click="doFind()" label="Find"/>  </s:BorderContainer>    <s:Label id="resultSummary" height="15"/>    <mx:VDividedBox width="100%" height="100%">   <esri:Map id="map">    <esri:extent>     <esri:Extent xmin="-126" ymin="24" xmax="-67" ymax="50">      <esri:SpatialReference wkid="4326"/>     </esri:Extent>    </esri:extent>    <esri:ArcGISDynamicMapServiceLayer url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer"/>    <esri:GraphicsLayer id="myGraphicsLayer"/>   </esri:Map>   <mx:DataGrid width="100%" height="40%"       dataProvider="{findTask.executeLastResult}">    <mx:columns>     <mx:DataGridColumn width="70"            dataField="layerId"            headerText="Layer ID"/>     <mx:DataGridColumn dataField="layerName" headerText="Layer Name"/>     <mx:DataGridColumn dataField="foundFieldName" headerText="Found Field Name"/>     <mx:DataGridColumn dataField="value" headerText="Found Field Value"/>    </mx:columns>   </mx:DataGrid>  </mx:VDividedBox>   </s:Application>


P.S. SDK 4.6, ArcGIS API for FLEX 3.2

View solution in original post

0 Kudos
3 Replies
RhettZufelt
MVP Notable Contributor
In version 3.1 or 3.2 the headercontroller widget has the single line search/locator (seach box in upper right next to about) that can be configured to search multiple layers and fields.

http://resources.arcgis.com/en/help/flex-viewer/concepts/index.html#/Header_Controller_widget_tags/0...


R_
0 Kudos
ab1
by
Deactivated User
Rhett,

Thank you for the answer. But I'm not using Flex Viewer. I'm developing a Flex Web application with the ArcGIS Flex API.

Regards.
0 Kudos
IvanBespalov
Frequent Contributor
in "Find features in Map Layers" example used FindTask.
Set FindParameters -> searchFields="[your id field name]".

<?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"       pageTitle="Find features in Map Layers">    <s:layout>   <s:VerticalLayout horizontalAlign="center"/>  </s:layout>    <fx:Script>   <![CDATA[    import com.esri.ags.Graphic;    import com.esri.ags.events.FindEvent;    import com.esri.ags.geometry.Geometry;        private function doFind():void    {     findTask.execute(myFindParams);    }        private function executeCompleteHandler(event:FindEvent):void    {     myGraphicsLayer.clear();     var graphic:Graphic;     resultSummary.text = "Found " + event.findResults.length + " results.";     var resultCount:int = event.findResults.length;     for (var i:Number = 0; i < resultCount; i++)     {      graphic = event.findResults.feature;      graphic.toolTip = event.findResults.foundFieldName + ": " + event.findResults.value;            switch (graphic.geometry.type)      {       case Geometry.MAPPOINT:       {        graphic.symbol = smsFind;        break;       }       case Geometry.POLYLINE:       {        graphic.symbol = slsFind;        break;       }       case Geometry.POLYGON:       {        graphic.symbol = sfsFind;        break;       }      }      myGraphicsLayer.add(graphic);     }    }   ]]>  </fx:Script>    <fx:Declarations>   <!-- Symbol for Find Result as Polyline -->   <esri:SimpleLineSymbol id="slsFind"           width="3"           alpha="0.9"           color="0xFFFF00"           style="solid"/>      <!-- Symbol for Find Result as Point -->   <esri:SimpleMarkerSymbol id="smsFind"          alpha="0.9"          color="0xFFFF00"          size="11"          style="square">    <esri:SimpleLineSymbol color="0x000000"/>   </esri:SimpleMarkerSymbol>      <!-- Symbol for Find Result as Polygon -->   <esri:SimpleFillSymbol id="sfsFind"           alpha="0.7"           color="0xFFFF00"/>      <!-- Find Task -->   <esri:FindTask id="findTask"         executeComplete="executeCompleteHandler(event)"         url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer"/>   <esri:FindParameters id="myFindParams"         contains="true"         layerIds="[0,1,2]"         outSpatialReference="{map.spatialReference}"         returnGeometry="true"         searchFields="[FID]"         searchText="{fText.text}"/>  </fx:Declarations>    <s:BorderContainer width="100%" height="40"         backgroundColor="0xDDDDFF">   <s:layout>    <s:HorizontalLayout horizontalAlign="center" verticalAlign="middle"/>   </s:layout>   <s:Label text="Search for FID:"/>   <s:TextInput id="fText"       enter="doFind()"       maxWidth="400"       text="0"/>   <s:Button click="doFind()" label="Find"/>  </s:BorderContainer>    <s:Label id="resultSummary" height="15"/>    <mx:VDividedBox width="100%" height="100%">   <esri:Map id="map">    <esri:extent>     <esri:Extent xmin="-126" ymin="24" xmax="-67" ymax="50">      <esri:SpatialReference wkid="4326"/>     </esri:Extent>    </esri:extent>    <esri:ArcGISDynamicMapServiceLayer url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer"/>    <esri:GraphicsLayer id="myGraphicsLayer"/>   </esri:Map>   <mx:DataGrid width="100%" height="40%"       dataProvider="{findTask.executeLastResult}">    <mx:columns>     <mx:DataGridColumn width="70"            dataField="layerId"            headerText="Layer ID"/>     <mx:DataGridColumn dataField="layerName" headerText="Layer Name"/>     <mx:DataGridColumn dataField="foundFieldName" headerText="Found Field Name"/>     <mx:DataGridColumn dataField="value" headerText="Found Field Value"/>    </mx:columns>   </mx:DataGrid>  </mx:VDividedBox>   </s:Application>


P.S. SDK 4.6, ArcGIS API for FLEX 3.2
0 Kudos