Arcpy批量导出地图

Arcpy批量导出地图

最近有些学习和工作都涉及到地图的输出,利用Arcmap制作专题图虽然较为方便,但是在地图数量非常多的情况下效率较低,因此考虑能不能使用Arcpy来实现地图的批量导出呢。

一、将要素类中的单个要素导出为地图

事先设置好mxd文档中的数据框、图层、布局视图等的样式,这里不赘述了,执行下列代码:

mxd = arcpy.mapping.MapDocument("D:/Desktop/test.mxd")
#图层
lyr = arcpy.mapping.ListLayers(mxd)[1]
#数据框
df = arcpy.mapping.ListDataFrames(mxd)[0]
rows = arcpy.SearchCursor(lyr)
for row in rows:
    geo = row.shape
    #要素名称字段
    name = row.getValue("name")
    #数据框范围以当前要素为中心
    df.panToExtent(geo.extent)
    arcpy.mapping.ExportToPNG(mxd, r"D:/Desktop/tu/" + name + ".png", 300)

对于栅格想要分幅输出可以使用数据驱动页面进行。

二、将文件夹下的多个要素类或栅格导出为地图

事先在mxd文档中设置好地图样式,添加图例、标题等要素:

在这里插入图片描述
数据源为中科院火石夜间灯光数据,数据来源:

https://www.zybuluo.com/novachen/note/1741875

  • 利用Arcpy批量输出栅格地图,这里实现了图例和标题随数据源变化的更新,以栅格数据示例代码如下:
import arcpy
import arcpy.mapping as mapping
from arcpy import env
import os


def Getrasterfiles():
    #数据目录
    arcpy.env.workspace = "D:/Desktop/tu"
    allfiles = arcpy.ListRasters("*","TIF")
    print allfiles
    return allfiles


allrasters = Getrasterfiles()
mxd = arcpy.mapping.MapDocument("D:/Desktop/test.mxd")
#上述mxd文档中的第一个数据框
df = arcpy.mapping.ListDataFrames(mxd)[0]

for raster in allrasters:
    #第一个图层;样式已事先设计完成;即标准化拉伸
    lyr = mapping.ListLayers(mxd)[0]
    oname=str(raster)
    name=oname.split(".TIF")[0]
    lyr.name = name #图层重命名,以在后续地图输出时图例能够动态变化
    #更新layer图层中的数据源,即选择文件夹中下一个栅格文件显示
    lyr.replaceDataSource("D:/Desktop/tu",  "RASTER_WORKSPACE", name)
    df.panToExtent(lyr.getSelectedExtent())
    #更改标题名称为对应的栅格文件名
    for elm in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):
       if elm.name == "title":
          elm.text = "Test"+"("+name+")"
    # 也可更新图层符号
    #获取事先设置好的名为leg的图例对象
    leg = arcpy.mapping.ListLayoutElements(mxd, "LEGEND_ELEMENT", "leg")[0]
    leg.updateItem(lyr)
    arcpy.RefreshActiveView()
    arcpy.RefreshTOC()
    arcpy.mapping.ExportToPNG(mxd, r"D:/Desktop/tu/" + name + ".png","PAGE_LAYOUT",300)

print 'ok'

若想要批量输出要素类专题图,则在上述基础上进行部分修改即可,例如:

arcpy.ListRasters("*","TIF") 修改为 arcpy.ListFeatureClasses()

输出结果:
在这里插入图片描述

不足

  • 从上图可以看出,图例的标题虽然被修改了,但其渲染值却没有发生变化,且在arcmap中手动更换数据源后,TOC中显示的范围值也不会发生改变:

在这里插入图片描述
如果各位能够找到解决办法,希望可以与我交流,谢谢。

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
arcpy是ArcGIS软件中的Python库,它可以用于自动化执行地理处理任务和地理数据处理。而数据驱动模块是arcpy中的函数之一,它可以通过指定数据源和模板来生成批量制图。 数据驱动模块的批量制图分为以下几步: 1. 定义数据源:使用arcpy中的函数获取需要制图的数据源,可以是数据库、文件夹中的文件或其他数据源。 2. 配置模板:使用arcpy中的函数指定制图所使用的模板,模板是包含地图布局、符号化样式和标注设置的地图文档。 3. 设置制图参数:使用arcpy中的函数设置制图过程中的一些参数,如地图范围、图层的可见性、图例的位置等。 4. 创建制图循环:使用arcpy中的循环语句(如for循环或while循环),遍历数据源中的每个数据,然后依次进行制图操作。 5. 制图操作:在每次循环中,使用arcpy中的函数将数据源中的数据加载到模板中,进行符号化、设置标注等操作,并输出制图结果。 6. 保存制图结果:使用arcpy中的函数将每次制图的结果保存为地图文档文件(.mxd),或者导出为图片文件等。 通过以上步骤的循环执行,可以实现批量制图的功能。整个制图过程可以根据实际需求进行自定义,如根据时间或名称对数据进行筛选、根据属性字段设置符号化样式等。 arcpy结合数据驱动模块的批量制图可以大大提高制图效率和准确性,尤其对于需要大量制图的情况下非常实用。它可以帮助用户在地理信息处理和制图领域实现自动化和批量操作,节省大量时间和人力成本。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值