ArcEngine开发之自定义工具栏–打开文件(C#)

1、打开地图文档

创建GIS类,选择Base Command模版,类的名称为OpenNewMapDocument,选择第2类:ArcMap MapControl or PageLayoutControl command

以下为该文档的代码:

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.ADF.BaseClasses;
using ESRI.ArcGIS.ADF.CATIDs;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Carto;


namespace GIS
{
    /// <summary>
    /// Summary description for OpenNewMapDocument.
    /// </summary>
    [Guid("5bf50443-f852-47cd-9c96-984184b6cca6")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("MapAndPageLayoutSynchApp.OpenNewMapDocument")]
    public sealed class OpenNewMapDocument : BaseCommand
    {
        #region COM Registration Function(s)
        [ComRegisterFunction()]
        [ComVisible(false)]
        static void RegisterFunction(Type registerType)
        {
            // Required for ArcGIS Component Category Registrar support
            ArcGISCategoryRegistration(registerType);

            //
            // TODO: Add any COM registration code here
            //
        }

        [ComUnregisterFunction()]
        [ComVisible(false)]
        static void UnregisterFunction(Type registerType)
        {
            // Required for ArcGIS Component Category Registrar support
            ArcGISCategoryUnregistration(registerType);

            //
            // TODO: Add any COM unregistration code here
            //
        }

        #region ArcGIS Component Category Registrar generated code
        /// <summary>
        /// Required method for ArcGIS Component Category registration -
        /// Do not modify the contents of this method with the code editor.
        /// </summary>
        private static void ArcGISCategoryRegistration(Type registerType)
        {
            string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
            ControlsCommands.Register(regKey);

        }
        /// <summary>
        /// Required method for ArcGIS Component Category unregistration -
        /// Do not modify the contents of this method with the code editor.
        /// </summary>
        private static void ArcGISCategoryUnregistration(Type registerType)
        {
            string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
            ControlsCommands.Unregister(regKey);

        }

        #endregion
        #endregion

        private IHookHelper m_hookHelper;
        private ControlsSynchronizer m_controlsSynchronizer = null;
        private string m_sDocumentPath = string.Empty;

        public OpenNewMapDocument(ControlsSynchronizer controlsSynchronizer)
        {
            base.m_category = ".NET Samples";
            base.m_caption = "Open Map Document";
            base.m_message = "Open Map Document";
            base.m_toolTip = "Open Map Document";
            base.m_name = "DotNetSamplesOpenMapDocument";

            m_controlsSynchronizer = controlsSynchronizer;

            try
            {
                string bitmapResourceName = GetType().Name + ".bmp";
                base.m_bitmap = new Bitmap(GetType(), bitmapResourceName);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine(ex.Message, "Invalid Bitmap");
            }
        }

        #region Overriden Class Methods

        /// <summary>
        /// Occurs when this command is created
        /// </summary>
        /// <param name="hook">Instance of the application</param>
        public override void OnCreate(object hook)
        {
            if (hook == null)
                return;

            if (m_hookHelper == null)
                m_hookHelper = new HookHelperClass();

            m_hookHelper.Hook = hook;

        }

        /// <summary>
        /// Occurs when this command is clicked
        /// </summary>
        public override void OnClick()
        {
            //launch a new OpenFile dialog
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "Map Documents (*.mxd)|*.mxd";
            dlg.Multiselect = false;
            dlg.Title = "Open Map Document";
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                string docName = dlg.FileName;

                IMapDocument mapDoc = new MapDocumentClass();
                if (mapDoc.get_IsPresent(docName) && !mapDoc.get_IsPasswordProtected(docName))
                {
                    mapDoc.Open(docName, string.Empty);

                    // set the first map as the active view
                    IMap map = mapDoc.get_Map(0);
                    mapDoc.SetActiveView((IActiveView)map);

                    m_controlsSynchronizer.PageLayoutControl.PageLayout = mapDoc.PageLayout;

                    m_controlsSynchronizer.ReplaceMap(map);

                    mapDoc.Close();

                    m_sDocumentPath = docName;
                }
            }
        }

        #endregion

        public string DocumentFileName
        {
            get { return m_sDocumentPath; }
        }
    }
}

 

调用此命令:

 OpenNewMapDocument openMapDoc =new OpenNewMapDocument(m_controlsSynchronizer);
            openMapDoc.OnCreate(m_controlsSynchronizer.MapControl.Object);
            openMapDoc.OnClick();

 

2、打开shapefile文件

//添加Shapefile文件函数
        public void AddShapefile()
        {
            ESRI.ArcGIS.Carto.IActiveView activeView = axMapControl1.ActiveView;
            ESRI.ArcGIS.Carto.IActiveView activeView1 = axMapControl2.ActiveView;

            if (activeView == null)
            {
                return;
            }
            if (activeView1 == null)
            {
                return;
            }

            System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog();
            openFileDialog.Filter = "Shapefiles (*.shp)|*.shp";

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                string shapefileLocation = openFileDialog.FileName;
                string pathFile = shapefileLocation;
                if (shapefileLocation != "")
                {

                    IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();
                    IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(shapefileLocation), 0);
                    IFeatureClass featureClass = featureWorkspace.OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(shapefileLocation));
                    IFeatureLayer featureLayer = new FeatureLayerClass();
                    featureLayer.FeatureClass = featureClass;
                    featureLayer.Name = featureClass.AliasName;
                    featureLayer.Visible = true;

                    
                    //添加到主窗口中的代码
                    activeView.FocusMap.AddLayer(featureLayer);
                    activeView.Extent = activeView.FullExtent;
                    activeView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);

                    //添加到鹰眼视图窗口中的代码
                    activeView1.FocusMap.AddLayer(featureLayer);
                    activeView1.Extent = activeView1.FullExtent;
                    activeView1.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
                }
                else
                {
                    MessageBox.Show("操作出错啦!");
                }
            }
        }

 注:希望与大家分享下自己查找到的或者自己修改后的代码,新手学习,若有错误欢迎批评指正!

转载自:https://blog.csdn.net/eof_2011/article/details/8014051

You may also like...