AE 点选查询 IMap pMap = axMapControl1.Map; IActiveView pActiveView = pMap as IActiveView; IFeatureLayer pFeatureLayer = pMap.get_Layer(0) as IFeatureLayer; IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass; //设置点击点的位置 IPoint point = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y); ITopologicalOperator pTOpo = point as ITopologicalOperator; double length; length = ConvertPixelsToMapUnits(pActiveView, 4); IGeometry pBuffer = pTOpo.Buffer(length); IGeometry pGeomentry = pBuffer.Envelope; //空间滤过器 ISpatialFilter pSpatialFilter = new SpatialFilter(); pSpatialFilter.Geometry = pGeomentry; //根据被选择要素的不同,设置不同的空间滤过关系 switch (pFeatureClass.ShapeType) { case esriGeometryType.esriGeometryPoint: pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains; break; case esriGeometryType.esriGeometryPolyline: pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelCrosses; break; case esriGeometryType.esriGeometryPolygon: pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; break; } IFeatureSelection pFSelection = pFeatureLayer as IFeatureSelection; pFSelection.SelectFeatures(pSpatialFilter, esriSelectionResultEnum.esriSelectionResultNew, false); ISelectionSet pSelectionset = pFSelection.SelectionSet; ICursor pCursor; pSelectionset.Search(null, true, out pCursor); IFeatureCursor pFeatCursor = pCursor as IFeatureCursor; IFeature pFeature = pFeatCursor.NextFeature(); while (pFeature != null) { pMap.SelectFeature(pFeatureLayer, pFeature); pFeature = pFeatCursor.NextFeature(); pFeture.get_value("");//在这里你可以写上想要获取的属性的字段 } pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphicSelection, null, null); 上述的自定义函数是将距离的转换 private double ConvertPixelsToMapUnits(IActiveView pActiveView, double pixelUnits) { // 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; int x1, x2, y1, y2; pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(p1, out x1, out y1); pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(p2, out x2, out y2); double pixelExtent = x2 - x1; double realWorldDisplayExtent = pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.Width; double sizeOfOnePixel = realWorldDisplayExtent / pixelExtent; return pixelUnits * sizeOfOnePixel; }
C#开发ArcGIS Engine根据坐标提取对应区的属性(点选查询)
最新推荐文章于 2021-12-03 17:29:05 发布