您的位置:首页 > 其它

ArcGIS Engine下实现地图输出

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

一、实现像ArcMap的Edit菜单下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类型限制,如ExportBMP,ExportPNG、ExportJPEG等,下面以输出为JPEG格式来说明。
首先定义ExportJPEG的实例pExport,然后设置其相关的参数,过程比较简单,这里重点描述一下相关的参数设置。
方法:OutPut(hdc, Dpi, pixelBounds, VisibleBounds, TrackCancel )
1、这里hdc是输出设备,由pExport.StartExporting指定;
2、Dpi是输出图片的精度,但是这里这个resolution并不能改变图片的精度,无论设置多大的dpi,输出同一范围图片的大小、精度都是一样的。要想改变精度,得指定IOutputRasterSettings::ResampleRatio这个参数,可以设置1—5个级别的采样率,在输出图片很大的时候这个参数能提高图片的质量;
3、PixelBounds设置的是输出像素所占的范围;
4、VisibleBounds指定地图可视的范围,这个范围是以地图坐标为单位的,以当前MapExtent为基准来控制放大、缩小视图;
5、还有个参数是pExpotrt.PixelBounds,定义的是输出图片的大小,即图片尺寸,相当于画布大小。当输出像素的范围大于图片大小的时候就会裁切图片,只输出部分地图;当它小于图片尺寸时地图会缩小到画布的一角。
综上所述,VisibleBounds或者像素范围和图片大小都可以设置地图的输出范围,一般按照具体的需要采用其中一种就可以了。
最后一点说明一下,DeviceFrame是当前设备范围,在ArcMap中就是地图所在的客户区,以左上角为起点(0,0);ExportFrame和DeviceFrame差不多,只是可能比前者略小一点;Map Extent一般是指地图范围,采用的是地图单位。整个AO体系里面有很多不同的Extent范围,弄清它们之间的关系对开发人员来说是很必要的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: