在进行栅格矢量数据处理时,我们常常需要将数组转化为栅格影像,再对栅格数据进行后续处理,输出最终结果。
常见的做法是先在本地磁盘生成栅格数据,再进行处理输出。但是,如果数组转化的栅格数据不是最终结果,存储在磁盘中会浪费空间,且整套代码显得不是很优雅。
此时,我们可以利用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), 可用于后续处理过程,如转矢量等