Finds the first feature in a GeoFeature layer by supplying an point. The point could come from a mouse click in the map.
[C#]
///<summary>Finds the first feature in a GeoFeature layer by supplying an point. The point could come from a mouse click in the map.</summary>
///
///<param name="searchTolerance">A System.Double that is the number of map units to search. Example: 25</param>
///<param name="point">An IPoint interface in map units where the user clicked on the map</param>
///<param name="geoFeatureLayer">An ILayer interface to search upon</param>
///<param name="activeView">An IActiveView interface</param>
///
///<returns>An IFeature interface that is the first feature found in the GeoFeatureLayer.</returns>
///
///<remarks></remarks>
public ESRI.ArcGIS.Geodatabase.IFeature GetFirstFeatureFromPointSearchInGeoFeatureLayer(System.Double searchTolerance, ESRI.ArcGIS.Geometry.IPoint point, ESRI.ArcGIS.Carto.IGeoFeatureLayer geoFeatureLayer, ESRI.ArcGIS.Carto.IActiveView activeView)
{
if (searchTolerance < 0 || point == null || geoFeatureLayer == null || activeView == null)
{
return null;
}
ESRI.ArcGIS.Carto.IMap map = activeView.FocusMap;
// Expand the points envelope to give better search results
ESRI.ArcGIS.Geometry.IEnvelope envelope = point.Envelope;
envelope.Expand(searchTolerance, searchTolerance, false);
ESRI.ArcGIS.Geodatabase.IFeatureClass featureClass = geoFeatureLayer.FeatureClass;
System.String shapeFieldName = featureClass.ShapeFieldName;
// Create a new spatial filter and use the new envelope as the geometry
ESRI.ArcGIS.Geodatabase.ISpatialFilter spatialFilter = new ESRI.ArcGIS.Geodatabase.SpatialFilterClass();
spatialFilter.Geometry = envelope;
spatialFilter.SpatialRel = ESRI.ArcGIS.Geodatabase.esriSpatialRelEnum.esriSpatialRelEnvelopeIntersects;
spatialFilter.set_OutputSpatialReference(shapeFieldName, map.SpatialReference);
spatialFilter.GeometryField = shapeFieldName;
// Do the search
ESRI.ArcGIS.Geodatabase.IFeatureCursor featureCursor = featureClass.Search(spatialFilter, false);
// Get the first feature
ESRI.ArcGIS.Geodatabase.IFeature feature = featureCursor.NextFeature();
if (!(feature == null))
{
return feature;
}
else
{
return null;
}
}
[Visual Basic .NET]
'''<summary>Finds the first feature in a GeoFeature layer by supplying an point. The point could come from a mouse click in the map.</summary>
'''
'''<param name="searchTolerance">A System.Double that is the number of map units to search. Example: 25</param>
'''<param name="point">An IPoint interface in map units where the user clicked on the map</param>
'''<param name="geoFeatureLayer">An ILayer interface to search upon</param>
'''<param name="activeView">An IActiveView interface</param>
'''
'''<returns>An IFeature interface that is the first feature found in the GeoFeatureLayer.</returns>
'''
'''<remarks></remarks>
Public Function GetFirstFeatureFromPointSearchInGeoFeatureLayer(ByVal searchTolerance As System.Double, ByVal point As ESRI.ArcGIS.Geometry.IPoint, ByVal geoFeatureLayer As ESRI.ArcGIS.Carto.IGeoFeatureLayer, ByVal activeView As ESRI.ArcGIS.Carto.IActiveView) As ESRI.ArcGIS.Geodatabase.IFeature
If searchTolerance < 0 OrElse point Is Nothing OrElse geoFeatureLayer Is Nothing OrElse activeView Is Nothing Then
Return Nothing
End If
Dim map As ESRI.ArcGIS.Carto.IMap = activeView.FocusMap
' Expand the points envelope to give better search results
Dim envelope As ESRI.ArcGIS.Geometry.IEnvelope = point.Envelope
envelope.Expand(searchTolerance, searchTolerance, False)
Dim featureClass As ESRI.ArcGIS.Geodatabase.IFeatureClass = geoFeatureLayer.FeatureClass
Dim shapeFieldName As System.String = featureClass.ShapeFieldName
' Create a new spatial filter and use the new envelope as the geometry
Dim spatialFilter As ESRI.ArcGIS.Geodatabase.ISpatialFilter = New ESRI.ArcGIS.Geodatabase.SpatialFilterClass
spatialFilter.Geometry = envelope
spatialFilter.SpatialRel = ESRI.ArcGIS.Geodatabase.esriSpatialRelEnum.esriSpatialRelEnvelopeIntersects
spatialFilter.OutputSpatialReference(shapeFieldName) = map.SpatialReference
spatialFilter.GeometryField = shapeFieldName
' Do the search
Dim featureCursor As ESRI.ArcGIS.Geodatabase.IFeatureCursor = featureClass.Search(spatialFilter, False)
' Get the first feature
Dim feature As ESRI.ArcGIS.Geodatabase.IFeature = featureCursor.NextFeature
If Not (feature Is Nothing) Then
Return feature
Else
Return Nothing
End If
End Function