大致分为三步
- 获得点击位置的坐标
- 根据坐标生成缓冲区
- 查询与缓冲区相交的要素
在AxMapControl的点击事件获得点击位置并转换为坐标
IPoint point = axMapControl1.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(MousePosition.X, MousePosition.Y);
获得查询的目标图层
ILayer pLayer = axMapControl1.get_Layer(5);
执行查询操作
List<IFeature> pFeaturesList = getPointSelect(point, pLayer as IFeatureLayer, 2);
根据点击位置进行查询的函数
private List<IFeature> getPointSelect(IPoint pPoint,IFeatureLayer pFeatureLayer,double pRadius)
{
List<IFeature> pSelectedFeatureList = new List<IFeature>(); //返回要素类
ITopologicalOperator pTop = pPoint as ITopologicalOperator;
IGeometry pGeometry = pTop.Buffer(pRadius); //建立缓冲区
ISpatialFilter pSpatialFilter = new SpatialFilterClass(); //空间查询模块
pSpatialFilter.Geometry = pGeometry; //查询内容
pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; //求交
IFeatureCursor pFeatureCursor = pFeatureLayer.FeatureClass.Search(pSpatialFilter, false);
IFeature pFeature = pFeatureCursor.NextFeature();
while (pFeature != null)
{
pSelectedFeatureList.Add(pFeature);
pFeature = pFeatureCursor.NextFeature();
}
return pSelectedFeatureList;
}