python遍历tif文件及裁剪

小编得到了一系列tif文件,但是这些文件并不是在一个文件夹内,而是分属于不同的子文件夹,因此,需要将它们从每一个子目录里面抽取出来,然后再对每一个文件进行裁剪,下面是详细的步骤!

1. glob库函数遍历文件

这里主要参考了下面博文中的知识进行文件的遍历

【Python】遍历文件夹下的所有文件(glob)_python glob.glob 遍历文件夹获取文件名称-CSDN博客

我需要的是所有子文件夹内的tif文件,所以只需要用到通配符(/**/*.tif)来获取tif文件,如下所示

import glob 

folder_path = '../yourpath'

# 使用glob来获取所有.tif文件的路径
tif_files = glob.glob(folder_path + '/**/*.tif', recursive=True)

如此便获得了116个tif文件 

2. gdal裁剪栅格数据

gdal是进行栅格数据处理的非常实用的python库,它具有丰富的函数可以实现对栅格的裁剪、掩膜、计算等各种各样的功能。

这里,裁剪栅格数据主要分为三个步骤

2.1 读取栅格数据

先利用gdal.Open函数打开tif文件,同时获取文件的长宽、数据类型、仿射变换信息等信息

from osgeo import gdal
import os
import numpy as np
from tqdm import tqdm

# 裁剪出7680*7680的矩形
for tif in tqdm(tif_files):
    img = gdal.Open(tif)
    geotransform = img.GetGeoTransform()
    projection = img.GetProjection()
    width = img.RasterXSize
    height = img.RasterYSize
    datatype = img.GetRasterBand(1).DataType

    out_width = 7680 if width > 7680 else width
    out_height = 7680 if height > 7680 else height

    #输出的数据
    out_data = img.ReadAsArray(0,0,out_width,out_height)

2.2 创建输出文件

先确定创建文件的格式,再输入创建文件的主要参数信息,完成输出tif文件的创建


    # 创建输出文件
    tif_driver = gdal.GetDriverByName('GTiff')
    basename = os.path.basename(tif)
    out_tif = os.path.join('your/out/path/', basename)
    out_img = tif_driver.Create(out_tif, out_width, out_height, 3, datatype)
    # 设置裁剪出来图的原点坐标
    out_img.SetGeoTransform(geotransform)
    # 设置SRS属性(投影信息)
    out_img.SetProjection(projection)

 同时,对于有地理坐标的栅格数据,记得要设置仿射变换和坐标信息

2.3 写入数据

逐波段将数据写入输出文件内,这里面需要注意到的是,写入文件的数据的大小一定要和前面创建的文件的大小(长乘宽)要一致,不然就会报错NoneType!

# 写入数据
    for i in range(3):
        out_img.GetRasterBand(i+1).WriteArray(out_data[i,:,:])
    out_img.FlushCache()
    out_img = None

 这样就顺利完成了对栅格数据的裁剪了。本期内容就到这里!

欢迎大家关注我的博客,我将努力分享一些有用的地理信息数据的处理小知识!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值