|
|
|
|

ArcGIS Engine下实现地图输出

我们在用ArcGIS Engine定制开发的时候,常常需要将当前的地图文档输出,或者以bmp的形式拷贝到剪贴板,那么到底该如何实现这些操作呢?这篇文章将会给我们介绍两种常用的方法。 一、实现像ArcMap的Edit菜单下Copy Map to Clipboard 实际上AE并没有提...

作者:罗雄来源:ESRI中国(北京)有限公司|2008年09月18日
    我们在用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这个参数,可以设置1—5个级别的采样率,在输出图片很大的时候这个参数能提高图片的质量;

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

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

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

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

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

上一篇:一次性删除FeatureClass中的所有记录(要…

下一篇:ArcGIS Engine中文开发指南高清晰PDF版