引言

本篇博客介绍如何使用arcpy.mapping模块来实现多个与地图生产和打印有关的地理处理任务。

ArcGIS10推出的arcpy.mapping模块提供了许多与自动化地图生产相关的功能。
arcpy.mapping模块可用于自动化地图生产,创建地图册,导出为图像或PDF文件以及创建并管理PDF文件。

1、创建布局元素的python列表

在地理处理脚本中,自动化地图生产的第一步通常是生成一个页面布局元素的列表。举个例子,你可能想在地图打印或创建PDF文件之前修改地图的标题。在本案例中,标题内容保存在一个文本元素中(text element)。你可以先生成一个地图页面视图中的文本元素列表然后再修改地图标题,其中第一步就是生成文本元素列表。

在arcpymapping模块中,每个布局元素都用布局元素类来表示。以下是一些布局元素类:

每一个元素赋唯一的元素名称,这样就可以在程序中访问这些元素。名称是在ArcMap中定义的。arcpy.mapping模块提供了一个ListLayoutElements()函数来返回包含所有页面布局元素的列表。在本案例中,你将学习如何使用ListLayoutElements()函数来生成页面布局元素列表。

import arcpy.mapping as mapping
mxd = mapping.MapDocument("CURRENT")
for el in mapping.ListLayoutElements(mxd):if el.name != "":print el.name

打印结果:

Crime_Inset
Alternating Scale Bar
Legend Test Performance
Crime Legend
North Arrow
Inset_Map
Test_Performance
Crime

2、为布局元素指定唯一的名称

当需要用地理处理脚本访问并更改一个特定的元素时,使用arcmap为所有的布局元素指定唯一的名称就显得尤为重要。比如,你可能需要更新公司logo的图标。不需要人工来更新所有的地图文档文件,你只需要编写一个地理处理脚本通过程序的方式让所有地图文档文件中使用新的图标。不过要实现这一想法,你就需要为页面布局元素赋予唯一名称,这样你就可以访问单个页面布局元素了。

3、使用ListLayoutElements()函数限制返回的页面布局元素

页面布局中会包含大量的页面布局元素,对于某个特定的地处理脚本而言,许多页面元素不需要的。ListLayoutElements()函数通过两个参数来限制返回的页面布局元素。第一个参数用来定义需要返回的元素类型,第二个参数使用通配符来查找要返回的元素。

import arcpy.mapping as mapping
mxd = mapping.MapDocument("CURRENT")
for el in mapping.ListLayoutElements(mxd,"LEGEND_ELEMENT","*Crime*"):print el.name

ListLayoutElements()函数可使用以下元素类型筛选关键字参数:DATAFRAME_ELEMENT,GRAPHIC_ELEMENT,LEGEND_ELEMENT,MAPSURROUND_ELEMENT,PICTURE_ELEMENT,TEXT_ELEMENT

4、更新布局元素的属性

页面布局元素的类型包括图形,图例,文本,地图以及图片等。每一个页面布局元素都对应了arcpy.mapping包中的一个类。你可以利用这些类提供的不同属性在程序中来更改元素。

DataFrame提供了访问地图文档中数据框属性的功能。该对象可使用地图单位也可以使用页面布局单位。比如像位置和大小等这类的页面布局属性可以通过elementPositionX,elementPositionY,elementWidth,elementHeight属性来设置。
GraphicElement是一个更为通用的元素类型,像插入表,图,轮廓线,标记,线以及多边形等图形都可以添加到页面布局中。如果你想通过Python脚本来访问每一个图形元素的话,你需要为每一个图形元素设置name属性(其他的页面布局元素同理)。
LegendElement提供调整图例位置和修改图例标题的功能,同时也提供访问图例项以及关联的父数据框的功能。LegendElement对象仅与单个数据框有关联。
MapsurroundElement包括指北针,图示比例尺以及文本比例尺,与LegendElement一样也是与单个数据框有关联。该对象包含的属性可以用于重新调整其在页面布局中的位置。
PictureElement指页面布局中的栅格或图片。该对象最常用的属性是获取并设置数据源,当你需要在多个地图文档中更新某个图片(比如说logo)的时候就会相当有帮助。比如,你可以编写脚本遍历所有的地图文档文件将当前的图片替换为新的logo图片。你还可以重新定位或缩放对象。
TextElement是指页面布局中的文本信息,包括插入的文本,注释,文本框以及标题等,但不包括图例标题以及插入图表中的文本。该对象提供的属性可用于修改文本字符串内容,这在需要在页面布局多个位置或多个地图文档中修改相同文本字符串的时候会极为有用。当然,该对象也支持重新定位文本的功能。

