arcgis多个shp按掩膜提取多个栅格数据

类似这种样式,多个shp文件裁剪一个栅格文件,但栅格文件不止一个。
前提:具有相同的坐标系,且对应着

借鉴的文章:

http://t.csdnimg.cn/xm37cicon-default.png?t=N7T8http://t.csdnimg.cn/xm37c在此基础上修改的批量处理方法(python),需要os,geopandas,rasterio库,没有可以用pip命令来下载。

import os  
import geopandas as gpd  
import rasterio  
from rasterio.mask import mask  
  
# 假设所有shp文件都在一个文件夹内,所有tif文件(不同时间点的数据)在另一个文件夹内  
shp_folder = r'G:/arcgis_2023_9/nation_shpe'  
tif_folder = r'H:/Snow/unint'  
output_folder = r'H:/Snow/shape'  
  
# 加载所有的shp文件  
shp_files = [os.path.join(shp_folder, f) for f in os.listdir(shp_folder) if f.endswith('.shp')]  
  
# 加载所有的tif文件  
tif_files = [os.path.join(tif_folder, f) for f in os.listdir(tif_folder) if f.endswith('.tif')]  
  
# 裁剪函数  
def clip_tif_by_shp(tif_path, shp_path, output_path):  
    gdf = gpd.read_file(shp_path)  
    with rasterio.open(tif_path) as src:  
        out_image, out_transform = mask(src, gdf['geometry'], crop=True)  
        out_meta = src.meta.copy()  
        out_meta.update({"driver": "GTiff",  
                         "height": out_image.shape[1],  
                         "width": out_image.shape[2],  
                         "transform": out_transform})  
        with rasterio.open(output_path, "w", **out_meta) as dest:  
            dest.write(out_image)  
  
# 为每个shp文件和每个tif文件执行裁剪操作  
for shp_path in shp_files:  
    shp_basename = os.path.basename(shp_path).replace('.shp', '')  
    for tif_path in tif_files:  
        tif_basename = os.path.basename(tif_path)  
        output_filename = f"{shp_basename}_{tif_basename}"  
        output_path = os.path.join(output_folder, output_filename)  
        clip_tif_by_shp(tif_path, shp_path, output_path)  
  
print("Clipping completed!")

shp_folder是shp文件存储的路径

tif_folder 是要批处理栅格文件的路径

output_folder处理后的存储路径
最后的结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值