zoukankan      html  css  js  c++  java
  • C#:MapControl基本操作代码整理

    来自:http://www.cnblogs.com/shenchao/p/3591312.html
    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);
                }
    
            }
        }
    }
    
  • 相关阅读:
    在项目中使用Google Closure Compiler
    在Dreamweaver 中设置SVN的步骤
    挣脱浏览器的束缚(2) 别让脚本引入坏了事
    Java配置环境变量
    Spring3简介
    Java开发常用地址
    struts2 入门
    Spring3 jar包说明
    角色和定位
    QCon 2011参会收获——其它
  • 原文地址:https://www.cnblogs.com/gisoracle/p/3870973.html
Copyright © 2011-2022 走看看