页面布局中的返回的每一个元素都是某类元素对象的一个实例。下述示例通过程序使用Legend对象中的title属性来更改Crime图例的标题并获取图例项所引用的图层对象列表。

import arcpy.mapping as mapping
mxd = mapping.MapDocument("CURRENT")
elLeg = mapping.ListLayoutElements(mxd, "LEGEND_ELEMENT","*Crime*")[0]
elLeg.title = "Crimes by School District"
for item in elLeg.listLegendItemLayers():print item.name

打印结果:

Burglaries in 2009
Crime Density by School District

每个页面布局元素均提供了一组属性和方法。在上述案例中,使用了Legend对象的title属性。此外,Legend对象的其他属性可以用于设置元素的宽度和高度,位置以及其他属性。而该对象的方法可以用于调整图例显示的列数,列出元素项以及移除和更新元素项等。

5、导出地图为pdf文件

  • 将页面布局导出为PDF文件
import arcpy.mapping as mapping
mxd = mapping.MapDocument("CURRENT")
mapping.ExportToPDF(mxd,r"c:\ArcpyBook\Ch4\Map_PageLayout.pdf")
  • 从已有的地图文档文件中打印一个特定的数据框
import arcpy.mapping as mapping
mxd = mapping.MapDocument("CURRENT")
for df in mapping.ListDataFrames(mxd):if df.name == "Crime":df.referenceScale = df.scalemapping.ExportToPDF(mxd,r"c:\ArcpyBook\Ch4\DataFrameCrime.pdf",df)

ExportToPDF()函数接受两个必选参数,包括一个地图文档文件的引用参数以及输出的PDF文件参数。

第一个脚本中,函数接受了地图文档引用参数和输出的PDF文件参数。我们并没有传递用来指定输出的数据框的可选参数,因此ExportToPDF()函数会输出地图页面布局。该函数还接受许多可选参数,包括一个指定的数据框参数以及许多与输出内容和输出文件的质量有关的参数。

第二个脚本就指定了要导出的数据框参数。你可以参考ArcGIS帮助页面来获取每一个可选参数的详细信息。

6、导出地图为图像文件

arcpy.mapping模块除了提供了将数据框和地图页面布局导出为PDF文件的功能外,还提供了许多可用于将地图内容导出为图片文件的函数。支持导出的图片格式包括AI,BMP,EMF,EPS,GIF,JPEG,SVG以及TIFF。每个函数接受的参数取决于所创建的图片类型。这些函数中就包括ExportToJPEG(),ExportToGIF()以及ExportToBMP()等。

import arcpy.mapping as mapping
mxd = mapping.MapDocument("CURRENT")
for df in mapping.ListDataFrames(mxd):if df.name == "Crime":mapping.ExportToJPEG(mxd,r"c:\ArcpyBook\Ch4\DataFrameCrime.jpg",df)

7、使用数据驱动页面和Arcpy制图模块构建地图册

桌面ArcGIS提供了使用数据驱动页面(Data Driven Pages)和arcpy.mapping模块高效创建地图册的功能。

步骤:

(1)在单个地图文档文件中,使用“数据驱动页面”工具条设置布局视图中的索引图层和操作数据,可以创建基础的系列地图。

