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 ...
随机推荐
- Git学习小结(第三次作业)
本文主要总结一下在学习和使用git中一些用到的命令. 参考教程:廖雪峰git教程 在windows上安装git 下载使用环境:http://msysgit.github.io/, 安装一路默认即可. ...
- Bootstrap入门二:响应式页面布局
Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列.它包含了易于使用的预定义类,还有强大的mixin 用于生成更具 ...
- CPU大小端判断
两种方式:1.通过指针 2.通过联合体,联合体里面的数据都是按顺序存储的,而且不论联合体里面有多少数据类型,联合体长度是最长的数据类型的长度.不论初始化多少联合体里面的数据,有效的是最 ...
- Java 7 中 NIO.2 的使用——第四节 文件和目录
Files类提供了很多方法用于检查在于你真正实际去操作一个文件或目录.这些方法强烈推荐,也非常有用,也能避免很多异常的发生.例如,一个很好的习惯就是在你试着移动一个文件从一个地方到另一个地方的时候,先 ...
- JS判断用户是否在线的方法
在以前坐项目的时候,经常碰见通过sessionLisnter来判断用户是否在线的方法,但是由于用户关闭浏览器时不会立刻是否session,因此大部分时候都考虑在页面中通过JS来监控页面是否关闭. 网络 ...
- Ubuntu 字体修改以及字体的相关知识 分类: ubuntu 2014-06-19 21:46 81人阅读 评论(0) 收藏
Ubuntu chrome 字体修改 打开任意一张含有输入框的网页,比如Google首页,然后右键点击"搜索框"会拉出一个菜单,我们这样选: 拼音检查选项==>语言设置==& ...
- [工作积累] bitfield
ISO/IEC 14882:2003: 9.6 Bit-fields [class.bit] A member-declarator of the form identifieropt : const ...
- Keil中的code关键字
一般说来,我们在C语言中定义的每一个变量初始化后都会占用一定的内存(RAM)空间.但是在keil中提供了一个特殊的关键字“code”,这个关键字在标准C中是没有的.其语法举例如下: unsigned ...
- [转载]Thread.Sleep(0)妙用
原文地址:http://blog.csdn.net/lgstudyvc/article/details/9337063 来自本论坛: 我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段 ...
- Codeforces Round #263 (Div. 2)
吐槽:一辈子要在DIV 2混了. A,B,C都是简单题,看AC人数就知道了. A:如果我们定义数组为N*N的话就不用考虑边界了 #include<iostream> #include &l ...