应用场景:

最近在做某区退耕还林验收项目,要求按每个村出比例尺1:10000的JPG格式的图片,由于村比较多(接近400个,很多村在1:10000比例尺下无法显示完整,需要出多张图片),所以考虑批量完成该工作。

思路:

1.设定好MXD模板布局视图,调整好所有图例,将标题设置为变量,可以根据某个村的名字自动变化;

2.一个村无法只导出一张图片的情况,需要生成辅助图层分幅,分幅使用FME,生成图形的外接矩形,计算矩形长宽以及长宽/出图的幅宽,向上取整为倍数,使用切片工具按照两个倍数值进行切片,然后使用裁剪工具对原图形进行裁剪,只取出inside部分;

分幅之后大约有1000个图幅,后续再用造林小班和分幅图叠加,筛选出有叠加部分并排序,生成唯一字段。

3.在进行2步骤的时候,因为矩形之间有交叉部分必须要单独对每个图形进行处理,因此可以使用FME WORKSPACERUNER转换器循环执行,写入GDB文件中;

4.将GDB所有属性值导出为EXCEL文件待用;

5.根据4生成的EXCEL文件使用PYTHON生成若干个(数量和GDB文件中的矢量图形数量相等,名称和GDB文件中唯一值对应)MXD文档,待用;

6.使用ARCPY选中要素,缩放至选中要素,清除所选要素(注意这里有坑),更改标题变量值;

7.使用ARCPY导出JPEG图片。

具体步骤:

1 MXD模板制作

MXD模板制作有两个要点。

第一个是要对需要发生变化的文本、图例赋上唯一名称。右键选中文本或图例,点击“属性”→“大小和位置”→“元素名称”,自己按照需求添加。

第二个是要固定比例尺,因为不固定比例尺,在后续使用ARCPY缩放至选中要素功能时会自动缩放到不同的比例尺(每个村大小不同导致,也是因为如此需要分幅)。右键点击“图层”→“数据库”,设定“范围”为“固定比例”,比例调整为所需大小,此处我设置为1:10000.

2 行政村分幅

下图为FME模板

3 使用PYTHON生成MXD文档

考虑到需要对过程文件的记录,选择先生成MXD文档的方式(也可以在调整图形时直接生成),因为习惯用PYTHON3,所以这一步骤还是用的PYTHON3写的,比较简单,以下是代码。

# -*- coding: utf-8 -*-import shutil,sys
from openpyxl import load_workbook
old_file_path=r"F:\arcgis\2018.mxd"if __name__=='__main__':workbook=load_workbook(r'F:\arcgis\TEST.xlsx')sheet=workbook.get_sheet_by_name("CJ")rows=sheet.rowscols=sheet.columnsmax_rows=sheet.max_rowmax_columns=sheet.max_columnLfile=[]for i in sheet["H"]:if i.value!='IID':Lfile.append(i.value)print(Lfile)for i in Lfile:new_file_path=r"F:\arcgis\{0}.mxd".format(i)shutil.copyfile(old_file_path,new_file_path)

4 使用ARCPY生成重新生成MXD文档

必须使用arcgis自带的python,我使用的是arcgis10.3,自带python2.7,以下是代码。


# -*- coding: utf-8 -*-
import arcpy,os,sysreload(sys)
sys.setdefaultencoding( "utf-8" )def resetmxd(iid):filename="{0}.mxd".format(iid)mxd = arcpy.mapping.MapDocument(filename)lyr = arcpy.mapping.ListLayers(mxd)[0]  # 需要改动的图层,这里是选择要素的图层lyr1 = arcpy.mapping.ListLayers(mxd)[4]  # 需要缩放高亮显示的图层,可选df = arcpy.mapping.ListDataFrames(mxd)[0]rows = arcpy.SearchCursor(lyr)   #行数for row in rows:if row.getValue("IID")==iid:title=u'2018年度{0}退耕还林'.format(row.getValue("title"))query = "IID='{0}'".format(iid)      #检索条件print queryarcpy.SelectLayerByAttribute_management(lyr, "NEW_SELECTION", query)  # 选中一个新的要素df.zoomToSelectedFeatures()  # 缩放至选中要素el = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT")[-1]el.text = title  # 更新的是文本,不是教程上的元素名称arcpy.SelectLayerByAttribute_management(lyr, "CLEAR_SELECTION")  # 清除所选要素## arcpy.SelectLayerByAttribute_management(lyr1, "NEW_SELECTION", "FID=8")# # 选择是否高亮显示arcpy.mapping.MapDocument.save(mxd)  # 重新保存mxdarcpy.RefreshActiveView()     #刷新视图arcpy.RefreshTOC()del mxdif __name__=='__main__':L=['5002301002011', '5002301002001', '5002301002041', '5002301002042', '5002301002031', '5002301002032', '5002301002051', '5002301002052', '5002301002053']for i in L:resetmxd(i)

因为还在测试阶段,所以上述都是测试数据,比较乱,到时候拿到正式的小班数据后会对文档进行整理。

这里有个两个选择,第一高亮显示行政区(不能高亮显示分幅的行政区,看起来会很奇怪),第二不高亮显示行政区,这个按照自己的需求决定,所以这里有个坑:清除所选要素(不高亮显示)的方法还是SelectLayerByAttribute_management()不过第二个参数值需要改为“CLEAR_SELECTION”。

5 使用ARCPY出图


# -*- coding: utf-8 -*-
import arcpy,os,sysreload(sys)
sys.setdefaultencoding( "utf-8" )if __name__=='__main__':L=['5002301002011', '5002301002001', '5002301002041', '5002301002042', '5002301002031', '5002301002032', '5002301002051', '5002301002052', '5002301002053']for iid in L:filename = "{0}.mxd".format(iid)mxd = arcpy.mapping.MapDocument(filename)new_path='{0}.jpg'.format(iid)arcpy.mapping.ExportToJPEG(mxd,new_path,resolution=300)
ExportToJPEG方法参数参考文档:http://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy-mapping/exporttojpeg.htm

