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

考虑到后续会有重复的大量的数据要处理,决定使用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批量打印地图的更多相关文章

  1. ArcGIS中国工具应用:固定比例尺固定纸张批量打印

    ArcGIS中国工具应用:固定比例尺固定纸张批量打印 下载地址:http://files.cnblogs.com/files/gisoracle/a3batchprint.zip 固定A3,比例尺1: ...

  2. (转: daifubing的博客 )Delphi二维码中文支持、分组、批量打印经验小结

    一直也没接触到什么复杂的报表,都是一些简单的报表,在DelphI下使用QuickReport一般也就能满足需要了,由于公司现在需求的变化,对条码扫描提出了新的要求,主要是扫码要包含更多地内容,以前的一 ...

  3. asp.net Lodop实现批量打印

    1.列表(前台) <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="w_stu ...

  4. .net 批量打印可实现方案

    最近几年一直在教育行业工作,主要负责竞赛类系统的开发工作,包括网上报名,安排考场,在线考试,学业报告书等. 打印功能在这个信息化时代非常普遍,浏览器都自带打印功能,通常的做法是调用 window.pr ...

  5. VS2012报表(RDLC)系列应用之单据批量打印

    一.前言 最近做的项目需要单据批量打印的功能,优先想到用RDLC来实现.经过Visual Studio几个版本的发展后,RDLC愈发成熟,操作方式也变得简洁,相比vs2005的版本,有质的提升,不过仍 ...

  6. [Q]关于不同比例、不同纸张大小图纸的批量打印

    不同比例或不同纸张大小的图纸可以一起批量打印,但目前打图精灵不能自动识别纸张大小,纸张大小是手动指定的,且只能指定一种纸张大小,但设置打印比例为“缩放到可打印区域”或“缩放到纸张边界”仍然可以将不同比 ...

  7. winfrom 实现条形码批量打印以及将条形码信息生成PDF文件

    最近,老大让给客户做个邮包管理程序.其中,包括一些基本信息的增.删.查和改,这些倒不是很难搞定它分分钟的事.其主要难点就在于如何生成条形码.如何批量打印条形码以及将界面条形码信息批量生成以其各自的 b ...

  8. 一键批量打印EXCEL、WORD文档

    一键批量打印EXCEL.WORD文档,本方法也可以打印同一个文档N份,可以批量打印A3.A4文档,包括单.双面打印等.希望能帮到广大朋友.请大家注重原创版权,不得在未经许可的下转载.传播,或者用来对同 ...

  9. arcgis api for js入门开发系列二十打印地图的那些事

    前面我写过关于利用arcgis api for js打印地图的,但是打印地图服务都是基于arcgis server发布的,arcgis api加载在线地图,比如天地图.百度地图.高德地图等,底图都是打 ...

随机推荐

  1. bower解决js库的依赖管理

    从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...

  2. 使用grid++report打印选中行

    接上一篇<hibernate+spring+mvc+Easyui框架模式下使用grid++report的总结>对grid++report做进一步开发 先写一下实现流程: 1.默认为全部载入 ...

  3. Jasper_plug_install

    1.open eclipse -> Help -> Eclipse Marketplace. 2.at new window, find jasper, will find Jaspers ...

  4. 深入理解Azure自动扩展集VMSS(1)

    前文中已经详细介绍了如何配置和部署Azure的虚拟机扩展集VMSS进行自动扩展,但在实际使用过程当中,用户会出现更进一步使用的一些问题,VMSS基本扩展原理及怎么简单调试?如何进行手动扩展?怎么使用自 ...

  5. Scala开发环境搭建

    Ubuntu14.04下Scala开发环境搭建. 1:安装JDK,jdk-6u45-linux-x64.bin 将其安装到/usr/lib/jvm/jdk1.6.0_45/. 2:安装Scala,下载 ...

  6. LeetCode_Populating Next Right Pointers in Each Node

    Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...

  7. 无法在People Picker中选择用户

    问题: 通过备份还原的方式(*.bak或者ContentDB备份还原)将某个网站集迁移到新的环境,无法在这个网站集中的任何站点选择用户,但是可以在其它网站集和管理中心选择用户. 我的环境是:Share ...

  8. 深入浅出Node.js (5) - 内存控制

    5.1 V8的垃圾回收机制与内存限制 5.1.1 Node与V8 5.1.2 V8的内存限制 5.1.3 V8的对象分配 5.1.4 V8的垃圾回收机制 5.1.5 查看垃圾回收日志 5.2 高效使用 ...

  9. mybatis源代码分析:深入了解mybatis延迟加载机制

    下文从mybatis(3.2.7)延迟加载样例讲起,逐步深入其实现机制. 下面的例子是Student类关联一个Teacher对象,在访问Student对象时,不立即加载其关联的Teacher对象,而是 ...

  10. javascript遍历Json对象个数

       var data={};     for (var d in data) {         $(data[d]).each(function (i, e) {             aler ...