This document is archived and information here might be outdated. Recommended version. |
ArcObjects Help for .NET developers > ESRI.ArcGIS.Snippets > Snippets > Get All Features from Point Search in GeoFeatureLayer Snippet (ArcObjects .NET 10.4 SDK) |
Finds all the features in a GeoFeature layer by supplying a point. The point could come from a mouse click on the map.
///<summary>Finds all the features in a GeoFeature layer by supplying a point. The point could come from a mouse click on 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 IFeatureCursor interface is returned containing all the selected features found in the GeoFeatureLayer.</returns> /// ///<remarks></remarks> public ESRI.ArcGIS.Geodatabase.IFeatureCursor GetAllFeaturesFromPointSearchInGeoFeatureLayer(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); return featureCursor; }
'''<summary>Finds all the features in a GeoFeature layer by supplying a point. The point could come from a mouse click on 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 IFeatureCursor interface is returned containing all the selected features found in the GeoFeatureLayer.</returns> ''' '''<remarks></remarks> Public Function GetAllFeaturesFromPointSearchInGeoFeatureLayer(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.IFeatureCursor 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) Return featureCursor End Function