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);
}
}
}
}
运行结果如下图所示: