`
Virgo_S
  • 浏览: 1153777 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ArcGIS Engine开发系列:将地图导出为图片的两种方法

阅读更多
转自:http://blog.sina.com.cn/s/blog_4c5f70df0100a0ti.html
     
    在ArcGIS的开发中,我们经常需要将当前地图打印(或是转出)到图片文件中。将Map或Layout中的图象转出有两种方法,一种为通过
IActiveView的OutPut函数,另外一种是通过IExport接口来实现。第一种方法导出速度较快,实现也比较方便,但该方法对于图片的行或
列数超过10000左右时,导出经常会失败(具体原因未知),第二种方法导出速度较慢,但效果较好,且可以在导出过程中通过ITrackCancel来中
止导出操作。
      通过IActiveView的方式导出是通过创建Graphics对象来实现,具体示例代码如下:
/// <summary>

/// 将Map上指定范围(该范围为规则区域)内的内容输出到Image,注意,当图片的行数或列数超过10000左右时,出现原因示知的失败

/// </summary>

/// <param name="pMap">需转出的MAP</param>
/// <param name="outRect">输出的图片大小</param>
/// <param name="pEnvelope">指定的输出范围(为Envelope类型)</param>
/// <returns>输出的Image 具体需要保存为什么格式,可通过Image对象来实现</returns>
public static Image SaveCurrentToImage(IMap pMap, Size outRect, IEnvelope pEnvelope)
 {
      //赋值
      tagRECT rect = new tagRECT();
      rect.left = rect.top = 0;
      rect.right = outRect.Width;
      rect.bottom = outRect.Height;
      try
      {                
          //转换成activeView,若为ILayout,则将Layout转换为IActiveView
          IActiveView pActiveView = (IActiveView)pMap;
          // 创建图像,为24位色
          Image image = new Bitmap(outRect.Width, outRect.Height); //, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
          System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);

          // 填充背景色(白色)
          g.FillRectangle(Brushes.White, 0, 0, outRect.Width, outRect.Height);

          int dpi = (int)(outRect.Width / pEnvelope.Width);

          pActiveView.Output(g.GetHdc().ToInt32(), dpi, ref rect, pEnvelope, null);

          g.ReleaseHdc();            

          return image;
     }

     catch (Exception excp)
     {
        MessageBox.Show(excp.Message + "将当前地图转出出错,原因未知", "出错提示", MessageBoxButtons.OK, MessageBoxIcon.Error);

          return null;
      }
 }

   通过IExport接口实现的导出,也需要通过IActiveView的OutPut来实现,但其转出句柄为IExport的StartExporting函数返回的DC,具体示例代码如下:
//输出当前地图至指定的文件    
public void ExportMapExtent(IActiveView pView, Size outRect,string outPath)
{           
    try
    {
        //参数检查
        if pView == null )
        {
            throw new Exception("输入参数错误,无法生成图片文件!");
        }  
        //根据给定的文件扩展名,来决定生成不同类型的对象
        ESRI.ArcGIS.Output.IExport export = null;
        if (outPath.EndsWith(".jpg"))
        {
            export = new ESRI.ArcGIS.Output.ExportJPEGClass();
        }
        else if (outPath.EndsWith(".tiff"))
        {
            export = new ESRI.ArcGIS.Output.ExportTIFFClass();
        }
        else if (outPath.EndsWith(".bmp"))
        {
            export = new ESRI.ArcGIS.Output.ExportBMPClass();
        }
        else if (outPath.EndsWith(".emf"))
        {
            export = new ESRI.ArcGIS.Output.ExportEMFClass();
        }
        else if (outPath.EndsWith(".png"))
        {
            export = new ESRI.ArcGIS.Output.ExportPNGClass();
        }
        else if (outPath.EndsWith(".gif"))
        {
            export = new ESRI.ArcGIS.Output.ExportGIFClass();
        }

        export.ExportFileName = outPath;
        IEnvelope pEnvelope = pView.Extent;
        //导出参数           
        export.Resolution = 300;
        tagRECT exportRect = new tagRECT();
        exportRect.left = exportRect.top = 0;
        exportRect.right = outRect.Width;
        exportRect.bottom = (int)(exportRect.right * pEnvelope.Height / pEnvelope.Width);
        ESRI.ArcGIS.Geometry.IEnvelope envelope = new ESRI.ArcGIS.Geometry.EnvelopeClass();
        //输出范围
        envelope.PutCoords(exportRect.left, exportRect.top, exportRect.right, exportRect.bottom);
        export.PixelBounds = envelope;
        //可用于取消操作
        ITrackCancel pCancel = new CancelTrackerClass();
        export.TrackCancel = pCancel;
        pCancel.Reset();
        //点击ESC键时,中止转出
        pCancel.CancelOnKeyPress = true;
        pCancel.CancelOnClick = false;
        pCancel.ProcessMessages = true;
        //获取handle
        System.Int32 hDC = export.StartExporting();
        //开始转出
        pView.Output(hDC, (System.Int16)export.Resolution, ref exportRect, pEnvelope, pCancel);
        bool bContinue = pCancel.Continue();
        //捕获是否继续
        if (bContinue)
        {                              
            export.FinishExporting();
            export.Cleanup();
        }
        else
        {                  
            export.Cleanup();
        }
        bContinue = pCancel.Continue();               
    }
    catch (Exception excep)
    {
        //错误信息提示
    }
}




分享到:
评论

相关推荐

    ArcGIS Engine10.0的开发

    本文将深入探讨ArcGIS Engine 10.0的开发要点,旨在为开发者提供详尽的指导。 首先,ArcGIS Engine的核心在于它的组件模型,其中包括MapControl用于展示地图,SceneControl用于三维场景展现,以及Tool对象用于交互...

    arcgis engine实现叠加分析

    在GIS(地理信息系统)领域,叠加分析是一种常用的数据处理技术,用于将两个或多个地理数据层融合在一起,以便从这些层中提取新的信息。在本主题中,我们将深入探讨如何利用ArcGIS Engine来实现叠加分析,特别是通过...

    ArcGIS Engine使用 Geoprocessing工具方法

    本教程重点讲解如何在ArcGIS Engine中使用Geoprocessing工具,这是一种处理地理数据并执行复杂空间分析的方法。下面将详细阐述相关知识点。 1. **什么是Geoprocessing**: Geoprocessing是GIS中的一个核心概念,它...

    arcgis engine开发-查询功能实验报告_arcgis engine

    查询功能是ArcGIS Engine的核心特性之一,它包括了两种主要类型的查询:空间查询和属性查询。空间查询是基于地理空间关系进行的,如“查找距离我最近的公园”或“找到位于特定形状内的所有建筑物”。属性查询则根据...

    ArcGIS Engine的开发及应用研究.pdf

    ### ArcGIS Engine的开发及应用研究 #### 一、引言 ArcGIS是地理信息系统(GIS)领域的一个标志性产品,由ESRI公司开发。随着GIS技术的发展与普及,ArcGIS不断进行技术创新与整合,推出了全系列GIS平台。其中,...

    最新力作——ArcGIS Engine开发实例教程 下载

    教程涵盖了从基础的Map地图开发到较为复杂的三维场景(Scene)开发,旨在帮助读者掌握ArcGIS Engine开发技术,理解GIS开发的基本流程,并对ArcGIS Engine的主要库有深入认识。 在Map地图开发部分,教程详细介绍了...

    ArcGIS Engine的开发及应用研究

    ArcGIS Engine是一种用于创建定制化的GIS桌面应用程序的开发工具,它包含了构建ArcGIS产品的核心组件,如ArcView、ArcEditor、ArcInfo等。AE不仅能够创建独立的GIS应用程序,还能扩展现有应用程序的功能,为GIS和非...

    ArcGIS_Engine_10_开发

    ArcGIS是一个由ESRI公司推出的全面的GIS(地理信息系统)产品平台,它成功整合了数据库技术、软件工程、人工智能、...在这个环节中,需要将开发好的应用程序和相关依赖安装到目标机器上,并确保应用程序能够正常运行。

    ArcGISEngine题库.pdf

    (B) B 描述相互关联的两种类型的数量或对象之间的关系。知识点:cardinality 和关系。 15. 在 ArcGIS 中元数据以哪种格式存储?(C) C XML。知识点:元数据存储格式。 16. 域可以为存储在 geodatabase 中的非地理表...

    arcengine 自定义工具(标注,按面积修整图斑,相交取面积最大者赋值属性,属性表导出excel)

    在ArcEngine中,自定义工具...总结,ArcEngine自定义工具的开发涵盖了地图标注、几何对象操作、属性值的传递和数据导出等多个方面。理解并熟练运用这些技术,可以帮助我们构建强大的GIS应用,满足各种复杂的业务需求。

    C#+ArcEngine 自定义范围输出为栅格图像

    其中,栅格图像输出是 ArcEngine 输出机制中的一种重要方式,能够将地图输出为栅格图像,方便用户对地图进行编辑、打印和分享。 知识点二:C# 在 ArcEngine 中的应用 C# 是一种流行的编程语言,广泛应用于 Arc...

    牟乃夏 ArcGIS10地理信息系统教程从初学到精通---ppt/pdf

    ArcGIS是Esri公司开发的一款广泛应用于地理数据处理、空间分析和地图制作的专业工具。本教程由牟乃夏编写,采用PPT和PDF两种形式,提供了丰富的教学内容和视觉展示,便于学习者理解和实践。 首先,教程会介绍GIS的...

    ArcGIS操作使用.pptx

    - 支持两种类型的地图视图:数据视图和布局视图。 - **数据编辑**: - 支持矢量数据的绘制、编辑和修改。 - 可以进行数据的符号化显示、分析和编辑。 - **常用操作**: - **数据加载**:将外部数据加载到...

    ArcGIS与CAD的一体化应用

    随着技术的进步,未来这两个领域的融合将更加紧密,为各行各业带来更多的机遇和挑战。 #### CAD图件组成与行业应用 1. **组成**:CAD图件由几何元素、标注和符号等基本组成部分构成,通过层次结构组织信息。 2. **...

    ArcGIS 10.2全套下载,包括desktop server sde

    ArcGIS Server支持多种操作系统和数据库平台,提供RESTful和SOAP两种Web服务接口,增强了跨平台和跨应用的互操作性。 3. **SDE(Spatial Database Engine)**: SDE是Esri开发的空间数据库引擎,用于存储、管理和...

    ArcGISAO_OMD_10.2.2.pdf

    这些接口可能提供了将地图或场景数据导出为特定格式的方法,比如用于创建3D可视化或进行数据交换。`CoClassInterface`则涉及到COM(组件对象模型)编程,它是可以直接实例化的类,可以通过声明新的对象来创建实例。 ...

    浅谈MapGIS文件到ArcGIS文件的转换方法(转载)

    在地理信息系统(GIS)领域,数据格式的兼容性是一个重要的问题。MapGIS和ArcGIS都是广泛应用的GIS软件,但...无论是简单导出导入还是编写脚本,都需要充分理解两种软件的数据结构和特性,以确保转换的准确性和效率。

    Mapgis文件转换为Arcgis支持的SHP文件的方法总结

    MapGIS和ArcGIS是两种广泛应用的GIS软件,它们各自有着不同的数据格式。MapGIS主要使用的是MIF、MID、DFC等格式,而ArcGIS则广泛支持ESRI的Shapefile(SHP)格式。在不同软件间进行数据交换时,我们需要进行文件转换...

Global site tag (gtag.js) - Google Analytics