Python遥感开发之dat批量转tif掩膜裁剪

Python遥感开发之dat批量转tif掩膜裁剪

前言:使用numpy读取dat数据,再使用GDAL转成tif数据,再使用GDAL中的Warp方法进行掩膜裁剪。


了解dat数据

  • 遥感中的dat数据一般是由ENVI软件生成的遥感影像数据,每一条数据由xxx.dat和xxx.hdr两个文件组成,其中hdr里面存储了一些影像的遥感信息。

  • 一个遥感数据由dat和hdr两部分组成
    在这里插入图片描述

  • hdr存储的信息包括
    在这里插入图片描述

代码实现

  • 注意1:model中的tif数据是dat数据用argmap软件转的tif,目的是为了拿到遥感信息
  • 注意2:shp是掩膜裁剪的矢量图
  • 注意3:samples是列数,lines是行数,值可以在hdr文件里面拿到
import glob
import os

import numpy as np
from osgeo import gdal

def read_dat(file,samples,lines):
    data = np.fromfile(file, dtype=np.uint16)
    data.shape = [lines, samples]
    data = data.astype(np.float32)
    return data

def dat_to_tifdata(data,model,out_all_put):
    ds = gdal.Open(model)
    shape = data.shape
    driver = gdal.GetDriverByName("GTiff")
    dataset = driver.Create(out_all_put, shape[1], shape[0], 1, gdal.GDT_Float32)  # 以float类型进行存储
    dataset.SetGeoTransform(ds.GetGeoTransform())
    dataset.SetProjection(ds.GetProjection())
    dataset.GetRasterBand(1).WriteArray(data)
    return dataset

def get_filepath_dat(file_path):
    list1 = []  # 文件的完整路径
    list2 = [] #文件的名字
    if os.path.isdir(file_path):
        os.chdir(file_path)
        names = glob.glob("*.dat")  # 读取文件
        for f in names:
            list2.append(f)
            pre_data = file_path + '\\' + f  # 文件的完整路径
            list1.append(pre_data)
    return list1,list2

if __name__ == '__main__':
    model = r"C:\Users\Administrator\Desktop\model\dat1.tif"
    shp = r"D:\fly\研究方向\矢量图\江苏省\江苏省.shp"
    # dat = r"C:\Users\Administrator\Desktop\dat遥感\rad2000008.dat"
    dat = r"C:\Users\Administrator\Desktop\dat遥感"
    samples = 6164
    lines = 3540
    out = r"C:\Users\Administrator\Desktop\out"
    out_all = r"C:\Users\Administrator\Desktop\all"
    dat_path_list,dat_name_list = get_filepath_dat(dat)

    for dat_path,dat_name in zip(dat_path_list,dat_name_list):
        data= read_dat(dat_path,samples,lines)

        out_put = out + "\\" + dat_name + ".tif"
        out_all_put = out_all + "\\" + dat_name + ".tif"

        tif_data = dat_to_tifdata(data,model,out_all_put)
        gdal.Warp(out_put, tif_data, cutlineDSName=shp, cropToCutline=True)  # 按掩膜提取
        print(dat_name,"完成")

在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好,针对您的问题,可以使用Python中的GDAL库进行栅格数据的处理。以下是对于您提出的两个问题的解答: 1. 对于栅格TIF数据进行分割,您可以使用GDAL库中的gdalwarp函数进行裁剪。具体操作步骤如下: 第一步:导入GDAL库 ```python from osgeo import gdal ``` 第二步:打开TIF栅格数据 ```python dataset = gdal.Open('your_tif_file.tif') ``` 第三步:设置裁剪范围和输出栅格数据信息 ```python # 设置裁剪范围 x_min, y_min, x_max, y_max = your_clip_extent # 设置输出栅格数据信息 output_filename = 'output.tif' output_format = 'GTiff' output_bounds = [x_min, y_min, x_max, y_max] ``` 第四步:调用gdalwarp函数进行裁剪 ```python gdal.Warp(output_filename, dataset, outputBounds=output_bounds, format=output_format) ``` 2. 对于批量掩膜裁剪)栅格数据,您可以使用Python中的os库进行文件遍历,遍历所有需要裁剪的栅格数据,然后调用上述裁剪代码进行批量裁剪。具体操作步骤如下: 第一步:导入os和glob库 ```python import os import glob ``` 第二步:设置需要遍历的目录和裁剪范围等参数 ```python # 设置需要遍历的目录 data_dir = 'your_data_directory' # 设置裁剪范围 x_min, y_min, x_max, y_max = your_clip_extent # 设置输出栅格数据信息 output_format = 'GTiff' output_bounds = [x_min, y_min, x_max, y_max] ``` 第三步:遍历目录下所有栅格数据,并调用裁剪代码进行批量裁剪 ```python for tif_file in glob.glob(os.path.join(data_dir, '*.tif')): # 打开栅格数据 dataset = gdal.Open(tif_file) # 设置输出文件名 output_filename = tif_file.replace('.tif', '_clip.tif') # 调用裁剪函数进行裁剪 gdal.Warp(output_filename, dataset, outputBounds=output_bounds, format=output_format) ``` 以上就是对于您提出的两个问题的解答。希望能够帮助到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等待着冬天的风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值