Python 使用rasterio将数组按照指定格式写入内存

在进行栅格矢量数据处理时,我们常常需要将数组转化为栅格影像,再对栅格数据进行后续处理,输出最终结果。

常见的做法是先在本地磁盘生成栅格数据,再进行处理输出。但是,如果数组转化的栅格数据不是最终结果,存储在磁盘中会浪费空间,且整套代码显得不是很优雅。

此时,我们可以利用rasterio的MemoryFile将数据写入内存。具体使用方法如下:

import numpy as np
import rasterio.mask
from rasterio import MemoryFile

arr = np.random.randint(0, 255, size=(200, 200, 1))
src_ras_file = './raster_prj.tif'  # 提供地理坐标信息的栅格底图

with rasterio.open(src_ras_file) as raster:
    height = arr.shape[0]  # 数组的行数
    width = arr.shape[1]  # 数组的列数
    crs = raster.crs  # 投影信息
    trans = raster.transform  # 仿射变换信息
    nodata = raster.nodata  # nodata填充

    # 将数组数据写入内存文件
with MemoryFile() as memfile:
    with memfile.open(driver='GTiff', width=width, height=height, count=1, crs=crs, transform=trans, dtype=float,
                      nodata=nodata) as raster_data:
        raster_data.write(arr)
        ## 这里的raster_data相当于rasterio.open(raster_file), 可用于后续处理过程,如转矢量等

Guess you like

Origin blog.csdn.net/MLH7M/article/details/121000771