参考链接:https://malagis.com/arcgis-mapping-works-6-make-atlas.html

(2)使用arcpy.mapping模块可以自动导出系列地图以及为单个地图册文档追加辅助文件等。

import arcpy
import os# Create an output directory variable
outDir = r"C:\ArcpyBook\Ch4"  # Create a new, empty pdf document in the specified output directory
finalpdf_filename = outDir + r"\MapBook.pdf"
if os.path.exists(finalpdf_filename):os.remove(finalpdf_filename)
finalPdf = arcpy.mapping.PDFDocumentCreate(finalpdf_filename)# Add the title page to the pdf
print("Adding the title page  \n")
finalPdf.appendPages(outDir + r"\TitlePage.pdf")# Add the index map to the pdf
print "Adding the index page  \n"
finalPdf.appendPages(outDir + r"\MapIndex.pdf")# Export the Data Driven Pages to a temporary pdf and then add it to the
# final pdf. Alternately, if your Data Driven Pages have already been
# exported, simply append that document to the final pdf.
mxdPath = outDir + r"\Topographic.mxd"
mxd = arcpy.mapping.MapDocument(mxdPath)
print("Creating the data driven pages \n")
ddp = mxd.dataDrivenPages
temp_filename = outDir + r"\tempDDP.pdf"if os.path.exists(temp_filename):os.remove(temp_filename)
ddp.exportToPDF(temp_filename, "ALL")
print("Appending the map series  \n")
finalPdf.appendPages(temp_filename)# Update the properties of the final pdf
finalPdf.updateDocProperties(pdf_open_view="USE_THUMBS",pdf_layout="SINGLE_PAGE")# Save your result
finalPdf.saveAndClose()# remove the temporary data driven pages file
if os.path.exists(temp_filename):print("Removing the temporary map series file")os.remove(temp_filename)# Delete variables
#del finalPdf, mxd, ddp

通常使用arcpy.mapping模块中的PDFDocument类来创建地图册。上述示例首先使用PDFDocumentCreate()函数,并传入输出的PDF文件的全路径,创建一个PDFDocument的实例;

其次,在PDFDocument实例中,两次调用PDFDocument.appendPages()方法,将已存在的标题页和地图索引文件插入到PDF中。

接着,从地图文档中检索dataDrivenPages对象,将该对象的每一页导出到单独的pdf文档中。

然后,将该文档追加到包含标题页和地图索引页的最终的pdf文件中。

最后,使用“USE_THUMBS”和"SINGLE_PAGE"参数更新PDFDocument的属性,保存整个文件,并删除临时的数据驱动页面文档。

参考链接:

https://www.jianshu.com/p/f8685f9f6cc1

