zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    类 7.2访问控制与封装 笔记
    第七章 类(class)7.1 笔记
    10.4.3反向迭代器Reverse_iterator笔记
    10.4再探迭代器笔记
    10.3.4参数绑定 bind
    10.3lambda表达式笔记
    第10章 10.1-10.3笔记
    关于按下ctrl+z后,之后的cin失效的问题
    构造和改变一个string的其他方法
    BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解
  • 原文地址:https://www.cnblogs.com/Leechg/p/5391840.html
Copyright © 2011-2022 走看看