『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

ArcGIS Engine下实现地图输出

ArcGIS Engine下实现地图输出
我们在用ArcGIS Engine定制开发的时候,常常需要将当前的地图文档输出,或者以bmp的形式拷贝到剪贴板,那么到底该如何实现这些操作呢?这篇文章将会给我们介绍两种常用的方法。

       我们在用ArcGIS Engine定制开发的时候,常常需要将当前的地图文档输出,或者以bmp的形式拷贝到剪贴板,那么到底该如何实现这些操作呢?这篇文章将会给我们介绍两种常用的方法。

       一、实现像ArcMapEdit菜单下Copy Map to Clipboard

       实际上AE并没有提供实现这一功能的方法,但我们可以采用Windows32 API函数来实现。

       思路:获取到MapControl的句柄然后实现一个一般的剪贴板拷贝程序,将MapControl范围内的视图以位图形式复制过去。以下代码片段供参考:

       CWnd *pWndCal =GetDlgItem(IDC_MAPCONTROL1)    //获取指MapControl的指针

       CBitmap bitmap

       CClientDC dc(pWndCal)                       //获得MapControl客户区的设备环境

       memdc.CreateCompatibleDC(&dc)                   //创建和指定dc兼容的内存dc

       pWndCal->GetClientRect(rect)                   //获得MapControl的范围(Client Rectangle)

       //创建一个和指定设备环境兼容的位图bitmap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height())

       CBitmap* poldbitmap = memdc.SelectObject(&bitmap)

       memdc.BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY)

       pWndCal->OpenClipboard()                        //打开剪贴板

       SetClipboardData(CF_BITMAP,bitmap.GetSafeHandle())              //向剪贴板增加地图

       二、采用ExportMap将地图输出为图片

       AE给我们提供了很多种将地图输出的方式,包括文件方式和打印等,这些方式又受不同参数的控制有着不同的效果。要想得到符合我们要求的效果,就必须了解这些方法所表达的意思和参数的内容,下面简要说明一下,其它的可以参考开发文档。

       思路:采用IActiveView接口下的output方法,可以将地图输出为上十种格式,具体的格式受IExport类型限制,如ExportBMPExportPNGExportJPEG等,下面以输出为JPEG格式来说明。

       首先定义ExportJPEG的实例pExport,然后设置其相关的参数,过程比较简单,这里重点描述一下相关的参数设置。

       方法:OutPut(hdc, Dpi, pixelBounds, VisibleBounds, TrackCancel )

       1、这里hdc是输出设备,由pExport.StartExporting指定;

       2Dpi是输出图片的精度,但是这里这个resolution并不能改变图片的精度,无论设置多大的dpi,输出同一范围图片的大小、精度都是一样的。要想改变精度,得指定IOutputRasterSettings::ResampleRatio这个参数,可以设置15个级别的采样率,在输出图片很大的时候这个参数能提高图片的质量;

       3PixelBounds设置的是输出像素所占的范围;

       4VisibleBounds指定地图可视的范围,这个范围是以地图坐标为单位的,以当前MapExtent为基准来控制放大、缩小视图;

       5、还有个参数是pExpotrt.PixelBounds,定义的是输出图片的大小,即图片尺寸,相当于画布大小。当输出像素的范围大于图片大小的时候就会裁切图片,只输出部分地图;当它小于图片尺寸时地图会缩小到画布的一角。

       综上所述,VisibleBounds或者像素范围和图片大小都可以设置地图的输出范围,一般按照具体的需要采用其中一种就可以了。

       最后一点说明一下,DeviceFrame是当前设备范围,在ArcMap中就是地图所在的客户区,以左上角为起点(00);ExportFrameDeviceFrame差不多,只是可能比前者略小一点;Map Extent一般是指地图范围,采用的是地图单位。整个AO体系里面有很多不同的Extent范围,弄清它们之间的关系对开发人员来说是很必要的。

      京ICP备2025132830号-1 京公网安备 号