C#:MapControl基本操作代码整理
整理了 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基本操作代码整理的更多相关文章
- Smtp邮件发送系统公用代码整理—总结
1.前言 a.在软件开发中,我们经常能够遇到给用户或者客户推送邮件,推送邮件也分为很多方式,比如:推送一句话,推送一个网页等等.那么在系统开发中我们一般在什么情况下会使用邮件发送呢?下面我简单总结了一 ...
- Chrome应用技巧之代码整理。
我们有时候在看别人站点代码时往往是经过压缩的,代码都在一行上了,调试非常是困难,今天给大家介绍一种基本Chrome浏览器的代码整理方法.请看图:
- NSIS常用代码整理
原文 NSIS常用代码整理 这是一些常用的NSIS代码,少轻狂特意整理出来,方便大家随时查看使用.不定期更新哦~~~ 1 ;获取操作系统盘符 2 ReadEnvStr $R0 SYSTEMDRIVE ...
- material design 的android开源代码整理
material design 的android开源代码整理 1 android (material design 效果的代码库) 地址请点击:MaterialDesignLibrary 效果: 2 ...
- 一些 NSArray 的基本操作代码例子
一些 NSArray 的基本操作代码例子 数组可以说是软件开发人员每天都要面对的基本操作,下面就分享一些 NSArray 的基本操作代码例子供苹果开发初学者参考,每段代码第一行会以注释方式说明该段代码 ...
- HTTP请求代码整理
HTTP请求代码整理 类别 代码 注释 1xx – 信息提示 100 继续 101 切换协议 2xx - 成功 200 确定.客户端请求已成功 201 已创建 202 已接受 203 非权威性信息 2 ...
- SQL代码整理
--SQL代码整理: create database mingzi--创建数据库go--连接符(可省略)create table biao--创建表( lieming1 int not null,-- ...
- IOS常用代码整理
常用代码整理: 12.判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRege ...
- html Css PC 移动端 公用部分样式代码整理
css常用公用部分样式代码整理: body, html, div, blockquote, img, label, p, h1, h2, h3, h4, h5, h6, pre, ul, ol, li ...
随机推荐
- 多线程 -- GCD
GCD中有2个核心概念 任务:执行什么操作 队列:用来存放任务 执行任务 同步方法: dispatch_sync dispatch_sync(dispatch_queue_t queue, dispa ...
- 在本地环境用虚拟机win2008 sever搭建VS2013 + SVN 代码版本控制环境
此文仅仅是自己笔记做个备忘.因为自己开发一些中小型的软件经常需要修修改改,特别是winform界面的大改动.经常需要对版本进行管理.而租用分布式服务器和远程服务器都不是自己想要的.本文结合虚拟机 + ...
- iptables规则表
1.iptables规则表 Filter(针对过滤系统):INPUT.FORWARD.OUTPUT NAT(针对地址转换系统):PREROUTING.POSTROUTING.INPUT.OUTPUT ...
- 四则运算三+psp0级表格
一.题目 在四则运算二的基础上,选择一个方向进行拓展,我选择的是增加了答题模块 二.设计思路 1.在上次的基础上,增加了答题模块,每出现一道四则运算题目,便提醒输入结果,如果结果错误,就会提示错误 2 ...
- 初学MFC
学习使用MFC搭建界面.尝试使用MFC搭建了一个简单的基于对话框的计算器界面,包括模态对话框.非模态对话框.向导对话框等. // MFCApplicationAddDlg.h : 头文件 // #pr ...
- 升级ubuntu内核
ubuntu12.04内核为 linux-image-3.5.0-23-generic 要升级为 linux-image-3.2.0-57-generic 使用apt-get install linu ...
- WPF 策略模式
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- js java正则表达式替换手机号4-7位为星*号
需求: 一个手机号13152461111,由于安全性,需要替换4-7位字符串为星号,为131****1111,那么有2中玩法,一种是前端隐藏,一种是后台隐藏. 1. 前台隐藏 <!DOCTYPE ...
- CSS兼容问题大全
1.chorme 最小字体的兼容性. 问题描述:ff和IE最小字体可设置为1px,可是chorme中文版最小字体是12px,小于12px的字体全部显示为12px.解决方案:chorme支持CSS3的, ...
- Sqli-labs less 61
Less-61 此处对于id处理还是有点奇葩的,第一次遇到利用两层括号的.(可能我头发比较长,见识短了).形式和上述是一样的 payload: http://127.0.0.1/sqli-labs/L ...