ArcGIS利用Python批量导出JPG格式地图(修订版)

起因

最近项目需要打印大量图纸,手动导出效率低下,网上大量教程都是使用易智瑞默认输出方式,官方原代码地址与样式如下

mxd = arcpy.mapping.MapDocument("CURRENT")
for pageNum in range(1, mxd.dataDrivenPages.pageCount + 1):
  mxd.dataDrivenPages.currentPageID = pageNum
 arcpy.mapping.ExportToPNG(mxd, r"C:\Temp\ParcelAtlas_Page" + str(pageNum) + ".png")
del mxd

ArcMap帮助文档-导出数据驱动页面

调试

实际使用中,发现上述代码在一定情况下输出成果会没有正确识别到数据驱动索引,导致输出图纸都是一张,为了调试,在代码中增加输出log记录参数,跟同事多方搜索确认,重新调整后,确定缺少参数,调试log记录如下: 

2023-10-24 00:07:13,855 INFO: JCFW
2023-10-24 00:07:13,857 INFO: 整景.tif
2023-10-24 00:07:13,858 INFO: i.FID = 0
2023-10-24 00:07:13,858 INFO: pageNum = 1
2023-10-24 00:07:13,858 INFO: i.TFH = K44G083052
2023-10-24 00:07:13,858 INFO: i.FID = 1
2023-10-24 00:07:13,858 INFO: pageNum = 1
2023-10-24 00:07:13,858 INFO: i.FID = 2
2023-10-24 00:07:13,858 INFO: pageNum = 1
2023-10-24 00:07:13,861 INFO: layer.name =  JCFW
2023-10-24 00:08:34,377 INFO: JCFW
2023-10-24 00:08:34,378 INFO: 整景.tif
2023-10-24 00:08:34,378 INFO: i.FID = 0
2023-10-24 00:08:34,378 INFO: pageNum = 1
2023-10-24 00:08:34,380 INFO: i.TFH = K44G083052
2023-10-24 00:08:34,380 INFO: i.FID = 1
2023-10-24 00:08:34,380 INFO: pageNum = 1
2023-10-24 00:08:34,380 INFO: i.FID = 2
2023-10-24 00:08:34,380 INFO: pageNum = 1
2023-10-24 00:08:34,381 INFO: layer.name =  JCFW

log日志中发现,对应用于分幅的图框JCFW确实被识别,调用FID字段进行遍历数据行,输出文件所需要的名称字段TFH也能识别到,但是在输出PageNum却一直在单循环FID导致输出的实际文件均为同一张图片。

结果

为方便理解,调整后代码与注释如下所示:

#数据驱动批量导出调查底图(20231024修正)
import sys
#导入Python内置的sys模块,这个模块提供了一种与Python解释器进行交互的方式。
reload(sys)
#重新加载sys模块
sys.setdefaultencoding('utf8')
#设置Python的默认编码为'utf8'。
mxd = arcpy.mapping.MapDocument("CURRENT")
#创建一个地图文档对象,该对象名为"CURRENT",表示当前打开的地图文档
shp = 'JCFW'
#定义一个字符串变量shp,值为'JCFW',于后续查询或操作的图层或文件的标识,传入调取数据参数
field_name = 'TFH'
#定义一个字符串变量field_name,它的值为'TFH',调用传入数据的字段名称作为驱动字段
for pageNum in range(1, mxd.dataDrivenPages.pageCount + 1):
#这是一个for循环,声明数据变量为pageNum,基于数据驱动页面循环遍历地图文档中的每一页
   mxd.dataDrivenPages.currentPageID = pageNum
#将当前页设置为刚刚遍历到的页码pageNum,调用变量pageNum执行下步操作
   row = mxd.dataDrivenPages.pageRow
#pageCount 获取当前页的数据行属性,属性返回启用了“数据驱动页面”的地图文档 (.mxd) 的总页数。选中“显示页面”后在“数据驱动页面”工具条中显示此值;它代表 y 的第 y 页,共 x 页。
   arcpy.mapping.ExportToJPEG(mxd, r"D:\\图纸\\" + row.getValue(field_name) + ".jpg",resolution = 50)