先记录大概的思路和过程,等项目完成再完善此文档,欢迎友好讨论!

[ARCGIS]使用ARCPY+PYTHON+FME批量出图相关推荐

  1. arcgis批量出图python代码_python使用arcpy.mapping模块批量出图

    出图是项目里常见的任务,有的项目甚至会要上百张图片,所以批量出土工具很有必要.arcpy.mapping就是ArcGIS里的出图模块,能快速完成一个出图工具. arcpy.mapping模块里常用的类 ...

  2. ArcGIS利用数据驱动工具条批量出图(python代码)

    一.设置数据驱动 参考文章: ArcGIS高级制图及批量出图使用数据驱动 二.在工作空间自动生成图片 1.PDF批量出图 参考阅读:ArcGIS批量出图操作流程(附练习数据下载) 目前在ArcGIS1 ...

  3. ArcGIS利用数据驱动工具条批量出图

    背景:分乡镇做300多个拆旧地块的调整完善局部图. 需求:导出图片时根据乡镇名称批量导出. 解决办法:数据驱页面即可请示解决 演示如下: 第一步:shp放到数据库中,标注转注记,然后编辑注记,符号样式 ...

  4. arcgis批量出图python代码_【GIS进阶】ArcGIS批量出图_定义出图

    今天的文章是浩哥投稿!!! 下图是我欢呼雀跃的样子~~~~~ 本文亮点: 所有步骤都是用ArcGIS中各种工具和软件操作组合,未使用Arcpy与Python等需要使用代码的工具! 这次的这个批量出图又 ...

  5. arcgis python脚本实现从界面选择输入输出_ArcGIS Python脚本实现数据驱动页面的批量出图...

    这里讲一下如何通过Python脚本实现数据驱动页面的批量出图. 1 前提条件 首先要知道的是数据驱动页面的导出必须启用驱动页面,同时地图文档必须处于布局视图中. 2 具体实现 准备好批量出图的Pyth ...

  6. Arcgis 按图斑批量出图(按卫片图斑批量出图) 批量出JPG图(一个图斑一个jpg,一条数据一个jpg)

    Arcgis 按图斑批量出图(按卫片图斑批量出图) 批量出JPG图 主要功能:按图斑批量出图 实际应用案例:有一个卫片图斑层(1.2.3卫片图斑),按1 2 3每个图斑出一个JPG图 主要参考文档:h ...

  7. ArcGIS批量出图操作流程(附练习数据下载)

    数据:烟威地区各县区划(文末有练习数据下载链接) 要求:批量生成各县区划范围图 下面开始操作: 1. 双击数据框,在框架中将背景调成蓝色. 图片将各县区划添加到数据框内,将区划颜色设置为绿色. 2. ...

  8. 用Python实现地理信息出图(含比例尺、指北针、图例)

    哈喽.哈喽大家好!! 最近浏览了不少代码,get到不少新的知识!!! 接下来就直接给大家分享一下,有需要的小伙伴直接打包带走就好了! 文章目录 前言 库函数准备 分段讲解 添加比例尺 添加比例尺 图像 ...

  9. arcgis批量出图python代码_ArcGIS批量出图_常规出图

    本文亮点:所有步骤都是用ArcGIS中各种工具和软件操作组合,未使用Arcpy与Python等需要使用代码的工具! 不知道身处国土行业的你是否经常因某个项目需要大量出图而苦恼,今天我就和大家说一下如何 ...

最新文章

  1. C++回顾day01---C++对C的增强
  2. linux 使用FIO测试磁盘iops
  3. 如何在python中构造想要的时间戳参数
  4. 随笔_拉普拉斯变换的困惑点
  5. 指针数组和数组指针的本质(四十一)
  6. Win11繁体中文字体显示不全如何解决?
  7. Promise.all的深入理解
  8. 吴伯凡-认知方法论-聪明人如何避免犯错误
  9. 2020 CSP-S第二轮认证一等奖获奖名单
  10. 用循环写出九九乘法表格。
  11. kali使用笔记本自带无线网卡_(小杨推荐)电脑无线上网+蓝牙解决方案
  12. Unity 贴花/喷漆功能的原理、Projector组件的原理与优化
  13. 详解String的intern方法
  14. 上帝模式下的shellcode
  15. [重装系统]戴尔DELL新BIOS设置U盘启动
  16. 基于vue3+ts+scss的后台管理系统(一)
  17. 合并多个文件的内容到一个文件
  18. 【流体机械原理及设计06】
  19. LintCode 买卖股票的最佳时机I II III IV
  20. sqlserver四舍六入五留双函数

热门文章

  1. 南京·六合首届创业大赛复赛圆满结束,30个项目晋级决赛!
  2. 鸿蒙测试没有mate40,华为Mate40系列屏幕镜头爆料,没有鸿蒙2.0依旧会真香
  3. 客服通话文本摘要提取比赛基线
  4. 混合云真香的背后,新趋势暗流涌动
  5. Sentinel-1号卫星精密轨道数据简单快速批量下载
  6. 计算机专业考研双非大学排名,【大学分析】去年计算机爆炸的双非浙江工业大学,今年分数大幅下降!...
  7. 【android】仿360手机卫士的简易设计思路及源码
  8. 新春全能手机必选项,荣耀10青春版成就品质生活!
  9. 【KITTI数据集Odometry序列00-10标定文件中的参数关系解读】
  10. 盈利不是最关注的问题,途牛另有生存法则?