C#开发ArcGIS Engine根据坐标提取对应区的属性(点选查询)

来源:互联网 发布:苹果手机短信恢复软件 编辑:程序博客网 时间:2024/05/06 15:25
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;        }
原创粉丝点击