当前位置:   article > 正文

Arcpy批量导出地图_arcpy 输出gdb里所有图层

arcpy 输出gdb里所有图层

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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

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

事先在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'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

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

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

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

不足

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/341104?site
推荐阅读
相关标签
  

闽ICP备14008679号