python(GDAL)读取、输出tif数据

话不多说,直接粘代码啦。
读取tif数据:

import numpy as np
import matplotlib.pyplot as plt
from osgeo import gdal

#输入图像
def read_tif(path):
    dataset = gdal.Open(path)
    print(dataset.GetDescription())#数据描述

    cols = dataset.RasterXSize#图像长度
    rows = (dataset.RasterYSize)#图像宽度
    im_proj = (dataset.GetProjection())#读取投影
    im_Geotrans = (dataset.GetGeoTransform())#读取仿射变换
    im_data = dataset.ReadAsArray(0, 0, cols, rows)#转为numpy格式
    #im_data[im_data > 0] = 1 #除0以外都等于1
    del dataset
    return im_proj, im_Geotrans,im_data

path = ""#tif文件所在位置
im_proj,im_Geotrans,im_data = read_tif(path)#读取tif文件及其投影,行列号,仿射等

输出tif数据:

#输出图像
def write_tif(newpath,im_data,im_Geotrans,im_proj,datatype):
    if len(im_data.shape)==3:
        im_bands, im_height, im_width = im_data.shape
    else:
        im_bands, (im_height, im_width) = 1, im_data.shape
    diver = gdal.GetDriverByName('GTiff')
    new_dataset = diver.Create(newpath, im_width, im_height, im_bands, datatype)
    new_dataset.SetGeoTransform(im_Geotrans)
    new_dataset.SetProjection(im_proj)

    if im_bands == 1:
        new_dataset.GetRasterBand(1).WriteArray(im_data)
    else:
        for i in range(im_bands):
            new_dataset.GetRasterBand(i+1).WriteArray(im_data[i])
    del new_dataset

newpath=""#输出位置
write_tif(newpath,im_data,im_Geotrans,im_proj,gdal.GDT_UInt16)

以上。OwO

  • 9
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
使用Python GDAL读取栅格数据需要以下步骤: 1. 打开栅格数据集:使用`gdal.Open()`函数打开栅格数据集,返回一个`gdal.Dataset`对象。 2. 获取栅格数据信息:使用`gdal.Dataset.RasterXSize`和`gdal.Dataset.RasterYSize`属性获取栅格数据的宽度和高度,使用`gdal.Dataset.GetProjection()`和`gdal.Dataset.GetGeoTransform()`方法获取栅格数据的投影和仿射变换信息。 3. 读取栅格数据:使用`gdal.Dataset.GetRasterBand()`方法获取指定波段的`gdal.Band`对象,并使用`gdal.Band.ReadAsArray()`方法读取数据。 4. 关闭数据集:使用`gdal.Dataset`对象的`None`赋值或`gdal.Dataset.Close()`方法关闭数据集。 以下是一个示例代码,读取GeoTIFF格式的栅格数据文件: ```python import gdal # 打开栅格数据集 ds = gdal.Open('path/to/raster.tif') if ds is None: # 打开失败 exit(-1) # 获取栅格数据信息 width = ds.RasterXSize height = ds.RasterYSize projection = ds.GetProjection() transform = ds.GetGeoTransform() # 读取栅格数据 band = ds.GetRasterBand(1) data = band.ReadAsArray() # 关闭数据集 ds = None ``` 在示例代码中,使用`gdal.Open()`函数打开`raster.tif`文件,返回一个`gdal.Dataset`对象。然后使用`gdal.Dataset.RasterXSize`和`gdal.Dataset.RasterYSize`属性获取栅格数据的宽度和高度,使用`gdal.Dataset.GetProjection()`和`gdal.Dataset.GetGeoTransform()`方法获取栅格数据的投影和仿射变换信息。接着,使用`gdal.Dataset.GetRasterBand()`方法获取指定波段的`gdal.Band`对象,并使用`gdal.Band.ReadAsArray()`方法读取数据。最后,使用赋值为`None`或`gdal.Dataset.Close()`方法关闭数据集。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值