Map service Find method
Searches the attributes of one or more layers in a data frame, in a map service for a given search string.
Find (MapDescription MapDescription, ImageDisplay MapImageDisplay, string SearchString, bool Contains, string SearchFields, esriFindOption FindOption, int[] LayerIDs)
Parameter |
Description |
---|---|
MapDescription |
Used to define the map extent and visibility of layers. |
ImageDisplay |
Used to determine whether layers are visible or not based on the current map scale. |
SearchString |
The string value searched for during the find process. |
Contains |
Whether the attribute value contains the search string (true) or is an exact match (false). If true, the search is not case sensitive. If false, the search is case sensitive. |
SearchFields |
A comma delimited list of field names used during the search. If empty or null, all fields are searched. |
FindOption |
An enumeration is used to define whether all layers or only visible layers are searched. |
LayerIDs |
An array of layers ids for layers to search. If empty or null, all layers can be searched. |
Return Value
An array of MapServerFindResult objects, one for each record that contains a match. If multiple fields in the same record match the search string, only one MapServerFindResult referencing the first matched field is returned.
Remarks
There are two key differences between the Find and the Map Service methods QueryFeatureCount, QueryFeatureCount2, QueryFeatureIDs, QueryFeatureIDs2, QueryFeatureData, and QueryFeatureData2:
- Find can work with multiple layers while the query methods work with a single layer.
- Find only requires a search string, whereas the query methods use a QueryFilter. This allows query methods to utilize either an attribute filter (SQL expression) or a spatial filter.
Layer visibility depends on whether the layer is on or off (the Visible property on a layers LayerDescription) or whether the layer is on, but not visible due to scale dependencies. Each layer maintains a LayerDescription available via the MapDescription. LayerDescriptions array. Scale dependency for a layer is available via the MinScale and MaxScale properties on MapLayerInfo, available via the MapServerInfo. MapLayerInfos array. The ImageDisplay parameter is used to determine layer visibility based on scale dependencies.
The amount of information (e.g. number of MapServerFindResult objects) returned from a call to the Find method may be restricted by the map service. The default maximum value for the number of results returned from a call to the Find method is 500. If 600 records are matched, only the first 500 results will be returned. The maximum number of results cannot be changed via the ArcGIS Server SOAP API. The map service itself must be configured to return more results, if necessary. If the maximum result limit has been reached, a technique to iterate through blocks of results is presented in the QueryFeatureIDs method remarks.
Examples
C#
MapService_MapServer mapservice = new MapService_MapServer();
mapservice.Url = "http://localhost:6080/arcgis/services/MapService/MapServer";
MapServerInfo mapinfo = mapservice.GetServerInfo(mapservice.GetDefaultMapName());
MapDescription mapdesc = mapinfo.DefaultMapDescription;
ImageDisplay imgdisp = new ImageDisplay();
imgdisp.ImageHeight = 500; //pixels
imgdisp.ImageWidth = 500; //pixels
imgdisp.ImageDPI = 96;
string searchstring = "Washington";
bool contains_searchstring = true;
string fieldname = string.Empty; // all fields
esriFindOption findoption = esriFindOption.esriFindAllLayers;
LayerDescription[] layerdescriptions = mapdesc.LayerDescriptions;
int[] layerids = new int[layerdescriptions.Length];
int i = 0;
foreach (LayerDescription layerdesc in layerdescriptions)
{
style="font-size: 12pt;">layerids.SetValue(layerdesc.LayerID, i++);
}
MapServerFindResult[] findresults = mapservice.Find(mapdesc, imgdisp, searchstring, contains_searchstring, fieldname, findoption, layerids);
VB.NET
Dim mapservice As MapService_MapServer = New MapService_MapServer(
mapservice.Url = "http://localhost:6080/arcgis/services/MapService/MapServer"
Dim mapinfo As MapServerInfo = mapservice.GetServerInfo(mapservice.GetDefaultMapName())
Dim mapdesc As MapDescription = mapinfo.DefaultMapDescription
Dim imgdisp As ImageDisplay = New ImageDisplay()
imgdisp.ImageHeight = 500 'pixels
imgdisp.ImageWidth = 500 'pixels
imgdisp.ImageDPI = 96
Dim searchstring As String = "Washington"
Dim contains_searchstring As Boolean = True
Dim fieldname As String = String.Empty ' all fields
Dim findoption As esriFindOption = esriFindOption.esriFindAllLayers
Dim layerdescriptions() As LayerDescription = mapdesc.LayerDescriptions
Dim layerids(layerdescriptions.Length-1) As Integer
Dim i As Integer = 0
Dim layerdesc As LayerDescription
For Each layerdesc In layerdescriptions
layerids.SetValue(layerdesc.LayerID, i)
i = i + 1
Next
Dim findresults As MapServerFindResult() = mapservice.Find(mapdesc, imgdisp, searchstring, contains_searchstring, fieldname, findoption, layerids)
Java
String serviceURL = "http://localhost:6080/arcgis/services/MapService/MapServer";
MapServerBindingStub mapService = new MapServerBindingStub(serviceURL);
String mapName = mapService.getDefaultMapName();
MapServerInfo mapInfo = mapService.getServerInfo(mapName);
MapDescription mapDesc = mapInfo.getDefaultMapDescription();
ImageDisplay imgDisp = new ImageDisplay();
imgDisp.setImageHeight(500); //Height of the image in pixels
imgDisp.setImageWidth(500); //Width of the image in pixels
imgDisp.setImageDPI(96);
String searchString = "Washington";
boolean containsSearchString = true;
String fieldName = ""; // all fields
EsriFindOption findOption = EsriFindOption.esriFindAllLayers;
LayerDescription[] layerDescriptions = mapDesc.getLayerDescriptions();
int[] layerIDs = new int[layerDescriptions.length];
for (int i=0; i< layerDescriptions.length; i++){
layerIDs[i] = layerDescriptions[i].getLayerID();
}
MapServerFindResult[] findResults = mapService.find(mapDesc, imgDisp, searchString, containsSearchString, fieldName, findOption, layerIDs);
System.out.println("Result Count: " + findresults.length);