利用Arcpy批量图斑生成图片

该博客介绍了如何使用Python的ArcPy库在ArcGIS环境中批量导出不同数据源的经典图斑图片。首先,确保拥有arcgis10.2.2环境和.GDB数据源及.mxd文件。接着,通过遍历图层和替换数据源,按属性选择图斑并缩放至其范围,最后导出为PNG图片。代码实现了自动化批量处理,提高了工作效率。
摘要由CSDN通过智能技术生成

任务需求

实际作业中,往往需要导出一些经典的案例图斑用作参考。而能称之为经典的图斑大部分都会来源于多个不同的数据源中。接下来就实现跨数据源根据指定BSM导出指定图斑图片:

环境与数据准备

1、arcgis10.2.2
2、准备一份数据源,此处使用GDB作为数据源。
3、准备提供地图要素参考信息的地图文档.mxd文件,可以在里面设置图斑信息。

在这里插入图片描述

代码实现

# encoding:utf-8
import os.path
import arcpy
import sys
import time

default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
    reload(sys)
    sys.setdefaultencoding(default_encoding)


def u(s):
    if isinstance(s, unicode):
        return s
    elif isinstance(s, str):
        try:
            return s.decode('utf-8')
        except Exception as e:
            pass
        try:
            return s.decode('cp936')
        except Exception:
            print 'Unknow coding of {0}'.format(s)
    else:
        return u(str(s))


if __name__ == '__main__':
    try:
        output_path = r'D:\批量照片导出测试'
        source_path = r'D:\批量照片导出测试\数据源.gdb'
        mxd_file = u(r'D:\批量照片导出测试\模板.mxd')
        tbbsms = ['A1', 'A2', 'B1', 'B2']  #

        arcpy.env.overwriteOutput = True
        start_time = time.time()
        my_mxd = arcpy.mapping.MapDocument(mxd_file)
        data_frame = arcpy.mapping.ListDataFrames(my_mxd)[0]
        tar_lyr = None
        for lyr in arcpy.mapping.ListLayers(my_mxd, "", data_frame):
            print lyr.name
            if lyr.name == 'DL':
                tar_lyr = lyr

        last_dataSource = tar_lyr.dataSource
        for bsm in tbbsms:
            tar_ly = bsm[0:1]
            next_dataSource = tar_ly
            if next_dataSource != last_dataSource:
                tar_lyr.replaceDataSource(source_path, 'FILEGDB_WORKSPACE', next_dataSource)
                last_dataSource = next_dataSource

            # 按属性选择
            arcpy.SelectLayerByAttribute_management(tar_lyr, "NEW_SELECTION", "BSM='{0}'".format(bsm))
            # tar_lyr.definitionQuery = 'BSM =' + "'" + bsm + "'"
            data_frame.zoomToSelectedFeatures()  # 缩放至选中要素
            arcpy.RefreshActiveView()  # 刷新活动视角
            # Export to picture format
            png_file = os.path.join(output_path, '{0}.png'.format(bsm))
            arcpy.mapping.ExportToPNG(my_mxd, png_file, data_frame, df_export_width=500, df_export_height=300,
                                      resolution=96)
            arcpy.AddMessage("{0} has been saved,Time {1}s".format("{0}.png".format(bsm), time.time() - start_time))

        del my_mxd

    except arcpy.ExecuteError:
        print arcpy.GetMessages()
    except Exception as e:
        print e.message

其中方法解释:
replaceDataSource:方法用于更改图层的工作空间或源数据集。
ExportToPNG:以PNG形式要导出数据框。

运行结果

执行上述代码后,在指定输出位置生成图片:
在这里插入图片描述

其中思路有来自于参考文档:
1、Python中ArcPy实现ArcGIS自动批量制图与地图要素批量设置
2、ArcGIS批量导出图片
3、Arcpy操作


沾衣欲湿杏花雨,吹面不寒杨柳风。 --释志南《绝句》

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值