专题图、设置图层符号等功能汇总

终于搞得像个样子了.

  实现功能:

   功能1:加载、保存地图文档

   功能2:鹰眼

   功能3:添加、删除、移动图层

   功能4:专题图

   功能5:属性表查看

   功能6:地图输出

   功能7:设置图层符号

   功能8:状态栏信息的添加和实现

 开发环境:

 Vs2012+arcgisEngine10.2

 演示效果:



     
 
 
 

     

 其中在地图导出的代码,这部分搞了很久:

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

using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Output;
using ESRI.ArcGIS.Display;
using System.IO;


namespace Cb123456
{
    /// <summary>
    /// Command that works in ArcMap/Map/PageLayout
    /// </summary>
    [Guid("cc52bbd2-a5a1-4674-86dc-889a15e7878b")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("Cb123456.SaveMapPictureCommand")]
    public sealed class SaveMapPictureCommand : 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);
            MxCommands.Register(regKey);
            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);
            MxCommands.Unregister(regKey);
            ControlsCommands.Unregister(regKey);
        }

        #endregion
        #endregion

        private IHookHelper m_hookHelper ;
        private IMapControl3 m_mapControl;
        private AxMapControl axMapControl1;


        public SaveMapPictureCommand(AxMapControl axMapControl1)
        {
            // TODO: Complete member initialization
            this.axMapControl1 = axMapControl1;

            base.m_category = "导出地图图片"; //localizable text
            base.m_caption = "导出地图图片";  //localizable text 
            base.m_message = "导出地图图片";  //localizable text
            base.m_toolTip = "导出地图图片";  //localizable text
            base.m_name = "SaveMapPictureCommand";   //unique id, non-localizable (e.g. "MyCategory_MyCommand")

            try
            {
                //
                // TODO: change bitmap name if necessary
                //
                string bitmapResourceName = GetType().Name + ".bmp";
                base.m_bitmap = new Bitmap(GetType(), bitmapResourceName);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine(ex.Message, "Invalid Bitmap");
            }
        }

        #region Overridden 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;

            try
            {
                m_hookHelper = new HookHelperClass();
                m_hookHelper.Hook = this.axMapControl1.Object;
                if (m_hookHelper.ActiveView == null)
                    m_hookHelper = null;
            }
            catch
            {
                m_hookHelper = null;
            }

            if (m_hookHelper == null)
                base.m_enabled = false;
            else
                base.m_enabled = true;

            // TODO:  Add other initialization code
            if (m_hookHelper == null) return;

            //get the mapControl hook
            object hookMap = null;
            if (m_hookHelper.Hook is IToolbarControl2)
                hookMap = (m_hookHelper.Hook as IToolbarControl2).Buddy;
            else
                hookMap = m_hookHelper.Hook;

            if (hookMap is IMapControl3)
                m_mapControl = hookMap as IMapControl3;
        }


        /// <summary>
        /// Occurs when this command is clicked
        /// </summary>
        public override void OnClick()
        {
            SaveFileDialog dlg = new SaveFileDialog();
            dlg.Filter = "jpg文件(*.jpg)|*.jpg|png文件(*.png)|*.png|bmp文件(*.bmp)|*.bmp|pdf文件(*.pfd)|*.pdf|tiff文件(*.tiff)|*.tiff|emf文件(*.emf)|*.emf|gif文件(*.gif)|*.gif|eps文件(*.eps)|*.eps|ai文件(*.ai)|*.ai|svg文件(*.svg)|*.svg|所有文件(*.*)|*.*";
            dlg.Title = "导出图片文件";

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    IActiveView pActiveView = m_mapControl.ActiveView;
                    FileInfo fileInfo = new FileInfo(dlg.FileName);

                    string sOutputDir = fileInfo.DirectoryName;
                    string strImageFileName = fileInfo.Name.Split('.')[0];
                    string ExportType = fileInfo.Extension.Split('.')[1].ToUpper();

                    IExport docExport = ExportFileType(ExportType);

                    docExport.ExportFileName = sOutputDir + "\\" + strImageFileName + "." + docExport.Filter.Split('.')[1].Split('|')[0].Split(')')[0].ToUpper();

                    // check if export is vector or raster
                    if (docExport is IOutputRasterSettings)
                    {
                        IOutputRasterSettings RasterSettings;
                        RasterSettings = (IOutputRasterSettings)docExport;
                        RasterSettings.ResampleRatio = 1;
                    }

                    IPrintAndExport docPrintExport = new PrintAndExport();
                    docPrintExport.Export(pActiveView, docExport, 200, false, null);

                    MessageBox.Show("地图输出成功");
                }
                catch (Exception e)
                {
                    throw new Exception(Environment.NewLine + "地图输出过程出现错误:" + e.Message);
                }
            }
        }




        #endregion
         private static IExport ExportFileType(string ExportType)
        {
            IExport docExport;
            if (ExportType == "PDF")
                docExport = new ExportPDF() as IExport;// new ExportPDFClass();
            else if (ExportType == "EPS")
                docExport = new ExportPS() as IExport;
            else if (ExportType == "AI")
                docExport = new ExportAI() as IExport;
            else if (ExportType == "BMP")
                docExport = new ExportBMP() as IExport;// new ExportBMPClass();
            else if (ExportType == "TIFF")
                docExport = new ExportTIFF() as IExport;
            else if (ExportType == "SVG")
                docExport = new ExportSVG() as IExport;
            else if (ExportType == "PNG")
                docExport = new ExportPNG() as IExport;
            else if (ExportType == "GIF")
                docExport = new ExportGIF() as IExport;
            else if (ExportType == "EMF")
                docExport = new ExportEMF() as IExport;
            else
            {
                ExportType = "JPG";
                docExport = new ExportJPEG() as IExport;
            }
            return docExport;
        }
    }

}

 在以上代码中,比较关键的两句:

 m_hookHelper = new HookHelperClass();

 m_hookHelper.Hook = this.axMapControl1.Object;

 之前在测试的时候,出现"未将对象引用设置到对象的实例"的问题,最后用设置断点的方法,发现了这个错误,解决了.

 其他的代码见附件:cb123456.rar

 

  参考及引用:

 http://www.gissky.net/Article/1554.html

 总结:

 本次的课程设计终于可以结束了,也学到很多.

 

 

 

  

 
 

 

 

猜你喜欢

转载自cb123456.iteye.com/blog/2221915