第6章 地图导出.docx
- 文档编号:9350720
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:33
- 大小:878.17KB
第6章 地图导出.docx
《第6章 地图导出.docx》由会员分享,可在线阅读,更多相关《第6章 地图导出.docx(33页珍藏版)》请在冰豆网上搜索。
第6章地图导出
第六章:
地图导出
GIS专业人员的一个主要任务就是制作地图。
对制作地图的要求就是在一个印刷页面上介绍地理数据库里的信息。
这些印刷的地图涉及到用于展览的大面积墙纸地区图,甚至用于总结的报道、杂志和教科书的小印刷体。
ARCMAP对象通常用于展现数据以及在页面上的其他信息;OUTPUT对象通常用于将页面上的信息导出到一个输出设备或者文件。
这一章所要讨论的问题就是怎么应用OUTPUT类到硬件,比方说用于打印机或者输出到JPEG|、PostScript、Metafile等格式的文件。
两个主要的输出对象一个是支持输出大硬件设备的打印机,另一个则是控制将输出到一个文件的输出接口。
当需要将信息合并到一个新文档或网页是通常采用文件的形式操作。
6.1印刷对象
6.1.1Printer抽象类
三个printerobjects是从Printerabstractclass继承得来的,包括EmfPrinter、ArcPressPrinter、PsPrinterobject。
每一个类都支持对应硬件输出的印刷操作,但他们是用不同的方法来实现。
应刷类的选择与你想用那种应刷设备和你拥有那些设备有关。
IPrinter接口是通过所有的应刷类来实现的.
paper成员根据应用启动的容错性应刷系统初始化。
每使用一种不同的应刷机都得构建自己的paperobject。
PrintToFile成员使得输出到文件变得可能。
DoesDriverSupportPrinter方法允许开发者决定那种特定的印刷机能和当前的驱动一起使用。
使用StartPrinting方法能返回一个hdc变量,能被IActiveView:
:
Output引用,输出致某打印设备。
IPrinter:
:
FinishPrinting用来定义发送至输出设备的各种信息流。
下边是一个VBA代码利用EmfPrinterobject输出的例子。
PublicSubPrintLayout()
'Totest,addalayertothemap,andrunprocedure
DimpMxAppAsIMxApplication
DimpMxDocAsIMxDocument
SetpMxApp=Application
SetpMxDoc=ThisDocument
DimpPrinterAsIPrinter
DimpPaperAsIPaper
DimpPageLayoutAsIPageLayout
SetpPrinter=pMxApp.Printer
SetpPrinter.Paper=pMxApp.Paper
SetpPageLayout=pMxDoc.PageLayout
DimpActiveViewAsIActiveView
SetpActiveView=pMxDoc.ActiveView
DimdeviceframeAstagRECT
DimpDeviceFrameAsIEnvelope
'Nowsettheprinterobjectwiththecorrectproperties
SetpDeviceFrame=NewEnvelope
pPageLayout.Page.GetDeviceBoundspPrinter,1,0,pPrinter.Resolution,_
pDeviceFrame
deviceframe.Left=pDeviceFrame.xmin
deviceframe.top=pDeviceFrame.ymin
deviceframe.Right=pDeviceFrame.XMax
deviceframe.bottom=pDeviceFrame.YMax
'GettheVisibleBoundsifweareinPageLayoutView
DimpVisibleBoundsAsIEnvelope
DimpPageLayoutViewAsIActiveView
SetpPageLayoutView=pPageLayout
IfTypeOfpActiveViewIsIPageLayoutThen
SetpVisibleBounds=NewEnvelope
pPageLayout.Page.GetPageBoundspPrinter,0,0,pVisibleBounds
EndIf
DimpEmfPrinterAsIEmfPrinter
SetpEmfPrinter=pPrinter
'NeedtooffsetdeviceBoundsbyxminandyminmarginsonlyforEmfPrinter
IfTypeOfpPrinterIsIEmfPrinterThen
DimpPrintableBoundsAsIEnvelope
SetpPrintableBounds=pPrinter.PrintableBounds
DimdXminAsDouble
DimdYminAsDouble
dXmin=pPrintableBounds.xmin
dYmin=pPrintableBounds.ymin
deviceframe.Left=deviceframe.Left-(dXmin*pPrinter.Resolution)
deviceframe.top=deviceframe.top-(dYmin*pPrinter.Resolution)
deviceframe.Right=deviceframe.Right-(dXmin*pPrinter.Resolution)
deviceframe.bottom=deviceframe.bottom-(dYmin*pPrinter.Resolution)
EndIf
DimlHDCAsLong
lHDC=pPrinter.StartPrinting(pDeviceFrame,0)
pActiveView.OutputlHDC,pPrinter.Resolution,deviceframe,_
pVisibleBounds,Nothing
'finishingtheprintingwillflusheverythingouttotheprintspooler
pPrinter.FinishPrinting
EndSub
6.1.2EmfPrinter组件类
Emfprintercoclass是一种printer类能起到作为生成windows增强型图元文件的驱动作用。
IEmfprinter是Emfprintercoclass的唯一接口。
该接口没有成员或方法,通常用于判断你的printerobjects是否属于Emfprinter类。
下边的VBA代码程序显示了这个过程,其中pPrinter是IPrinter类型。
IfTypeOfpPrinterisIEmfPrinterthen
DimpEmfasIEmfPrinter
SetpEmf=pPrinter
EndIf
ARCPRESSPRINTER组件类
ArcpressPrinter派生类是在printerobject中代表
驱动。
Arcpress是ESRI的制图光栅,它有三个基本组成部分形成:
图形解释器,光栅扫描器以及几个输出过滤器。
地图解释器能适应PostScript文件,CGM文件以及所有的ESRI文件格式。
地图解释器将输入转换成PostScript图元文件的中介,然后rasterizer将中介格式的文件转换成纯光栅图元文件。
光栅图元文件能根据你得需要在过printerdriver或位图输出驱动后被过滤。
在尝试使用这个类时要确保你以及将Arcpress安装到系统,ArcpressPrinter派生类提供了连接到驱动的路径但在控制过程中提供的控制甚少。
下边要讨论到的ArcpressPrinterDriver能同于与ArcpressPrinterobjects一起使用来设置附加的输入参数。
IArcpress接口使你能够确认一个 printerobjects是否为ARcpressprinter类。
接口上唯一的成员Driver能使你设置和得到在通过Arcpress输出时要用哪个驱动。
6.1.3ArcPressPrinterDriver组件类
ArcpressprinterDriver是负责当你要通过Arcpress导出时的派生类。
由于对象类的接口的支持,你就能够设置需要的参数,使用那种颜色,确保从ArcPress对象的正常输出都能得到设置。
当你想要控制Arcpress使用的参数来生成硬件输出时就可以使用连接中的类。
IArcpressPrinterDriver接口设置了供Arcpressdriver使用的一系列的输入参数。
CreateRaster用于生成基于PostScript输入文件的印刷格式文件,所生成的文件能发送致输出。
DiberDescription,DitberDescriptionHelpText以及DriverDitber属于当输出设备不能支持所发送的颜色种类时替代的方法。
抖动涉及到颜色的显示,具体来说颜色应该是一致的党看起来有一定量的其他颜色。
当输出设备不能满足设定的颜色种类时使用DriverDitber参数能制定使用那种抖动算法。
用IActiveView:
:
Output声明来使用Resolution和Printablebounds成员来匹配输出设备的页面大小和决议。
IColorCorrection接口是通过ArcpressPrinterDriver派生类和其他类来执行的。
它使得用户能在Arcpressdriver的CMYK和HLS两个模式内操作颜色变量。
当想调整Arcpressdriver默认设置的颜色参数时就使用这个接口。
SupportedColorCorrections能返回当前类所支持的数据类型。
其他成员使用这个值作为输入,所以最好在尝试用其他值之前检查该值。
6.1.4PsPrinter组件类
PsPrinter派生类是一种通过PostScriptdevicedriver来生成输出的printerobject。
这个派生类是PsDriver和FontMapEnvironment类的集合。
当需要通过PostScriptdriver来生成硬件输出是就可使用这个派生类。
IPsPrinter接口能让用户鉴别一个printer类是否为Psprinter类,能允许设定文件来接受输出。
下边的VBA代码程序就是使用PsPrinter和Printerobjects来发送地图数据到输出设备的例子。
其中ConvertRWTToPixels程序将当前的单元转换成像素。
DimpPsPrinterAsIPsPrinter
DimpPrinterAsIPrinter
DimlScreenResolutionAsLong
DimhDcAsOLE_HANDLE
DimuserRECTAstagRECT
DimpMxDocAsIMxDocument
DimpPaperAsIPaper
DimlDrvResolutionAsLong
DimpMxAppAsIMxApplication
DimpDriverBoundsAsIEnvelope,pEnvAsIEnvelope
SetpMxApp=Application
SetpMxDoc=ThisDocument
SetpPsPrinter=NewPsPrinter
SetpPrinter=pPsPrinter
SetpPrinter.Paper=pMxApp.Paper
lScreenResolution=_
pMxDoc.ActiveView.ScreenDisplay.DisplayTransformation.Resolution
lDrvResolution=screenResolution
pPrinter.Resolution=drvResolution
SetpEnv=pMxDoc.ActiveView.Extent
userRECT.Top=0
userRECT.Left=0
userRECT.Right=ConvertRWToPixels(pEnv.Width)
userRECT.bottom=ConvertRWToPixels(pEnv.Height)
SetpDriverBounds=NewEnvelope
pDriverBounds.PutCoordsuserRECT.Left,userRECT.bottom,_
userRECT.Right,userRECT.Top
hDc=pPrinter.StartPrinting(pDriverBounds,0)
pMxDoc.ActiveView.OutputhDc,lScreenResolution,userRECT,pEnv,Nothing
pPrinter.FinishPrinting
Spot模板用于将颜色隔离来生成CMYK模板。
ISpotPlateCollection使得生成基于在CMYK颜色模型下的单独色彩模板变得可能。
这些模板之后就能供给印刷商来制作印刷材料。
ISpotPlateCollection接口包括一系列的单独的SPotPlateobjects。
用户能够同过这个接口添加,删除,保存已定义好的SpotPlateobjects。
详情请见在本章后边关于SpotPlate和FontMapEnvironment的话题。
IFontMapEnvironment interface在FontMapEnvironment中有备份文档材料。
6.1.5PsDriver组件类
PSDriver派生类和FontMapEnvironment类一同被集合到PsPrinter派生类当中,这个类能提供不同的参数的设置且可通过PosrScriptdriver在输出的时候被设置。
PsPrinter派生类集合的PSDriver派生类,PSDriver接口就能从PsPrinter中得到。
例如,有一个名为pPSPrinter的类定义为IPSPrinter类型,下边的VBA代码就能在PSDriver派生类中访问IPsDRiver接口。
DimpPsDriverasIPSDriver
SetpPsDriver=pPsPrinter
通过合并,IPSDriver接口也能得到PsPrinter对象的支持。
接口能访问参数的设置,从而能改变有PostScript驱动产生的输出。
ArcPressSeparateImage和ArcPressSeparateImageRotate成员能产生供ArcPress使用的独立的图像。
CreatePs产生一个EMF文件来作为PostScript文件的输入、输出。
IColorCorrection接口在ArcPressPrinterDriver中有文档说明。
6.1.6SpotPlate和FontMapEnvironment组件类
SpotPlate派生类能生成基于具体颜色的独立模板。
每个模板包括描绘每个具体像点的颜色信息。
SpotPlate类由PSDriver派生类当中的ISpotPlate接口控制。
当需要生成与印刷无关的颜色是可使用这个类。
ISpotPlate是SpotPlate派生类中唯一支持的接口,这个接口允许用PostScript来产生颜色的分离。
SpotPlate对象由PSDriver派生类中的ISpotPlate接口对象来控制,使用这个派生类需要生成独立于印刷目的的颜色。
ISpotPlate是由SpotPlate派生类所支持的唯一接口。
这个接口允许用PostScript驱动来生成独立的颜色(比如,青色,黄色,洋红,黑色等)。
颜色成员中有一个IPostScriptColor对象,能过设置各种颜色的饱和度以及套印参数。
FontMapEnvironment派生类是组成PsPrinter派生类中的集成类之一的类对象。
这个类对象用于决定由PostScript驱动产生所需的输出时使用的字体。
IFontMapEnvironment接口记录下了已经被定义的且可用来附加的容错设置的FontMap对象,当要控制由PostScript驱动的使用的字体集的时候可使用这个接口。
FontMapCollection成员允许返回一个collection对象来使用户来增加或删除FontMap对象。
因为FontMapCollection成员是只读的,因而用户不能够定义自己的FontMapCollection对象,必须造作已有的FontMapCollection对象。
6.1.7FontMapCollection和FontMap组件类
FontMapCollection对象的整个生命周期都紧紧和产生它的那个类联系在一起,比如PsPrinter或PsExporter,这个类控制FontMap对象来供PostScript驱动。
这种类型的对象由IFontMapEnvironment:
:
FontMapCollection返回。
使用这个类来调整地图字体环境。
IFontMapEnvironment:
:
FontMapCollection返回的collection是由一些值的,这些默认值是由系统定义的。
用户可添加新的FontMap对象到collection中。
IFontMapCollection是由FontMapCollection对象执行的接口。
这个接口是一个很典型的Collection接口,能允许FontMap对象从Collection中添加或删除。
这个接口能提供Collection中的单个类对象的数目和路径。
FontMap对象用于对FontMapCollection对象的总结。
FontMap对象的生命周期和FontMapCollection对象相关。
这个类的作用就是为字体成员有独立的字体。
成员能由PostScript驱动来产生硬件输出。
这些类型的对象可以被生成,但用户常常不能够设置新生成类的必须的参数。
IFontMap是FontMap类唯一执行的接口。
这个接口允许用户来检查被定义的制图字体。
C++程序员能通过IFontMap:
:
Mapping成员类定义额外的制图方法。
VB程序员能够使用IFontMap2:
:
SetMapping方法来定义额外的制图字体。
6.1.8Paper组件类
Paper对象是Printer对象所必须的重要对象之一。
Paper对象负责保持供Printer对象使用的纸张和印刷。
当应用开始的时候,Paper对象就能基于系统默认的印刷机自动生成。
当需要使用另外的一个印刷机时,必须通过PrinterName成员来定义Paper对象。
Paper对象能够通过IPrinter:
:
Paper来与Printer对象相联系。
Paper对象基本上就是对MicrosoftDevMode和DevNames参数的一个包装。
这两个操作系统统过应用程序接口来定义印刷环境。
PrinterInfo成员和Attab方法使用OLE_HANDLEs格式的指针。
由于这两个参数的指针的属性,VB开发者不能够很好的利用它们。
如下的VBA程序显示了怎样生成一个Paper对象,分派它到一个具体的设备,传递类对象到Printer对象。
DimpPaperAsIPaper
DimpPrinterAsIPrinter
DimpPsPrinterAsIPsPrinter
SetpPaper=NewPaper
pPaper.PrinterName="\\OMNI\Oakland"
SetpPsPrinter=NewPsPrinter
SetpPrinter=pPsPrinter
SetpPrinter.Paper=pPaper
IPaper接口允许用户来生成Paper对象和硬件设备之间的联系。
一旦联系形成,格式和Paper成员就能过通过接口找回和设置。
使用PrinterName属性来决定你要使用哪种Printer对象。
PrinterInfo成员返回的信息作为Attacb方法的输入。
然而有PrinterInfo返回的参数这是不能够由VB正确的处理,不要尝试用VB来处理PrinterInfo成员。
6.2输出对象
6.2.1Exporter抽象类
Exporter对象类控制软件复制的输出。
这个对象的主要目的就是要支持在它下边的子派生类型。
在具体的驱动下有七种支持文件的格式。
(DIB,CGM,EMF,JPEG,PodtScript,PDF以及TIFF),其中四种文件格式(JPEG,PCX,PNG和TIFF)。
每个生成的子类都是从Exporter对象中继承来的。
可以从Printer抽象类中的后代中雷生成文件输出,但你应该用这种方法尤其是当你计划待会儿在发送输出文件的时候。
印刷类生成一些印刷依靠的文件,但通常你不会要用到,除非你要要文件导向输出设备。
IExporter接口被所有的exporter对象支持,比如CGMExporter。
这个接口提供所有的常用参数(例如文件名和方法)来输出地图数据到文件,完成输出程序一般都要用到这个接口。
FileExtension,Filter,Name成员都是基于用户所定义的exporter类对象。
例如,生成一个JpegExporter对象,FileExtension就会是”.jpg”。
PixelBounds在输出文件具体中说明一个目标矩形。
StartExporting必须在输出程序中运行,它会返回一个在后续IActiveView:
:
Output中要用到的操作。
下边是一段通过JpegExporter对象使用IExporter接口的VBA代码
SubExport()
DimpExporterAsIExporter
DimpDri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第6章 地图导出 地图 导出