private double ConvertPixelsToMapUnits(IActiveView pActiveView, doublepixelUnits)
{//Uses the ratio of the size of the map in pixels to map units to do the conversion
IPoint p1 =pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.UpperLeft;
IPoint p2=pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.UpperRight;intx1, x2, y1, y2;
pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(p1,out x1, outy1);
pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(p2,out x2, outy2);double pixelExtent = x2 -x1;double realWorldDisplayExtent =pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.Width;double sizeOfOnePixel = realWorldDisplayExtent /pixelExtent;return pixelUnits *sizeOfOnePixel;
}
IMap pMap=axMapControl1.Map;
IActiveView pActiveView= pMap asIActiveView;
IFeatureLayer pFeatureLayer= pMap.get_Layer(0) asIFeatureLayer;
IFeatureClass pFeatureClass=pFeatureLayer.FeatureClass;//设置点击点的位置
IPoint point =pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);
ITopologicalOperator pTOpo= point asITopologicalOperator;doublelength;
length= ConvertPixelsToMapUnits(pActiveView, 4);
IGeometry pBuffer=pTOpo.Buffer(length);
IGeometry pGeomentry=pBuffer.Envelope;//空间滤过器
ISpatialFilter pSpatialFilter = newSpatialFilterClass();
pSpatialFilter.Geometry=pGeomentry;//根据被选择要素的不同,设置不同的空间滤过关系
switch(pFeatureClass.ShapeType)
{caseesriGeometryType.esriGeometryPoint:
pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelContains;break;caseesriGeometryType.esriGeometryPolyline:
pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelCrosses;break;caseesriGeometryType.esriGeometryPolygon :
pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelIntersects;break;
}
IFeatureSelection pFSelection=pFeatureLayer asIFeatureSelection;
pFSelection.SelectFeatures(pSpatialFilter,esriSelectionResultEnum.esriSelectionResultNew,false);
ISelectionSet pSelectionset=pFSelection.SelectionSet;
ICursor pCursor;
pSelectionset.Search(null,true,outpCursor);
IFeatureCursor pFeatCursor=pCursor asIFeatureCursor;
IFeature pFeature=pFeatCursor.NextFeature();while(pFeature!=null)
{
pMap.SelectFeature(pFeatureLayer,pFeature);
pFeature=pFeatCursor.NextFeature();
}
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphicSelection,null,null);//另外的改写:
pSpatialFilter.GeometryField =pFeatureClass.ShapeFieldName;
IQueryFilter pFilter=pSpatialFilter;
IFeatureCursor pFeatCursor= pFeatureLayer.Search(pFilter,false);
IFeature pFeature=pFeatCursor.NextFeature();while(pFeature!=null)
{
pMap.SelectFeature(pFeatureLayer,pFeature); pFeature=pFeatCursor.NextFeature();
} pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphicSelection,null,null);