Arcgis Engine(ae)接口详解(7):地图(map)操作

本文详细介绍了使用ArcGIS进行地图操作的方法,包括如何获取和设置地图的显示范围、比例尺及单位,以及如何通过代码刷新地图和计算屏幕长度对应的地图实际长度。此外,还提供了获取地图中的所有要素图层及通过真实表名获取特定图层的方法。
            IMap map = null;
            //跟map同一层次的activeView对象,他们都是“地图”的对象,map管理地图内容,activeView管理显示内容
            IActiveView activeView = map as IActiveView;

            //获取当前地图显示范围
            IEnvelope extent = activeView.Extent;
            //设置当前地图显示范围,相当于用代码实现缩放到某个范围
            activeView.Extent = extent;

            //获取地图全图范围
            //地图浏览功能中的全图,他的范围就是这样获取
            IEnvelope fullExtent = activeView.FullExtent;

            //获取地图比例尺,同时可同于设置比例尺
            double mapScale = map.MapScale;

            //获取和设置地图单位
            esriUnits unit = map.MapUnits;
            //获取和设置地图的显示单位
            esriUnits unit2 = map.DistanceUnits;

            //刷新地图
            activeView.Refresh();

            //屏幕长度(单位是像素)转地图实际长度
            double mapLength = MapHelper.PixelsToMapUnits(activeView, 5);

            //获取Map的所有FeatureLayer
            List<IFeatureLayer> lstFeatureLayer = MapHelper.GetAllFeatureLayerInMap(map);

            if (1 == 2)
            {
                //在Map中通过真实表名获取图层,对于sde的表名不能带用户名
                IFeatureLayer featureLayer = MapHelper.GetFeatureLayerByDatasetName(map, "roadLine");


            }

            foreach (IFeatureLayer featureLayer in lstFeatureLayer)
            {
                //图层相关说明

                //IFeatureLayer代表矢量图层,而ILayer代表图层,也是所有类型图层接口都实现了ILayer,因此IFeatureLayer可以as到ILayer
                ILayer layer = featureLayer as ILayer;

                //获取和设置图层的可视状态(就是图层树界面里图层左边的checkbox)
                bool visible = layer.Visible;
                //获取或设置图层名称
                string name = layer.Name;

                //通过图层获取featureClass,是获取featureClass的方法之一。另一种方法是通过workspace获取
                //注意IFeatureLayer和IFeatureClass是两个东西,虽然平时会都叫“图层”。IFeatureClass是指物理表,而IFeatureLayer指物理表加载到地图上形成的图层,前者更多指数据,后者只图层在地图的展示设置,如样式,标注等
                IFeatureClass featureClass = featureLayer.FeatureClass;                
            }

调用过的封装函数代码如下

        public static double PixelsToMapUnits(IActiveView activeView, double pixelLength)
        {
            tagRECT tagRect = activeView.ScreenDisplay.DisplayTransformation.get_DeviceFrame();
            int width = tagRect.right - tagRect.left;

            if (width < 0.00001) return pixelLength;
            double scale = activeView.ScreenDisplay.DisplayTransformation.VisibleBounds.Width / width;

            return (pixelLength * scale);
        }

        public static List<IFeatureLayer> GetAllFeatureLayerInMap(IMap map)
        {
            List<IFeatureLayer> result = new List<IFeatureLayer>();

            UID uid = new UIDClass();
            uid.Value = "{40A9E885-5533-11d0-98BE-00805F7CED21}";    //FeatureLayer
            IEnumLayer enumLayer = map.get_Layers(uid, true);
            //对图层转换版本
            ILayer layer = null;
            while ((layer = enumLayer.Next()) != null)
            {
                IFeatureLayer featureLayer = layer as IFeatureLayer;
                result.Add(featureLayer);
            }

            return result;
        }

        public static IFeatureLayer GetFeatureLayerByDatasetName(IMap map, string tableName)
        {
            List<IFeatureLayer> lstFeatureLayer = GetAllFeatureLayerInMap(map);

            foreach (IFeatureLayer featureLayer in lstFeatureLayer)
            {
                if (featureLayer.FeatureClass != null)
                {
                    string featureClassName = FeatureClassHelper.GetDatasetNameWithOutSDEUser(featureLayer.FeatureClass as IDataset);
                    if (string.Equals(featureClassName, tableName, StringComparison.OrdinalIgnoreCase))
                    {
                        return featureLayer;
                    }
                }
            }

            return null;
        }

        public static string GetDatasetNameWithOutSDEUser(IDataset dataset)
        {
            if (dataset == null) return "";

            string tDatasetName = dataset.Name;
            if (tDatasetName.Contains("."))
            {
                tDatasetName = tDatasetName.Substring(tDatasetName.LastIndexOf(".") + 1);
            }

            return tDatasetName;
        }

 

转载于:https://my.oschina.net/u/1251858/blog/1549014

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值