public IFeature GetFeatureOnMouseDown(IPoint point) { try { ILayer layer = Common.GetLayerByName(mMap, "地塊"); if (layer == null) { MessageBox.Show("請加載地塊圖層!", "提示"); return null; } //IFeatureLayer fLayer = layer as IFeatureLayer; //IFeatureSelection featureSelection = fLayer as IFeatureSelection; //featureSelection.Clear(); //if (featureSelection == null) //{ // return null; //}
IFeatureLayer featureLayer = layer as IFeatureLayer; if (featureLayer == null) return null; IFeatureClass featureClass = featureLayer.FeatureClass; if (featureClass == null) return null; //IPoint point = axMapControl1.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y);
IGeometry geometry = point as IGeometry; double length = ConvertPixelsToMapUnits(axMapControl1.ActiveView, 4); ITopologicalOperator pTopo = geometry as ITopologicalOperator; IGeometry buffer = pTopo.Buffer(length); geometry = buffer.Envelope as IGeometry; ISpatialFilter spatialFilter = new SpatialFilterClass(); spatialFilter.Geometry = geometry; switch (featureClass.ShapeType) { case esriGeometryType.esriGeometryPoint: spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains; break; case esriGeometryType.esriGeometryPolygon: spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; break; case esriGeometryType.esriGeometryPolyline: spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelCrosses; break; } spatialFilter.GeometryField = featureClass.ShapeFieldName; IQueryFilter filter = spatialFilter as IQueryFilter; IFeatureCursor cursor = featureClass.Search(filter, false); IFeature pfeature = cursor.NextFeature(); if (pfeature != null) { return pfeature; //featureSelection.Add(pfeature); //pfeature = cursor.NextFeature();
} else { return null; } } catch { return null; } }
大家可以修改一下我的代碼,圖層改成你需要的圖層即可。也可以寫成類。只是寫成類的話,變量可能會多一點。
if (pfeature != null) { return pfeature; //featureSelection.Add(pfeature); //pfeature = cursor.NextFeature();
}
此處也可以將if改成while,如果選擇的是多個要素的話。將我注釋掉的代碼打開即可選擇多個要素。