python处理栅格数据

字节序列:

ReadRaster([xoff], [yoff], [xsize], [ysize], [buf_xsize], [buf_ysize], [buf_type], [band_list],[buf_pixel_space], [buf_line_space], [buf_band_space])

xoff是列读取起点,默认值为0。
yoff是行读取起点,默认值为0。
xsize是读取的列数,默认为全部读取。
ysize是读取的行数,默认为全部读取。
buf_xsize是输出数组里的列数,默认值为使用 win_xsize 值。如果此值不同于 win_xsize,则数据将重采样。
buf_ysize是输出数组里的行数,默认值为使用 win_ysize 值。如果此值不同于 win_ysize,则数据将重采样。
buf_type 是返回序列的GDAL目标数据类型,默认值与源数据相同。
band_list是要读取的波段列表,默认读取所有波段。
buf_pixel_space是序列中像素之间的字节偏移,默认值为buf_type的大小。
buf_line_space是序列中行间的字节偏移,默认值是 buf_type 乘以 xsize 。
buf_band_space是序列中列间的字节偏移,默认值是 buf_line_space 乘以 ysize

import os
import numpy as np
from osgeo import gdal

data_dir = r'D:\modis'

# os.chdir(os.path.join(data_dir, ' ', ' '))
ds = gdal.Open('MOD03.tif')
data = ds.ReadRaster(1400, 2000, 2, 2, band_list=[1])
print(data)
# 取出第一个值,将从字节转换为数字
print(data[0])

# 尝试更改第一个像素的值。
# 输出失败,因为不能更改字节字符串
data[0] = 50

# 将字节字符串转换为字节数组
# 更改第一个值,输出成功
bytearray_data = bytearray(data)  # bytearray是字节数组
bytearray_data[0] = 50
print(bytearray_data[0])

# import struct
# tuple_data = struct.unpack('B' * 4, data) # 指定4个字节
# print(tuple_data)
#
# numpy_data1 = np.array(tuple_data)
# print(numpy_data1)
# 假设 'data' 是一个 bytearray 对象
# data = bytearray(b'\x01\x02\x03\x04')  # 示例数据

# 将 bytearray 转换为 bytes 对象
data_bytes = bytes(data)
# 将字节字符串转换为numpy数组
# 重构一个numpy数组,使其具有2行2列,就像读入的原始数据一样
numpy_data2 = np.frombuffer(data_bytes, np.int8)
reshaped_data = np.reshape(numpy_data2, (2,2))
print(reshaped_data)
View Code

 




posted @ 2024-02-23 15:39  有翅膀的大象  阅读(26)  评论(0编辑  收藏  举报