ArcObject SDK 015 出图

1、核心出图代码

出图主要是靠IExport接口,继承该接口的类如下图所示。

image1.png

出不同格式的图,实例化不同的类即可。例如导出jpg格式的图片的代码如下。

private void Export(string pMxdFilePath, string pResultFolderPath)
{
    //获取参数
    string myFileNameWithoutEx = System.IO.Path.GetFileNameWithoutExtension(pMxdFilePath);
    string myImageFilePath = pResultFolderPath + "\\" + myFileNameWithoutEx + ".jpg";
    //打开地图
    var myMapDocument = new MapDocumentClass();
    myMapDocument.Open(pMxdFilePath);
    IPage myPage = myMapDocument.PageLayout.Page;
    myPage.Border = null;
    var myActiveView = myMapDocument.PageLayout as IActiveView;
    //得到使用屏幕分辨率的合适尺寸
    var mytagRECT2 = new tagRECT
    {
        left = 0,
        top = 0
    };
    double myRatio = this._Export.Resolution / 96;
    mytagRECT2.right = Convert.ToInt32(myActiveView.ExportFrame.right * myRatio);
    mytagRECT2.bottom = Convert.ToInt32(myActiveView.ExportFrame.bottom * myRatio);
    //设置输出范围
    var myEnvelope = new EnvelopeClass();
    myEnvelope.PutCoords(mytagRECT2.left, mytagRECT2.top, mytagRECT2.right, mytagRECT2.bottom);
    this._Export.PixelBounds = myEnvelope;
    this._Export.ExportFileName = myImageFilePath;
    //输出
    int myHDC = this._Export.StartExporting();
    myActiveView.Output(myHDC, Convert.ToInt32(this._Export.Resolution), ref mytagRECT2, null, null);
    this._Export.FinishExporting();
    this._Export.Cleanup();
    //清空资源
    myMapDocument.Close();
}

 2、复杂的批量出图

如何进行复杂批量出图呢?例如我们有以下需求,我们按天处理了一年的地质灾害风险数据,需要把他们按照指定的格式做成专题图并导出成图片。

我们分析这个需求。

1、数据是有底图的,底图可能包含行政区边界、地名、水系、主要道路等。

2、专题图的格式都是一样的,只是需要天当日的实际数据以及日期。

我们的解决方案如下。

1、根据要求创建一个Mxd文件,把底图数据添加到地图中,并设置好渲染样式等;

2、添加一个实际的业务数据,并设置好图层名称、渲染方式等;

3、添加辅助元素,例如标题、日期以及图例等,并且给需要在代码中修改的Element元素命名。

4、获取一年的实际业务数据列表,开始循环处理,循环处理的流程如下。

  (1)拷贝模板Mxd文件,并重新命名;

  (2)打开拷贝后的mxd文件,找到第一个图层,把数据源替换成目标数据源;

  (3)循环所有Element,找到指定名称的Element,把其内容修改成正确日期;

  (4)调用导出函数,把当前布局导出成图片;

  (5)按照相对路径,保存mxd文件。

posted @ 2022-12-14 22:01  mytudousi  阅读(87)  评论(0编辑  收藏  举报