C#:MapControl基本操作代码整理

摘要:
“+ex.Message);}}///<summary˃///添加LYR文件//////<paramname=”mapControl“˃publicstatic void AddLayerFile{OpenFileDialogopenfileDlg=newOpenFileDialog();openfileDll.Title=”Add LYR layer file“;openfileDlg.Filter=”mapdocuments|*.LYR“;openfileDlg.ShowDialog(;return;}尝试{mapControl.AddLayerFromFile;//将mapControl的显示范围设置为数据mapControl.Extent=mapControl.FullExtent;}的全局范围捕获{MessageBox.Show(“未能添加层文件!”+例如消息);}//////将底层移动到顶层////publicstaticvoidMoveLayerToTop{try{if{mapControl.MoveLayerTo;}}捕获{MessageBox.Show(“未能移动层!

整理了 MapConrol各基本功能的实现代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;

using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geodatabase;
 
namespace MapCtrol    //直接引用时需替换成自己当前的命名空间
{
    public class MapBaseOperate
    {
        /// <summary>
        /// 添加SHP文当
        /// </summary>
        /// <param name="mapControl"></param>
        public static void AddShapeFile(IMapControlDefault mapControl)
        {
            OpenFileDialog openfileDlg = new OpenFileDialog();
            openfileDlg.Title = "添加shp图层文件";
            openfileDlg.Filter = "map document (*.shp)|*.shp";
            openfileDlg.ShowDialog();
            string filepath = openfileDlg.FileName;

            bool exist = File.Exists(filepath);
            if (!exist)
            {
                MessageBox.Show("路径不存在!");
                return;
            }

            string path;
            string filename;
            //int istart = filepath.LastIndexOf("\");
            //int iend = filepath.LastIndexOf(".");
            //path = filepath.Substring(0, istart);
            //filename = filepath.Substring(istart + 1, iend - istart - 1);

            FileInfo fileinfo = new FileInfo(filepath);
            path = filepath.Substring(0, filepath.Length - fileinfo.Name.Length);
            filename = fileinfo.Name;
            try
            {
                //加载图层文件
                mapControl.AddShapeFile(path, filename);

                //设置MapControl的显示范围到数据的全局范围
                mapControl.Extent = mapControl.FullExtent;
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("添加图层文件失败!" + ex.Message);
            }
            
        }

        /// <summary>
        /// 添加LYR文当
        /// </summary>
        /// <param name="mapControl"></param>
        public static void AddLayerFile(IMapControlDefault mapControl)
        {
            OpenFileDialog openfileDlg = new OpenFileDialog();
            openfileDlg.Title = "添加lyr图层文件";
            openfileDlg.Filter = "map documents (*.lyr)|*.lyr";
            openfileDlg.ShowDialog();
            string filepath = openfileDlg.FileName;

            bool exist = File.Exists(filepath);
            if (!exist)
            {
                MessageBox.Show("路径不存在!");
                return;
            }
            try
            {
                mapControl.AddLayerFromFile(filepath);

                //设置MapControl的显示范围到数据的全局范围
                mapControl.Extent = mapControl.FullExtent;
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("添加图层文件失败!" + ex.Message);
            }
        }

        /// <summary>
        /// 删除地图所有图层
        /// </summary>
        public static void DeleteAllLayers(IMapControlDefault mapControl)
        {
            try
            {
                for (int i = mapControl.LayerCount - 1; i >= 0; i-- )
                {
                    mapControl.DeleteLayer(i);
                }
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("删除图层失败!" + ex.Message);
            }
        }

        /// <summary>
        /// 将最底图层,移动到最上层
        /// </summary>
        public static void MoveLayerToTop(IMapControlDefault mapControl)
        {
            
            try
            {
                if (mapControl.LayerCount > 0)
                {
                    mapControl.MoveLayerTo(mapControl.LayerCount - 1, 0);
                }
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("移动图层失败!" + ex.Message);
            }
        }

