arcpy批量打印地图
有个处理数据的需求是把一个图层中的要素单独显示在底图上,设置固定的比例尺,并打印出图片。
考虑到后续会有重复的大量的数据要处理,决定使用arcpy处理。
首先新建一个mxd底图文档,把需要打印的地图都添加进来。在layout视图配置好出图样式,添加标题比例尺等挂件。标题中设置标识字段,在程序运行过程中会替换掉。

在layout视图下打开Python工具。

运行以下代码:
# 第一步,布局打印格式,必须添加标题(插入文本,内容“title”),可以设置比例尺,标注等。必须切换到布局窗口,否则比例尺刷新无效
import arcpy
import os
# 第二步:设置标题显示字段,shp文件的属性\字段\名称 例如:标题要显示权利人,titlefield就输入"qlr",区分大小写。
titlefield="QLR"
#设置唯一字段名称
objectidfield="FID"
#如果唯一字段是数值型的,此处值为 int ,字符型的为“string”
objectidfieldtype="int"
#文件名称后缀字段
filenamezfield="SHAPE_AREA"
filenamezfieldtype="int"
#设置图层图形字段,shp文件的属性\shp\名称 例如:shapefield就输入字段shp的名称,区分大小写。
shapefield="Shape"
#设置图层名称 按gis上图层显示的名称
layername="print"
#标题默认字符
titletext="title"
#设置图片存储路径,不能自动创建目录,必须输入已有目录,以双反斜杠为上下级目录间隔,结尾必须为双反斜杠。例如:"C:\\Users\\l\\Desktop\\print\\"。
filepath="C:\\Users\\l\\Desktop\\print\\"
i=1
#加载当前工作空间
mxd = arcpy.mapping.MapDocument("CURRENT")
#加载图层
layer=arcpy.mapping.ListLayers(mxd,layername)[0]
#定义图层定义查询
layer.definitionQuery="1=1"
arcpy.RefreshActiveView()
#定义图层游标
cursor=arcpy.SearchCursor(layername)
#遍历游标
for row in cursor:
text=row.getValue(titlefield)
objectid=row.getValue(objectidfield)
filenamez=row.getValue(filenamezfield)
print(row.getValue(titlefield))
# i<3表示输出2张以作测试
if i<100:
geo=row.getValue(shapefield)
#print(geo)
mxd.activeDataFrame.extent=geo.extent
titleelm=False
for elm in arcpy.mapping.ListLayoutElements(mxd,"TEXT_ELEMENT"):
if elm.text==titletext:
titleelm=elm
elm.text=text
try:
if objectidfieldtype=="int":
where=objectidfield+"= {0}".format(objectid)
else:
where=objectidfield+"= '{0}'".format(objectid)
layer.definitionQuery=where
mxd.activeDataFrame.scale=3000
arcpy.RefreshActiveView()
mxd.save()
filename=filepath+text+".jpg"
if os.path.exists(filename):
if filenamezfieldtype=="int":
filename=filepath+text+"({0}).jpg".format(int(filenamez))
else:
filename=filepath+text+"({0}).jpg".format(filenamez)
arcpy.mapping.ExportToJPEG(mxd, filename,"PAGE_LAYOUT",1753,1241,150)
except Exception,ex:
print ex
finally:
if titleelm:
titleelm.text=titletext
layer.definitionQuery="1=1"
arcpy.RefreshActiveView()
mxd.save()
print i
i=i+1
#del mxd
所有要素会一一打印,控制台输出打印进度。


