ArcGIS二次开发法——图层相关操作(添加、修改)

本文介绍了一种使用Python脚本批量更新ArcGIS地图文档的方法。该脚本能够自动遍历指定文件夹中的栅格数据和矢量数据,并将其加载到模板地图文档中,同时更新数据源并保存新的地图文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import arcpy
import os

waveHs = os.listdir('./tifs1')
waveHs = filter(lambda waveH: waveH.endswith('.tif'), waveHs)

waveCs = os.listdir('./contours1')
waveCs = filter(lambda waveC: waveC.endswith('.shp'), waveCs)

waves = zip(waveHs, waveCs)

tifpath = r'C:\Users\user\Desktop\SeaGIS\tifs1'
shppath = r'C:\Users\user\Desktop\SeaGIS\contours1'
n = 0
mxd = arcpy.mapping.MapDocument(r'C:\Users\user\Desktop\SeaGIS\MXD\Template.mxd')
for tif, shp in waves:
    print [tif, shp]
    tiflay = arcpy.mapping.Layer(r'C:\Users\user\Desktop\SeaGIS\MXD\Hs.lyr')
    shplay = arcpy.mapping.Layer(r'C:\Users\user\Desktop\SeaGIS\MXD\Contour.lyr')
    tiflay.replaceDataSource(tifpath, 'RASTER_WORKSPACE', tif[0:-4], True)
    tiflay.name = tif[0:-4]
    shplay.replaceDataSource(shppath, 'SHAPEFILE_WORKSPACE', shp[0:-4], True)
    # shplay.replaceDataSource(shppath, 'SHAPEFILE_WORKSPACE', shp, False)
    shplay.name = shp[0:-4]
    df = arcpy.mapping.ListDataFrames(mxd)[0]
    arcpy.mapping.AddLayer(df, tiflay)
    arcpy.mapping.AddLayer(df, shplay)
    n += 1
    if n == 24:
        end = int(tif[0:-4])
        start = end - 23 * 3600
        mxdname = str(start) + '_' + str(end) + '.mxd'
        mxd.saveACopy(r'C:\Users\user\Desktop\SeaGIS\MXD\{}'.format(mxdname))
        print r'C:\Users\user\Desktop\SeaGIS\MXD\{} has beed created!'.format(mxdname)
        del mxd
        mxd = arcpy.mapping.MapDocument(r'C:\Users\user\Desktop\SeaGIS\MXD\Template.mxd')
        n = 0
print 'ok!'

关键点:替换图层数据源,dataset_name 参数只需要文件名,不需要文件后缀,否则可能会报错,且工作空间路径最好写完整的绝对路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值