ArcEngine导出地图

1、前言

在利用ArcEngine导出地图的时候,一般有两种情况:全图导出区域导出,下面分别介绍两种导出地图的方法。首先搭建如下图所示的界面:
在这里插入图片描述

2、全图导出

2.1、利用IPrintAndExport接口

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

namespace Win
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            axMapControl1.LoadMxFile(@"C:\Users\DSF\Desktop\data\Untitled.mxd");
        }

        /// <summary>
        /// 导出按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExport_Click(object sender, EventArgs e)
        {
            StringBuilder filter = new StringBuilder();
            filter.Append("PDF(*.pdf)|*.pdf|");
            filter.Append("SVG(*.svg)|*.svg|");
            filter.Append("AI(*.ai)|*.ai|");
            filter.Append("EMF(*.emf)|*.emf|");
            filter.Append("EPS(*.eps)|*.eps|");
            filter.Append("BMP(*.bmp)|*.bmp|");
            filter.Append("PNG(*.png)|*.png|");
            filter.Append("JPEG(*.jpeg)|*.jpeg|");
            filter.Append("TIFF(*.tif)|*.tif|");
            filter.Append("GIF(*.gif)|*.gif");

            // 保存文件
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Title = "导出";
            saveFileDialog.Filter = filter.ToString();
            saveFileDialog.RestoreDirectory = true;
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                ExportMap(saveFileDialog.FileName, 300, 1);
            }
        }

        /// <summary>
        /// 导出地图方法
        /// </summary>
        /// <param name="filePath">导出路径</param>
        /// <param name="resolution">导出分辨率</param>
        /// <param name="resample">重采样登记</param>
        private void ExportMap(string filePath, double resolution, int resample)
        {
            IExport pExport = null;
            switch (System.IO.Path.GetExtension(filePath))
            {
                case ".pdf":
                    pExport = new ExportPDF() as IExport;
                    break;
                case ".svg":
                    pExport = new ExportSVG() as IExport;
                    break;
                case ".ai":
                    pExport = new ExportAI() as IExport;
                    break;
                case ".emf":
                    pExport = new ExportEMF() as IExport;
                    break;
                case ".eps":
                    pExport = new ExportPS() as IExport;
                    break;
                case ".bmp":
                    pExport = new ExportBMP() as IExport;
                    break;
                case ".png":
                    pExport = new ExportPNG() as IExport;
                    break;
                case ".jpeg":
                    pExport = new ExportJPEG() as IExport;
                    break;
                case ".tif":
                    pExport = new ExportTIFF() as IExport;
                    break;
                case ".gif":
                    pExport = new ExportGIF() as IExport;
                    break;
                default:
                    pExport = new ExportPDF() as IExport;
                    break;
            }

            // 设置导出路径
            pExport.ExportFileName = filePath;

            // 若导出图片,则设置重采样等级
            if (pExport is IOutputRasterSettings)
            {
                IOutputRasterSettings pOutputRasterSettings = pExport as IOutputRasterSettings;
                pOutputRasterSettings.ResampleRatio = resample;
            }

            // 若导出TIFF,则设置坐标信息
            if (pExport is IExportTIFF)
            {
                IExportTIFF pExportTIFF = pExport as IExportTIFF;
                pExportTIFF.GeoTiff = true;
                pExportTIFF.CompressionType = esriTIFFCompression.esriTIFFCompressionJPEG;
            }

            // 若导出PDF,则设置PDF格式
            if (pExport is IExportPDF)
            {
                IExportPDF pExportPDF = pExport as IExportPDF;
                pExportPDF.Compressed = true;
                pExportPDF.EmbedFonts = true;
                pExportPDF.ImageCompression = esriExportImageCompression.esriExportImageCompressionNone;
            }

            // 导出地图
            IPrintAndExport pPrintAndExport = new PrintAndExport();
            pPrintAndExport.Export(axMapControl1.ActiveView, pExport, resolution, false, null);
        }
    }
}

2.2、利用IActiveView接口

using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Output;
using System;
using System.Text;
using System.Windows.Forms;