基于ArcGIS的Python编程秘笈笔记(三):自动化地图制图和打印相关推荐

  1. arcgis下的python编程-基于ArcGIS的Python编程秘笈(第2版)

    基于ArcGIS的Python编程秘笈(第2版) 译者简介 审阅人简介 1 面向ArcGIS的Python语言基础 1.1 使用IDLE进行Python脚本开发 1.1.1 Python Shell窗 ...

  2. 《基于ArcGIS的Python编程秘笈(第2版)》——第1章 面向ArcGIS的Python语言基础

    本节书摘来自异步社区<基于ArcGIS的Python编程秘笈(第2版)>一书中的第1章,第1.1节,作者: [美]Eric Pimpler(派普勒) 更多章节内容可以访问云栖社区" ...

  3. 基于arcgis的python编程秘笈第2版_基于ArcGIS的Python编程秘笈(第2版)

    基于ArcGIS的Python编程秘笈(第2版) 译者简介 审阅人简介 1 面向ArcGIS的Python语言基础 1.1 使用IDLE进行Python脚本开发 1.1.1 Python Shell窗 ...

  4. 基于arcgis的python编程秘籍_基于ArcGIS的Python编程秘笈 第2版

    第1章 面向ArcGIS的Python语言基础1 1.1 使用IDLE进行Python脚本开发 2 1.1.1 Python Shell窗口 2 1.1.2 Python脚本窗口 3 1.1.3 编辑 ...

  5. arcgis字段计算器赋值_基于ArcGIS的python编程 18、在字段计算器中使用Python脚本

    很久没有更新专栏了,趁着五一劳动节,刚好有时间"劳动"一下,更新一下专栏的文章.接下来的文章是关于在ArcMap中的字段计算器中使用Python脚本:字段计算器中可以使用的脚本有两 ...

  6. 如何系统地自学python100天_Github上发布了一个Python学习秘笈,从萌新到王者的100天Python学习之旅...

    北京千锋互联科技有限公司成都分公司骆昊(jackfrued)在Github上发布了一个Python学习秘笈,从萌新到王者的100天Python学习之旅. 简单的说,Python是一个"优雅& ...

  7. pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存

    pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存 目录 输出结果 代码实现 输出结果 代码实现 # -*- codi ...

  8. 熊猫的python小课_朋友圈里那个可爱的小熊猫Python编程的学习笔记,学编程,不难!...

    Print( ) 详细请见公众号文章,里面有让人印象深刻,无法忘记的灵魂画手的图画解释.朋友圈里那个可爱的小熊猫Python编程的学习笔记,学编程,不难!​mp.weixin.qq.com 人类有人类 ...

  9. 《基于嵌入式实时操作系统的编程技术》笔记清单:第六章行为同步

    <基于嵌入式实时操作系统的编程技术>笔记清单:第三章任务划分. <基于嵌入式实时操作系统的编程技术>笔记清单:第四章任务设计. <基于嵌入式实时操作系统的编程技术> ...

最新文章

  1. 动态卷积超进化!通道融合替换注意力,减少75%参数量且性能显著提升 | ICLR 2021
  2. Java中的goto实现
  3. 【有三说图像】图像简史与基础
  4. android adm查看进程,基于android studio 的ADM对卡顿,耗时方法的检测
  5. 浪潮as5300技术方案_浪潮智能存储AS5300G2双活解决方案
  6. iOS GorupBy
  7. [html] 写页面布局时你有考虑过分辨率因素吗?还要考虑哪些因素呢
  8. VMware 克隆的相关设置
  9. python开发酷q插件gui_酷Q机器人插件开发笔记
  10. 【Lingo 18.0及其安装教程】
  11. 基于MediaTek_ApSoC_SDK_4320_20150414 编译mt7621 的uboot
  12. 深度学习--十折交叉验证
  13. CSS实现单行、多行文本溢出显示省略号(…)
  14. js 中的 let 关键字
  15. 会声会影2022版新版新增蓝光功能
  16. switch里面,一开头就放default是什么意思
  17. golang_微信头像过期失效
  18. 一次控制文件control file sequential read 等待性能案例分析
  19. 联想E420麦克风没有声音的方案
  20. 2022-2028全球与中国员工时间管理系统市场现状及未来发展趋势

热门文章

  1. 诗经2 国风-周南-葛覃
  2. 如何导出:swc、swf、fla内的声音文件
  3. 清华镜像pip安装命令
  4. Windows10黑色背景下看不清鼠标光标问题的解决
  5. 本地计算机无法启动theme服务,无法启动themes服务_Themes开机自动启动
  6. klouderr什么意思_cheerful是什么意思_cheerful的翻译_音标_读音_用法_例句_爱词霸在线词典...
  7. 电子手轮 (位置跟随,X轴或Y轴) 200smart、威纶通触摸屏
  8. 如何把html和css 结合,css-css和html的结合方式(四种结合方式)
  9. 错误UserWarning: semaphore_tracker: There appear to be 4 leaked semaphores to clean up at shutdown
  10. 测试金士顿固态硬盘软件,借装机之名测试SSD:金士顿的当红两款固态究竟如何?...