matplotlib 使用rasterio中的色彩Map表编写tiff

rekjcdws  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(179)

我正在使用下面的代码编写一个单波段tif。我最感兴趣的是为波段0和tiff一起编写一个色彩Map表。
下面的代码正在迭代其他一些文件,并成功地写出每个输入的每个波段。我希望能够适用于每个输出的色彩Map表。下面我试图要求将绿色限制在5类。
我想避免明确地避免导入GDAL -这似乎是完全可能的。
所以我的问题是如何写出应用了viridis色彩Map表的文件?如有必要,应用于波段[0]

import xarray as xr
import rioxarray
import cftime
import os
import datetime
from rasterio.enums import Resampling
import matplotlib.pyplot as plt

ds_input = "inputfile.nc"
operatingdir = '\\'
filename = ds_input[:-3]

#determine the maximum number of bands in the raster using the band name in position 0 of the common_key list
bandcount = 7

#create a colormap for the output raster, with 5 colour bands
cmap = plt.cm.get_cmap('viridis', 5)

#use a for loop to output each day of the forecast
for i in range(0, bandcount):
    #Convert ds_netcdf_interp to raster using the max fbi values
    ds_input.var_name.rio.to_raster('{}\\Output\\{}_number{}.tif'.format(operatingdir, filename, i), 
        windowed=True, 
        compress='lzw', 
        dtype='int16', 
        nodata=-9999, 
        overwrite=True, 
        tiled=True, 
        cloud_optimized=True, 
        driver='COG', 
        colormap=cmap
    )
fcwjkofz

fcwjkofz1#

您可以使用rasterios write_colormap()将色彩Map表写入tiff文件。下面是一个简短的例子,说明如何使用它从文档:

import rasterio

with rasterio.Env():

    with rasterio.open('tests/data/shade.tif') as src:
        shade = src.read(1)
        meta = src.meta

    with rasterio.open('/tmp/colormap.tif', 'w', **meta) as dst:
        dst.write(shade, indexes=1)
        dst.write_colormap(
            1, {
                0: (255, 0, 0, 255),
                255: (0, 0, 255, 255) })
        cmap = dst.colormap(1)
        # True
        assert cmap[0] == (255, 0, 0, 255)
        # True
        assert cmap[255] == (0, 0, 255, 255)

基本上,write_colormap将波段号作为第一个参数,然后将栅格值的字典作为键,将其对应的RGBA值作为值。

相关问题