Identifying features using the Common Data Source API
Each feature layer is identified to determine if it contains features that intersect a point at –110, 35 decimal degrees. A buffer tolerance is also provided (3 pixels) to account for user-error when using the identify operation with a map.
The buffer tolerance is converted to map units using map image size and extent. The map resource type is non-specific; therefore, any data source that supports queries can be used (for example, ArcIMS or ArcGIS for Server).
An initial test for query support is included. The results for the Identify method are returned in an array of standard .NET DataTables (System.Data.DataTable). Each queryable layer (referenced via the layerIDs string array) that contains features intersecting the identify tolerance is included as a DataTable in the DataTable array.
See the following code example:
[C#]
foreach (ESRI.ArcGIS.ADF.Web.DataSources.IGISFunctionality gisFunctionality in
Map1.GetFunctionalities())
{
ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gisResource =
gisFunctionality.Resource;
bool supported = gisResource.SupportsFunctionality(typeof
(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality));
if (supported)
{
ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality queryFunctionality =
(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)
gisResource.CreateFunctionality(typeof
(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), null);
string[] layerIDs = null;
string[] layerNames = null;
queryFunctionality.GetQueryableLayers(null, out layerIDs, out layerNames);
ESRI.ArcGIS.ADF.Web.Geometry.Point adfPoint = new
ESRI.ArcGIS.ADF.Web.Geometry.Point( - 110, 35);
int pixelTolerance = 3;
System.Data.DataTable[] identifyResultsDataTableArray =
queryFunctionality.Identify(gisFunctionality.Name, adfPoint,
pixelTolerance, ESRI.ArcGIS.ADF.Web.IdentifyOption.AllLayers, layerIDs);
}
}
[VB.NET]
For Each gisFunctionality As ESRI.ArcGIS.ADF.Web.DataSources.IGISFunctionality In Map1.GetFunctionalities()
Dim gisResource As ESRI.ArcGIS.ADF.Web.DataSources.IGISResource = gisFunctionality.Resource
Dim supported As Boolean = gisResource.SupportsFunctionality(GetType(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality))
If supported Then
Dim queryFunctionality As ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality = CType(gisResource.CreateFunctionality (GetType(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), Nothing), ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)
Dim layerIDs As String() = Nothing
Dim layerNames As String() = Nothing
queryFunctionality.GetQueryableLayers(Nothing, layerIDs, layerNames)
Dim adfPoint As ESRI.ArcGIS.ADF.Web.Geometry.Point = New ESRI.ArcGIS.ADF.Web.Geometry.Point( -110, 35)
Dim pixelTolerance As Integer = 3
Dim identifyResultsDataTableArray As System.Data.DataTable() = queryFunctionality.Identify(gisFunctionality.Name, adfPoint, pixelTolerance, ESRI.ArcGIS.ADF.Web.IdentifyOption.AllLayers, layerIDs)
End If
Next gisFunctionality