        /// <summary>
        /// 加载地图文当
        /// </summary>
        /// <param name="mapControl"></param>
        public static void LoadMapDocument(IMapControlDefault mapControl)
        {
            OpenFileDialog openfileDlg = new OpenFileDialog();
            openfileDlg.Title = "加载地图文当";
            openfileDlg.Filter = "map document (*.mxd)|*.mxd";
            openfileDlg.ShowDialog();
            string filepath = openfileDlg.FileName;
            if (mapControl.CheckMxFile(filepath))
            {
                mapControl.MousePointer = esriControlsMousePointer.esriPointerHourglass;
                mapControl.LoadMxFile(filepath, 0, Type.Missing);
                mapControl.MousePointer = esriControlsMousePointer.esriPointerDefault;
            }
            else
            {
                MessageBox.Show(filepath + "不是有效的地图文当!");
            }
        }

        /// <summary>
        /// 加载特定地图文当
        /// </summary>
        /// <param name="mapControl"></param>
        public static void LoadSpecificMapDocument(IMapControlDefault mapControl, string specificMapName)
        {
            OpenFileDialog openfileDlg = new OpenFileDialog();
            openfileDlg.Title = "加载特定地图文当";
            openfileDlg.Filter = "map document (*.mxd)|*.mxd";
            openfileDlg.ShowDialog();
            string filepath = openfileDlg.FileName;

            if (mapControl.CheckMxFile(filepath))
            {
                if (string.IsNullOrWhiteSpace(specificMapName))
                {
                    int istart = filepath.LastIndexOf("\");
                    int iend = filepath.LastIndexOf(".");
                    specificMapName = filepath.Substring(istart + 1, iend - istart - 1);
                }

                IArray arrayMap = mapControl.ReadMxMaps(filepath, Type.Missing);
                for (int i = 0; i < arrayMap.Count; i++)
                {
                    IMap map = arrayMap.get_Element(i) as IMap;
                    if (specificMapName == map.Name)
                    {
                        mapControl.MousePointer = esriControlsMousePointer.esriPointerHourglass;
                        mapControl.LoadMxFile(filepath, 0, Type.Missing);
                        mapControl.MousePointer = esriControlsMousePointer.esriPointerDefault;
                        break;
                    }
                }
            }
            else
            {
                MessageBox.Show(filepath + "不是有效的地图文当!");
            }
        }

        /// <summary>
        /// By MapDocument
        /// </summary>
        public static IMapDocument LoadMapDoc(IMapControlDefault mapControl)
        {
            MapDocument mapdoc = new MapDocument();

            try
            {
                OpenFileDialog openfileDlg = new OpenFileDialog();
                openfileDlg.Title = "加载地图文当";
                openfileDlg.Filter = "map document (*.mxd)|*.mxd";
                openfileDlg.ShowDialog();
                string filepath = openfileDlg.FileName;

                mapdoc.Open(filepath, "");

                for (int i = 0; i < mapdoc.MapCount; i++ )
                {
                    mapControl.Map = mapdoc.get_Map(i);
                }
                mapControl.Refresh();
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("加载地图文当失败" + ex.Message);
                mapdoc = null;
            }
            return mapdoc;

        }

        /// <summary>
        /// By MapDocument
        /// </summary>
        /// <param name="mapDoc"></param>
        public static void SaveMapDoc(IMapDocument mapDoc)
        {
            if (null == mapDoc)
            {
                MessageBox.Show("保存地图文档失败!");
                return;
            }

            if (mapDoc.get_IsReadOnly(mapDoc.DocumentFilename) == true)
            {
                MessageBox.Show("文档只读无法保存!");
            }
            
            try
            {
                mapDoc.Save(mapDoc.UsesRelativePaths,true);
                MessageBox.Show("保存地图文档成功!");

            }
            catch (System.Exception ex)
            {
                 MessageBox.Show("保存地图文档失败!" + ex.Message);
            }

        }

        /// <summary>
        /// By MapDocument
        /// </summary>
        /// <param name="mapDoc"></param>
        public static void SaveAsMapDoc(IMapDocument mapDoc)
        {
            if (null == mapDoc)
            {
                MessageBox.Show("保存地图文档失败!");
                return;
            }

            if (mapDoc.get_IsReadOnly(mapDoc.DocumentFilename) == true)
            {
                MessageBox.Show("文档只读无法保存!");
            }
            
            SaveFileDialog savefiledlg = new SaveFileDialog();
            savefiledlg.Title = "保存地图文当";
            savefiledlg.Filter = "map document (*.mxd)|*.mxd";
            savefiledlg.ShowDialog();
            string filepath = savefiledlg.FileName;
            try
            {
                mapDoc.SaveAs(filepath,mapDoc.UsesRelativePaths,true);
                MessageBox.Show("保存地图文档成功!");

            }
            catch (System.Exception ex)
            {
                 MessageBox.Show("保存地图文档失败!" + ex.Message);
            }

        }

        /// <summary>
        /// 缩小
        /// </summary>
        /// <param name="mapControl"></param>
        public static void ZoomOut(IMapControlDefault mapControl)
        {
            try
            {
               mapControl.MousePointer = esriControlsMousePointer.esriPointerPageZoomOut;
              //IEnvelope ipEnv = mapControl.TrackRectangle();
              IEnvelope ipEnv = mapControl.Extent;
              ipEnv.Expand(2, 2, true);
              mapControl.Extent = ipEnv;

} catch (System.Exception ex) { MessageBox.Show("缩小失败!" + ex.Message); } } /// <summary> /// 放大 /// </summary> /// <param name="mapControl"></param> public static void ZoomIn(IMapControlDefault mapControl) { try { mapControl.MousePointer = esriControlsMousePointer.esriPointerPageZoomIn;
              IEnvelope ipEnv = mapControl.TrackRectangle();
              if (ipEnv.IsEmpty)
              {
                  ipEnv = mapControl.Extent;
                  ipEnv.Expand(0.5, 0.5, true);
              }
              mapControl.Extent = ipEnv;
                   } catch (System.Exception ex) { MessageBox.Show("放大失败!" + ex.Message); } } /// <summary> /// 漫游 /// </summary> /// <param name="mapControl"></param> public static void Pan(IMapControlDefault mapControl) { try { mapControl.MousePointer = esriControlsMousePointer.esriPointerPagePan; //IEnvelope ipEnv = mapControl.Extent; mapControl.Pan(); } catch (System.Exception ex) { MessageBox.Show("漫游失败!" + ex.Message); } } /// <summary> /// 全图 /// </summary> /// <param name="mapControl"></param> public static void FullExtent(IMapControlDefault mapControl) { try { mapControl.Extent = mapControl.FullExtent; } catch (System.Exception ex) { MessageBox.Show("全图失败!" + ex.Message); } } /// <summary> /// 写文字(待优化) /// </summary> /// <param name="mapControl"></param> /// <param name="pGeom"></param> /// <param name="pColor"></param> /// <param name="text"></param> public static void DrawMapText(IMapControlDefault mapControl, IGeometry pGeom, IRgbColor pColor, string text) { try { if (null == pColor) { pColor = new RgbColorClass(); pColor.Red = 255; pColor.Green = 0; pColor.Blue = 0; } ITextSymbol textsymbol = new TextSymbolClass(); textsymbol.Color = pColor; if (null == text) { text = "Draw Text"; } textsymbol.Text = "Text"; object symbol = textsymbol; mapControl.DrawText(pGeom, text, ref symbol); } catch (System.Exception ex) { MessageBox.Show("写文字失败!" + ex); } } /// <summary> /// 画图 /// </summary> /// <param name="mapControl"></param> /// <param name="pGeom"></param> /// <param name="pColor"></param> /// <param name="width"></param> public static void DrawMapShape(IMapControlDefault mapControl, IGeometry pGeom, IRgbColor pColor, int width) { try { if (null == pColor) { pColor = new RgbColorClass(); pColor.Red = 255; pColor.Green = 255; pColor.Blue = 0; } if (width < 1 || width > 20) { width = 5; } object symbol = null; if (pGeom.GeometryType == esriGeometryType.esriGeometryPolyline) { ISimpleLineSymbol simpleLine = new SimpleLineSymbolClass(); simpleLine.Color = pColor; simpleLine.Width = width; symbol = simpleLine; } else { ISimpleFillSymbol simpleFill = new SimpleFillSymbolClass(); simpleFill.Color = pColor; symbol = simpleFill; } mapControl.DrawShape(pGeom, ref symbol); } catch (System.Exception ex) { MessageBox.Show("画图失败!" + ex); } } /// <summary> /// 颜色 /// </summary> /// <param name="r"></param> /// <param name="g"></param> /// <param name="b"></param> /// <param name="t"></param> /// <returns></returns> public static IRgbColor GetColor(int r, int g, int b, int t) { IRgbColor rgbcolor = new RgbColorClass(); rgbcolor.Red = r; rgbcolor.Green = g; rgbcolor.Blue = b; rgbcolor.Transparency = (byte)t; return rgbcolor; } /// <summary> /// 框选指定区域(鹰眼功能) /// </summary> /// <param name="envelope">e.NewEnvelope</param> /// <param name="mapControl"></param> public static void ShowRectangleByEnvelope(IEnvelope envelope, IMapControlDefault mapControl) { try { IGraphicsContainer graphicsContainer = mapControl.Map as IGraphicsContainer; IActiveView activeView = graphicsContainer as IActiveView; //在绘制前,清除axMapControl2中的任何图像元素 graphicsContainer.DeleteAllElements(); IElement element = new RectangleElementClass(); element.Geometry = envelope; //设置鹰眼中的红线 //产生一个符号对象 ILineSymbol outLineSymbol = new SimpleLineSymbolClass(); outLineSymbol.Width = 2; outLineSymbol.Color = GetColor(255, 0, 0, 255); //设置颜色属性 //设置填充符号属性 IFillSymbol fillsymbol = new SimpleFillSymbolClass(); fillsymbol.Color = GetColor(9, 0, 0, 0); fillsymbol.Outline = outLineSymbol; IFillShapeElement fillShapeElement = element as IFillShapeElement; fillShapeElement.Symbol = fillsymbol; graphicsContainer.AddElement((IElement)fillShapeElement, 0); activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); } catch (System.Exception ex) { MessageBox.Show("框选指定区域失败!" + ex); } } /// <summary> /// 清除选择 /// </summary> /// <param name="mapControl"></param> public static void ClearSelection(IMapControlDefault mapControl) { try { IActiveView activeView = (IActiveView)mapControl.Map; //清除数据集前必须先刷新 activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, mapControl.get_Layer(0), null); mapControl.Map.ClearSelection(); activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, mapControl.get_Layer(0), null); } catch (System.Exception ex) { MessageBox.Show("清除选择失败!" + ex); } } /// <summary> /// 名称查询 /// </summary> /// <param name="mapControl"></param> /// <param name="value"></param> public static void SelectByName(IMapControlDefault mapControl, string field, string value) { try { string selectName = value.Trim(); ILayer layer = mapControl.Map.get_Layer(0); IFeatureLayer featureLayer = layer as IFeatureLayer; IFeatureClass featureClass = featureLayer.FeatureClass; IQueryFilter queryFilter = new QueryFilterClass(); IFeatureCursor featureCursor; IFeature feature = null; ; queryFilter.WhereClause = field + " = " + value; featureCursor = featureClass.Search(queryFilter, true); feature = featureCursor.NextFeature(); if (null != feature) { mapControl.Map.SelectFeature(layer, feature); mapControl.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null); } } catch (System.Exception ex) { MessageBox.Show("依据名称查询选中要素失败!" + ex); } } /// <summary> /// 依据指定的Geometry(Shape)选中要素 /// </summary> /// <param name="mapControl"></param> /// <param name="geometry"></param> public static void SelectByShape(IMapControlDefault mapControl, IGeometry geometry) { try { mapControl.Map.SelectByShape(geometry, null, false); mapControl.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null); } catch (System.Exception ex) { MessageBox.Show("依据指定的Geometry(Shape)选中要素失败!" + ex); } } /// <summary> /// 同步到MapControl控件 /// </summary> public static void CopyToMapControl(IMapControlDefault mapControl, IMapControlDefault toMapControl) { try { IObjectCopy objCopy = new ObjectCopyClass(); object copyFromMap = mapControl.Map; object copyMap = objCopy.Copy(copyFromMap); object copyToMap = toMapControl.ActiveView.FocusMap; objCopy.Overwrite(copyMap, ref copyToMap); toMapControl.Extent = mapControl.FullExtent; } catch (System.Exception ex) { MessageBox.Show("Map间数据同步失败!" + ex); } } /// <summary> /// 同步到PageLayout控件 /// </summary> public static void CopyToPageLayout(IMapControlDefault mapControl, IPageLayoutControlDefault pageLayoutControl) { try { IObjectCopy objCopy = new ObjectCopyClass(); object copyFromMap = mapControl.Map; object copyMap = objCopy.Copy(copyFromMap); object copyToMap = pageLayoutControl.ActiveView.FocusMap; objCopy.Overwrite(copyMap, ref copyToMap); } catch (System.Exception ex) { MessageBox.Show("Map与PageLayout数据同步失败!" + ex); } } /// <summary> /// 屏幕变化后刷新屏幕 /// </summary> /// <param name="mapControl"></param> public static void AfterScreenDraw(IMapControlDefault mapControl) { try { IActiveView activeView = (IActiveView)mapControl.ActiveView.FocusMap; IDisplayTransformation displayTransformation = activeView.ScreenDisplay.DisplayTransformation; displayTransformation.VisibleBounds = mapControl.Extent; mapControl.ActiveView.Refresh(); } catch (System.Exception ex) { MessageBox.Show("刷新屏幕失败!" + ex); } } } }

免责声明:文章转载自《C#:MapControl基本操作代码整理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL中的一些常用函数element-ui Form表单校验小结及踩坑下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

asp.net core网关Ocelot的简单介绍&amp;amp; Ocelot集成Identity认证

文章简介  Ocelot网关简介  Ocelot集成Idnetity认证处理 Ocelot网关简介 Ocelot是一个基于netcore实现的API网关,本质是一组按特定顺序排列的中间件。Ocelot内部实现了路由转发,限流,熔断,请求聚合,服务发现(集成consul,eureka等),负载均衡,认证(集成Identity)功能。 这里简单介绍下ocel...

Java 中使用Jackson反序列化

Build.gradle: compile group: 'org.codehaus.jackson', name: 'jackson-mapper-lgpl', version: '1.9.13' compile group: 'org.codehaus.jackson', name: 'jackson-core-lgpl', version: '...

聊聊OkHttp实现WebSocket细节,包括鉴权和长连接保活及其原理!

一、序 OkHttp 应该算是 Android 中使用最广泛的网络库了,我们通常会利用它来实现 HTTP 请求,但是实际上它还可以支持 WebSocket,并且使用起来还非常的便捷。 那本文就来聊聊,利用 OkHttp 实现 WebSocket 的一些细节,包括对 WebSocket 的介绍,以及在传输前如何做到鉴权、长连接保活及其原理。 二、WebSo...

如何分析和提高(C/C++)程序的编译速度?

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。 本文链接:https://www.cnblogs.com/lihuidashen/p/12937085.html 微信链接:https://mp.weixin.qq.com/s/MFOaa-Dw1iNMXuXPfXjLBA 一个别人的vs 2010 的程序...

noip2011普及组:统计单词

题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位 置,有的还能统计出特定单词在文章中出现的次数。 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章 中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配, 即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相...

DELPHI 字符串分割处理

DELPHI 字符串分割处理 Code 1Function FindStr(BegSprStr,EdSpStr:String;var Source:String):String;  2var  3BegStr1Len,EdSpStr2Len,BegStr1Index,EdSpStr2index:integer;  4Temp:String;  5begi...