arcpy批量打印地图的更多相关文章
- ArcGIS中国工具应用:固定比例尺固定纸张批量打印
ArcGIS中国工具应用:固定比例尺固定纸张批量打印 下载地址:http://files.cnblogs.com/files/gisoracle/a3batchprint.zip 固定A3,比例尺1: ...
- (转: daifubing的博客 )Delphi二维码中文支持、分组、批量打印经验小结
一直也没接触到什么复杂的报表,都是一些简单的报表,在DelphI下使用QuickReport一般也就能满足需要了,由于公司现在需求的变化,对条码扫描提出了新的要求,主要是扫码要包含更多地内容,以前的一 ...
- asp.net Lodop实现批量打印
1.列表(前台) <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="w_stu ...
- .net 批量打印可实现方案
最近几年一直在教育行业工作,主要负责竞赛类系统的开发工作,包括网上报名,安排考场,在线考试,学业报告书等. 打印功能在这个信息化时代非常普遍,浏览器都自带打印功能,通常的做法是调用 window.pr ...
- VS2012报表(RDLC)系列应用之单据批量打印
一.前言 最近做的项目需要单据批量打印的功能,优先想到用RDLC来实现.经过Visual Studio几个版本的发展后,RDLC愈发成熟,操作方式也变得简洁,相比vs2005的版本,有质的提升,不过仍 ...
- [Q]关于不同比例、不同纸张大小图纸的批量打印
不同比例或不同纸张大小的图纸可以一起批量打印,但目前打图精灵不能自动识别纸张大小,纸张大小是手动指定的,且只能指定一种纸张大小,但设置打印比例为“缩放到可打印区域”或“缩放到纸张边界”仍然可以将不同比 ...
- winfrom 实现条形码批量打印以及将条形码信息生成PDF文件
最近,老大让给客户做个邮包管理程序.其中,包括一些基本信息的增.删.查和改,这些倒不是很难搞定它分分钟的事.其主要难点就在于如何生成条形码.如何批量打印条形码以及将界面条形码信息批量生成以其各自的 b ...
- 一键批量打印EXCEL、WORD文档
一键批量打印EXCEL.WORD文档,本方法也可以打印同一个文档N份,可以批量打印A3.A4文档,包括单.双面打印等.希望能帮到广大朋友.请大家注重原创版权,不得在未经许可的下转载.传播,或者用来对同 ...
- arcgis api for js入门开发系列二十打印地图的那些事
前面我写过关于利用arcgis api for js打印地图的,但是打印地图服务都是基于arcgis server发布的,arcgis api加载在线地图,比如天地图.百度地图.高德地图等,底图都是打 ...
随机推荐
- Core Data的使用(二)备
一.基础概念深入 1.NSManagedObjectContext 被管理数据上下文就像便笺簿 当从数据持久层获取数据时,相当于把这些临时的数据拷贝写在便笺簿上,然后就可以随心所欲的修改这些值. 通过 ...
- Autolayout-VFL语言添加约束-备
一.VFL语言简介 VFL(Visual format language)语言是苹果为了简化手写Autolayout代码所创建的专门负责编写约束的代码.为我们简化了许多代码量. 二.使用步骤 使用步骤 ...
- [POJ] 2453 An Easy Problem [位运算]
An Easy Problem Description As we known, data stored in the computers is in binary form. The probl ...
- [Codeforces Round #237 (Div. 2)] A. Valera and X
A. Valera and X time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- php爬虫的两种思路
写php爬虫可能最大的问题就是php脚本执行时间的问题了,对于这个问题,我找到了两种解决方法. 第一种通过代码set_time_limit(0)或者ini_set("max_executio ...
- ubuntu及终端快捷键
1.关于终端的快捷键: Tab:tab键是比较常用的一个快捷键,它的作用是补全文件名或者路径.举例 来说,输入”cd /ho”在按一下tab键,终端里就会显示”cd /home”了.如果您的文件夹下, ...
- BIT_COUNT()和BIT_OR()
在学习MySQL手册时,看到根据天数计算访问量时,出现了BIT_COUNT()和BIT_OR()两个函数来处理天数计算的问题 所使用的表格信息如下: mysql> select year,mon ...
- 转:SVN 出现This client is too old to work with working copy...错误
本地进行SVN客户端版本更新,但是之前一些代码是用的旧svn客户端提交的,这时候进行代码更新或者提交代码可能会出现错误,我这边是NetBeans中提交代码就出现了以下错误:This client is ...
- IO-APIC
MP-BIOS bug :8254 timer not connected to IO-APIC解决办法 云计算中在基于一个template image instance vmServer时出现上述的 ...
- 第05讲- DDMS中logcat的使用
第05讲 DDMS中logcat的使用 1.DDMS DDMS 的全称是Dalvik Debug Monitor Service,是 Android 开发环境中的Dalvik虚拟机调试监控服务.DDM ...