使用ArcPy制图模块实现网络电子地图打印.docx_第1页
使用ArcPy制图模块实现网络电子地图打印.docx_第2页
使用ArcPy制图模块实现网络电子地图打印.docx_第3页
使用ArcPy制图模块实现网络电子地图打印.docx_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子地图的打印输出就是将电子地图转化为纸质地图。与纸质地图相比,电子地图最显著的特征是数据的存贮与显示相分离。由此产生电子地图的一系列新特点,如动态性、交互性、多媒体集成性、多尺度性等。但电子地图具有很强的设备依赖性,且不如纸质地图直观1。所以有些情况下将电子地图打印输出为纸质地图,既利用了电子地图制作简单、省时省力的优势,又具有了纸张使用方便的特点,逐渐成为纸质地图生产的一种新方法2 打印和导出电子地图是我们使用ArcMap常做的事,但在网络电子地图上要实现相同功能还是挺坎坷的,大家做法不一:(1)浏览器插件,常见的就是IE的ActiveX,优点是在浏览器端可以进行简单的制图调整,但缺点也要命,只支持IE、IE各版本难兼容、安全性限制所以此方法基本过时;(2)Web Service,发布Web服务调用ArcEngine组件,优点是采用服务的方式,通用性好,缺点就是需要部署ArcEngine,且专门开发。还有没有更好的方法呢?基于第2种思路,我们可以采用Server本身具备的GeoProcessing功能服务来实现,其中关键技术点就是使用ArcPy 的制图模块。系统客户端界面 ArcPy?没听过ArcPy说明你有点小out了作为ArcGIS 10新的Python库,ArcPy除了继承原有功能之外还增加了制图模块(ArcPy.Mapping)。ArcPy制图模块提供了对AO的高级封装,通过调用一系列方法实现修改地图范围、比例尺、符号化、图幅整饰等要素,实现自动化的地图打印或导出。接下来我们一步步了解下实现的具体过程:1、 在Python脚本中添加ArcPy引用:import arcpy2、 获取GP服务的输入参数(地图标题、地图范围、比例尺、模板样式、坐标参考等):# 地图范围参数xMin = arcpy.GetParameterAsText(0)yMin = arcpy.GetParameterAsText(1)xMax = arcpy.GetParameterAsText(2)yMax = arcpy.GetParameterAsText(3)#坐标参考srValIn = arcpy.GetParameterAsText(4)srIn = arcpy.CreateObject(SpatialReference)srIn.loadFromString(srValIn)#地图比例尺mapScale = arcpy.GetParameterAsText(5)#地图模板mxd文档Layout = arcpy.GetParameterAsText(6)# 是否输出图层属性信息attributesFlag = arcpy.GetParameterAsText(7)if attributesFlag.lower() = true: layers_string = LAYERS_AND_ATTRIBUTESelse: layers_string = LAYERS_ONLY# 地图标题title = arcpy.GetParameterAsText(8)3、 打开选择的地图样式(Mxd模板),根据输入的参数修改其中的地图范围等信息:# 打开输入的地图模板mxd文档mxdName = os.path.join(LayoutRootPath, Layout) + .mxdmapDoc = arcpy.mapping.MapDocument(mxdName)# 指定地图范围和坐标参考dataFrames = arcpy.mapping.ListDataFrames(mapDoc)dataFrame. = dataFrames0dataFrameSR = dataFrame.spatialReference# 确保坐标参考一致pntInLL = arcpy.Point()pntInLL.X = xMinpntInLL.Y = yMinpntInUR = arcpy.Point()pntInUR.X = xMaxpntInUR.Y = yMaxpntGeomInLL = arcpy.PointGeometry(pntInLL,srIn)pntGeomInUR = arcpy.PointGeometry(pntInUR,srIn)pntGeomList = pntGeomList.append(pntGeomInLL)pntGeomList.append(pntGeomInUR)arcpy.CopyFeatures_management(pntGeomList, in_memory/extentPnts)rows = arcpy.SearchCursor(in_memory/extentPnts, , dataFrameSR)rows.reset()row = rows.next()newPntLL = row.shape.getPart(0)row = rows.next()newPntUR = row.shape.getPart(0)myExtent = dataFrame.extentarcpy.AddMessage(Old extent: %s %s %s %s % (myExtent.XMin, myExtent.YMin, myExtent.XMax, myExtent.YMax)myExtent.XMin = newPntLL.XmyExtent.YMin = newPntLL.YmyExtent.XMax = newPntUR.XmyExtent.YMax = newPntUR.YdataFrame.extent = myExtent# 打印制图内容nExt = dataFrame.extentnXMin = nExt.XMinnYMin = nExt.YMinnXMax = nExt.XMaxnYMax = nExt.YMaxnStr = %s %s %s %s % (nXMin, nYMin, nXMax, nYMax)myExtent = dataFrame.extentarcpy.AddMessage(New extent: %s %s %s %s % (myExtent.XMin, myExtent.YMin, myExtent.XMax, myExtent.YMax)#设置比例尺if mapScale != 0: dataFrame.scale = mapScale# 设置地图标题if title != : for elm in arcpy.mapping.ListLayoutElements(mapDoc, TEXT_ELEMENT): if elm.text = Map Title: elm.text = title4、 用导出方法,输出PDF或MXD文档到临时目录,代码如下:arcpy.AddMessage( Saving as PDF)# 输出到临时目录scratch = arcpy.env.scratchWorkspace#arcpy.AddMessage(scratch)#if not scratch: scratch = C:/TempOutputFile = os.path.join(scratch,Map.pdf)arcpy.mapping.ExportToPDF(mapDoc,OutputFile, layers_attributes=layers_string)5、 把输出的PDF或MXD文档的URL作为GP服务的输出参数,传给客户端,进行下载,代码如下:# 得到执

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论