namespace Win
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            axMapControl1.LoadMxFile(@"C:\Users\DSF\Desktop\data\Untitled.mxd");
        }

        /// <summary>
        /// 导出按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExport_Click(object sender, EventArgs e)
        {
            StringBuilder filter = new StringBuilder();
            filter.Append("PDF(*.pdf)|*.pdf|");
            filter.Append("SVG(*.svg)|*.svg|");
            filter.Append("AI(*.ai)|*.ai|");
            filter.Append("EMF(*.emf)|*.emf|");
            filter.Append("EPS(*.eps)|*.eps|");
            filter.Append("BMP(*.bmp)|*.bmp|");
            filter.Append("PNG(*.png)|*.png|");
            filter.Append("JPEG(*.jpeg)|*.jpeg|");
            filter.Append("TIFF(*.tif)|*.tif|");
            filter.Append("GIF(*.gif)|*.gif");

            // 保存文件
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Title = "导出";
            saveFileDialog.Filter = filter.ToString();
            saveFileDialog.RestoreDirectory = true;
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                ExportMap(saveFileDialog.FileName, 300, 1);
            }
        }

        /// <summary>
        /// 导出地图方法
        /// </summary>
        /// <param name="filePath">导出路径</param>
        /// <param name="resolution">导出分辨率</param>
        /// <param name="resample">重采样登记</param>
        private void ExportMap(string filePath, double resolution, int resample)
        {
            IExport pExport = null;
            switch (System.IO.Path.GetExtension(filePath))
            {
                case ".pdf":
                    pExport = new ExportPDF() as IExport;
                    break;
                case ".svg":
                    pExport = new ExportSVG() as IExport;
                    break;
                case ".ai":
                    pExport = new ExportAI() as IExport;
                    break;
                case ".emf":
                    pExport = new ExportEMF() as IExport;
                    break;
                case ".eps":
                    pExport = new ExportPS() as IExport;
                    break;
                case ".bmp":
                    pExport = new ExportBMP() as IExport;
                    break;
                case ".png":
                    pExport = new ExportPNG() as IExport;
                    break;
                case ".jpeg":
                    pExport = new ExportJPEG() as IExport;
                    break;
                case ".tif":
                    pExport = new ExportTIFF() as IExport;
                    break;
                case ".gif":
                    pExport = new ExportGIF() as IExport;
                    break;
                default:
                    pExport = new ExportPDF() as IExport;
                    break;
            }

            // 若导出图片,则设置重采样等级
            if (pExport is IOutputRasterSettings)
            {
                IOutputRasterSettings pOutputRasterSettings = pExport as IOutputRasterSettings;
                pOutputRasterSettings.ResampleRatio = resample;
            }

            // 若导出TIFF,则设置坐标信息
            if (pExport is IExportTIFF)
            {
                IExportTIFF pExportTIFF = pExport as IExportTIFF;
                pExportTIFF.GeoTiff = true;
                pExportTIFF.CompressionType = esriTIFFCompression.esriTIFFCompressionJPEG;
                IWorldFileSettings pWorldFileSettings = pExport as IWorldFileSettings;
                pWorldFileSettings.MapExtent = axMapControl1.Extent;
            }

            // 若导出PDF,则设置PDF格式
            if (pExport is IExportPDF)
            {
                IExportPDF pExportPDF = pExport as IExportPDF;
                pExportPDF.Compressed = true;
                pExportPDF.EmbedFonts = true;
                pExportPDF.ImageCompression = esriExportImageCompression.esriExportImageCompressionNone;
            }

            // 获取分辨率
            IActiveView pActiveView = axMapControl1.ActiveView;
            int screenResolution = (int)axMapControl1.ActiveView.ScreenDisplay.DisplayTransformation.Resolution;
            int outputResolution = (int)resolution;

            // 计算导出范围
            tagRECT rect = new tagRECT();
            rect.left = 0;
            rect.top = 0;
            rect.right = (int)(1.0 * pActiveView.ExportFrame.right * outputResolution / screenResolution);
            rect.bottom = (int)(1.0 * pActiveView.ExportFrame.bottom * outputResolution / screenResolution);

            // 设置导出范围
            IEnvelope pEnvelope = new Envelope() as IEnvelope;
            pEnvelope.PutCoords(rect.left, rect.bottom, rect.right, rect.top);

            // 导出参数
            pExport.Resolution = outputResolution;
            pExport.ExportFileName = filePath;
            pExport.PixelBounds = pEnvelope;

            // 导出
            pActiveView.Output(pExport.StartExporting(), outputResolution, ref rect, pActiveView.Extent, null);
            pExport.FinishExporting();
            pExport.Cleanup();
        }
    }
}

运行结果如下图所示:
在这里插入图片描述

3、区域导出

using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Output;
using System.Text;
using System.Windows.Forms;

