博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#:MapControl基本操作代码整理
阅读量:5745 次
发布时间:2019-06-18

本文共 19061 字,大约阅读时间需要 63 分钟。

整理了 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    {        ///         /// 添加SHP文当        ///         ///         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);            }                    }        ///         /// 添加LYR文当        ///         ///         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);            }        }        ///         /// 删除地图所有图层        ///         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);            }        }        ///         /// 将最底图层,移动到最上层        ///         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);            }        }        ///         /// 加载地图文当        ///         ///         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 + "不是有效的地图文当!");            }        }        ///         /// 加载特定地图文当        ///         ///         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 + "不是有效的地图文当!");            }        }        ///         /// By MapDocument        ///         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;        }        ///         /// By MapDocument        ///         ///         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);            }        }        ///         /// By MapDocument        ///         ///         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);            }        }        ///         /// 缩小        ///         ///         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);            }        }        ///         /// 放大        ///         ///         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); } } /// /// 漫游 /// /// 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); } } /// /// 全图 /// /// public static void FullExtent(IMapControlDefault mapControl) { try { mapControl.Extent = mapControl.FullExtent; } catch (System.Exception ex) { MessageBox.Show("全图失败!" + ex.Message); } } /// /// 写文字(待优化) /// /// /// /// /// 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); } } /// /// 画图 /// /// /// /// /// 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); } } /// /// 颜色 /// /// /// /// /// ///
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; } /// /// 框选指定区域(鹰眼功能) /// /// e.NewEnvelope /// 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); } } /// /// 清除选择 /// /// 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); } } /// /// 名称查询 /// /// /// 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); } } /// /// 依据指定的Geometry(Shape)选中要素 /// /// /// 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); } } /// /// 同步到MapControl控件 /// 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); } } /// /// 同步到PageLayout控件 /// 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); } } /// /// 屏幕变化后刷新屏幕 /// /// 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); } } }}

 

转载地址:http://njxzx.baihongyu.com/

你可能感兴趣的文章
[Unity3d]Shader 着色器 学习前了解知识
查看>>
维辰超市:借助云商城成功转型新零售
查看>>
web.xml中<load-on-start>n</load-on-satrt>作用
查看>>
【算法】CRF
查看>>
Windows UI风格的设计(7)
查看>>
SQL中使用WITH AS提高性能 使用公用表表达式(CTE)简化嵌套SQL
查看>>
oracle 强行杀掉一个用户连接
查看>>
Git提交本地库代码到远程服务器的操作
查看>>
让你快速上手的Glide4.x教程
查看>>
浮动和清除(闭合)浮动
查看>>
LR录制脚本时IE打不开的原因
查看>>
Sublime Text 2.0.2,Build 2221注册码
查看>>
最长递增子序列 动态规划
查看>>
原生CSS设置网站主题色—CSS变量赋值
查看>>
webpack 4.0 中 clean-webpack-plugin 的使用
查看>>
POJ 2236 Wireless Network (并查集)
查看>>
python分类
查看>>
GitBlit (1)-- 在linux 安装 GitBlit 并运行
查看>>
程序是如何执行的(一)a=a+1
查看>>
BZOJ - 3578: GTY的人类基因组计划2
查看>>