arcpy批量打印地图

有个处理数据的需求是把一个图层中的要素单独显示在底图上,设置固定的比例尺,并打印出图片。

考虑到后续会有重复的大量的数据要处理,决定使用arcpy处理。

首先新建一个mxd底图文档,把需要打印的地图都添加进来。在layout视图配置好出图样式,添加标题比例尺等挂件。标题中设置标识字段,在程序运行过程中会替换掉。

 

在layout视图下打开Python工具。

运行以下代码:

 1 # 第一步,布局打印格式,必须添加标题(插入文本,内容“title”),可以设置比例尺,标注等。必须切换到布局窗口,否则比例尺刷新无效
 2 import arcpy
 3 import os
 4 # 第二步:设置标题显示字段,shp文件的属性\字段\名称 例如:标题要显示权利人,titlefield就输入"qlr",区分大小写。
 5 titlefield="QLR"
 6 #设置唯一字段名称
 7 objectidfield="FID"
 8 #如果唯一字段是数值型的,此处值为 int  ,字符型的为“string”
 9 objectidfieldtype="int"
10 #文件名称后缀字段
11 filenamezfield="SHAPE_AREA"
12 filenamezfieldtype="int"
13 #设置图层图形字段,shp文件的属性\shp\名称 例如:shapefield就输入字段shp的名称,区分大小写。
14 shapefield="Shape"
15 #设置图层名称 按gis上图层显示的名称
16 layername="print"
17 #标题默认字符
18 titletext="title"
19 #设置图片存储路径,不能自动创建目录,必须输入已有目录,以双反斜杠为上下级目录间隔,结尾必须为双反斜杠。例如:"C:\\Users\\l\\Desktop\\print\\"。
20 filepath="C:\\Users\\l\\Desktop\\print\\"
21 i=1
22 #加载当前工作空间
23 mxd = arcpy.mapping.MapDocument("CURRENT")
24 #加载图层
25 layer=arcpy.mapping.ListLayers(mxd,layername)[0]
26 #定义图层定义查询
27 layer.definitionQuery="1=1"
28 arcpy.RefreshActiveView()
29 #定义图层游标
30 cursor=arcpy.SearchCursor(layername)
31 #遍历游标
32 for row in cursor:
33     text=row.getValue(titlefield)
34     objectid=row.getValue(objectidfield)
35     filenamez=row.getValue(filenamezfield)
36     print(row.getValue(titlefield))
37     # i<3表示输出2张以作测试
38     if i<100:
39         geo=row.getValue(shapefield)
40         #print(geo)
41         mxd.activeDataFrame.extent=geo.extent 
42         titleelm=False
43         for elm in arcpy.mapping.ListLayoutElements(mxd,"TEXT_ELEMENT"):
44             if elm.text==titletext:
45                 titleelm=elm
46                 elm.text=text
47         try:
48             if objectidfieldtype=="int":
49                 where=objectidfield+"= {0}".format(objectid)
50             else:
51                 where=objectidfield+"= '{0}'".format(objectid)
52             layer.definitionQuery=where
53             mxd.activeDataFrame.scale=3000
54             arcpy.RefreshActiveView()
55             mxd.save()
56             filename=filepath+text+".jpg"
57             if os.path.exists(filename):
58                 if filenamezfieldtype=="int":
59                     filename=filepath+text+"({0}).jpg".format(int(filenamez))
60                 else:
61                    filename=filepath+text+"({0}).jpg".format(filenamez)
62             arcpy.mapping.ExportToJPEG(mxd, filename,"PAGE_LAYOUT",1753,1241,150)
63         except Exception,ex:
64             print ex
65         finally:
66             if titleelm:
67                 titleelm.text=titletext
68                 layer.definitionQuery="1=1"
69                 arcpy.RefreshActiveView()
70                 mxd.save()
71         print i
72         i=i+1
73 
74 
75 
76 #del mxd

所有要素会一一打印,控制台输出打印进度。

 

posted @ 2016-04-26 16:27  leechg  阅读(1882)  评论(0编辑  收藏  举报