#调用ExportToJPEG函数,将当前页的地图导出为JPEG格式的图片,图片的文件名是基于row中对应字段的值(通过row.getValue(field_name)获取)
#定义输出路径至D:\图纸\
#设置输出图片的分辨率为50dpi,(标准图幅使用300)
del mxd
#结束代码前删除地图文档对象mxd以释放资源

总结

易智瑞的帮助文档太坑人了,差了一个mxd.dataDrivenPages.pageRow参数就导致文件输出有问题。

如果要批量输出PDF或者PNG,只需要把第19行mapping.ExportToJPEG参数中的JPEG改成对应PNG或者PDF就可以。

修正代码引用:DataDrivenPages用于提供对已启用“数据驱动页面”的地图文档内管理各个页面的方法和属性的访问。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 要批量导出arcgis中的图片为jpg格式,可以采用以下步骤: 1. 确定需要导出的图层和区域。在arcgis中打开需要导出地图,选择需要导出的图层,然后缩放到需要导出的区域,可以使用鼠标滚轮或者缩放工具。 2. 打开导出窗口。点击File菜单,选择Export Map,或者使用快捷键Ctrl+Shift+E,打开导出窗口。 3. 设置输出格式。在导出窗口中,选择格式为JPEG,可以设置图片的质量、大小、分辨率等参数。建议设置质量为80%以上,分辨率和大小根据需要设定。 4. 设置输出路径和文件名。在导出窗口中,点击Save As按钮,选择需要保存的文件夹和文件名。建议使用批量命名方式,如map1.jpg、map2.jpg等。 5. 设置输出范围。在导出窗口中,选择Extent选项卡,可以设置输出范围为当前视图范围或者指定的范围。 6. 点击Export按钮,开始批量导出导出完成后,可以在指定的文件夹中查看导出的图片。 以上就是arcgis批量导出图片为jpg格式的步骤,操作简单,适用于大量图片的批量导出。 ### 回答2: 要批量导出ArcGIS中的图片为JPG格式,可以按照以下步骤进行操作: 1. 打开ArcGIS软件,并打开需要导出图片的地图或图层。 2. 在“图层列表”中,选择需要导出的图层,并右键点击选择“导出”。 3. 在弹出的“导出地图”窗口中,选择“文件”选项卡,并选择需要导出的文件夹路径和文件名。 4. 在“文件类型”下拉菜单中,选择“JPEG格式(.jpg)”。 5. 在“输出设置”栏中,可以对导出图片的分辨率、大小、地理参考等进行设置。 6. 点击“保存”按钮,开始导出图片。 7. 如果需要批量导出多张图片,可以通过使用Python脚本自动化完成。具体可参考ESRI官方文档或搜索相关教程。 总之,通过ArcGIS软件的导出功能和一定的设置操作,就可以轻松地将地图或图层批量导出JPG格式的图片。 ### 回答3: ArcGIS是专门用来创建、处理地理数据的软件,它支持批量导出地图和图片,包括JPG格式。 具体操作步骤如下: 1. 在ArcMap中打开需要导出图片的地图。 2. 点击“文件”菜单中的“导出地图”。 3. 在“导出地图”对话框中,选择“文件”作为导出格式,然后选择JPG格式。 4. 点击“选项”按钮设置导出图片的大小和分辨率等参数,并选择需要导出的图层。 5. 点击“保存”按钮选择保存的目录和文件名。 6. 点击“确定”按钮开始导出图片。 如果需要批量导出多张图片,可以使用ArcGIS的自动化批处理功能,具体步骤如下: 1. 创建一个文本文件,记录需要导出的图片文件名和导出路径。 2. 在ArcToolbox中选择“数据管理工具”下的“批处理”。 3. 在“批处理”对话框中,选择“输入文件”为上一步中创建的文本文件,选择“工具箱”为“导出地图”。 4. 设置其他参数后,点击“运行”按钮开始批量导出图片。 通过使用ArcGIS中的批处理功能,可以快速、高效地导出多张JPG格式的图片,大大提高了工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁华落尽烟雨凉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值