namespace Win
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            axMapControl1.LoadMxFile(@"C:\Users\DSF\Desktop\data\Untitled.mxd");
        }

        /// <summary>
        /// 区域导出
        /// </summary>
        /// <param name="pTrackEnvelope">绘制的矩形</param>
        /// <param name="filePath">导出路径</param>
        /// <param name="resolution">导出分辨率</param>
        /// <param name="resample">重采样等级</param>
        private void ExportMap(IEnvelope pTrackEnvelope, string filePath, double resolution, int resample)
        {
            IExport pExport = null;
            switch (System.IO.Path.GetExtension(filePath))
            {
                case ".pdf":
                    pExport = new ExportPDF() as IExport;
                    break;
                case ".svg":
                    pExport = new ExportSVG() as IExport;
                    break;
                case ".ai":
                    pExport = new ExportAI() as IExport;
                    break;
                case ".emf":
                    pExport = new ExportEMF() as IExport;
                    break;
                case ".eps":
                    pExport = new ExportPS() as IExport;
                    break;
                case ".bmp":
                    pExport = new ExportBMP() as IExport;
                    break;
                case ".png":
                    pExport = new ExportPNG() as IExport;
                    break;
                case ".jpeg":
                    pExport = new ExportJPEG() as IExport;
                    break;
                case ".tif":
                    pExport = new ExportTIFF() as IExport;
                    break;
                case ".gif":
                    pExport = new ExportGIF() as IExport;
                    break;
                default:
                    pExport = new ExportPDF() as IExport;
                    break;
            }

            // 若导出图片,则设置重采样等级
            if (pExport is IOutputRasterSettings)
            {
                IOutputRasterSettings pOutputRasterSettings = pExport as IOutputRasterSettings;
                pOutputRasterSettings.ResampleRatio = resample;
            }

            // 若导出TIFF,则设置坐标信息
            if (pExport is IExportTIFF)
            {
                IExportTIFF pExportTIFF = pExport as IExportTIFF;
                pExportTIFF.GeoTiff = true;
                pExportTIFF.CompressionType = esriTIFFCompression.esriTIFFCompressionJPEG;
                IWorldFileSettings pWorldFileSettings = pExport as IWorldFileSettings;
                pWorldFileSettings.MapExtent = axMapControl1.Extent;
            }

            // 若导出PDF,则设置PDF格式
            if (pExport is IExportPDF)
            {
                IExportPDF pExportPDF = pExport as IExportPDF;
                pExportPDF.Compressed = true;
                pExportPDF.EmbedFonts = true;
                pExportPDF.ImageCompression = esriExportImageCompression.esriExportImageCompressionNone;
            }

            // 分辨率
            IActiveView pActiveView = axMapControl1.ActiveView;
            int screenResolution = (int)axMapControl1.ActiveView.ScreenDisplay.DisplayTransformation.Resolution;
            int outputResulotion = (int)resolution;

            // 计算导出区域
            tagRECT rect = new tagRECT();
            pActiveView.ScreenDisplay.DisplayTransformation.TransformRect(pTrackEnvelope, ref rect, 8);
            rect.right = (int)(1.0 * (rect.right - rect.left) * outputResulotion / screenResolution);
            rect.bottom = (int)(1.0 * (rect.bottom - rect.top) * outputResulotion / screenResolution);
            rect.left = 0;
            rect.top = 0;

            // 设置导出区域
            IEnvelope pEnvelope = new Envelope() as IEnvelope;
            pEnvelope.PutCoords(rect.left, rect.top, rect.right, rect.bottom);
            pExport.ExportFileName = filePath;
            pExport.PixelBounds = pEnvelope;

            // 导出
            pActiveView.Output(pExport.StartExporting(), outputResulotion, ref rect, pTrackEnvelope, null);
            pExport.FinishExporting();
            pExport.Cleanup();
        }

        /// <summary>
        /// axMapControl1_OnMouseDown
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
        {
            // 绘制一个矩形框
            IEnvelope pTrackEnvelope = axMapControl1.TrackRectangle();
            if (pTrackEnvelope.IsEmpty)
            {
                return;
            }

            // 导出文件类型d
            StringBuilder filter = new StringBuilder();
            filter.Append("PDF(*.pdf)|*.pdf|");
            filter.Append("SVG(*.svg)|*.svg|");
            filter.Append("AI(*.ai)|*.ai|");
            filter.Append("EMF(*.emf)|*.emf|");
            filter.Append("EPS(*.eps)|*.eps|");
            filter.Append("BMP(*.bmp)|*.bmp|");
            filter.Append("PNG(*.png)|*.png|");
            filter.Append("JPEG(*.jpeg)|*.jpeg|");
            filter.Append("TIFF(*.tif)|*.tif|");
            filter.Append("GIF(*.gif)|*.gif");

            // 保存文件
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Title = "导出";
            saveFileDialog.Filter = filter.ToString();
            saveFileDialog.RestoreDirectory = true;
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                ExportMap(pTrackEnvelope, saveFileDialog.FileName, 300, 1);
            }
        }
    }
}

运行结果如下图所示:在这里插入图片描述

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值