比较来自 rasterio 的两个数组中的值并执行操作
Comparing values in two arrays from rasterio and performing operations
我有一个 GeoTIFF,其中有两个波段,一个是“沉淀物反射率”(强度)和“沉淀物类型”(snow/rain/etc)。我想调整雪的降水值,以便在最终地图上为它们涂上不同的颜色。这是我目前正在做的事情以及我正在尝试做的事情。我正在使用的 tif 可用 here.
我正在使用光栅加载两个波段,如下所示:
import rasterio
src = rasterio.open("stack.tif")
ref=src.read(1) # This is the precip reflectivity
ptype=src.read(2) # This is the precip type
目前,ref 和 ptype 是两个数组,如下所示(-999 是一个无数据值):
[[-999. -999. -999. ... -999. -999. -999.]
[-999. -999. -999. ... -999. -999. -999.]
[-999. -999. -999. ... -999. -999. -999.]
...
[-999. -999. -999. ... -999. -999. -999.]
[-999. -999. -999. ... -999. -999. -999.]
[-999. -999. -999. ... -999. -999. -999.]]
我想最终使用颜色图正确着色。对于“雪”的值(或为 ptype
输入 3
,我想将 200 添加到该值以表示雪,对于所有其他值,我希望保持原样。
这让我想到了这个,是否有比较这些值或任何示例的最佳方法?
如 docs, reading a dataset with Rasterio returns an numpy.ndarray 中所述。
因此,您可以利用布尔比较来执行以下操作:
import numpy as np
import rasterio
fill_val = -999.0
snow_val = 3
# open original dataset
with rasterio.open("stack.tif") as src:
ref = src.read(1) # This is the precip reflectivity
ptype = src.read(2) # This is the precip type
kwargs = src.meta.copy()
# modify valid `ref` data based on values in the `ptype` layer
ref[np.logical_and(ptype == snow_val, ref != fill_val)] += 200
# write the result to a new raster dataset with same structure
with rasterio.open("stack_modified.tif", "w", **kwargs) as dst:
dst.write(ref, 1)
dst.write(ptype, 2)
请注意,不要修改无数据(填充)值,这一点很重要,因为这会错误地导致它们被识别为有效数据。
我有一个 GeoTIFF,其中有两个波段,一个是“沉淀物反射率”(强度)和“沉淀物类型”(snow/rain/etc)。我想调整雪的降水值,以便在最终地图上为它们涂上不同的颜色。这是我目前正在做的事情以及我正在尝试做的事情。我正在使用的 tif 可用 here.
我正在使用光栅加载两个波段,如下所示:
import rasterio
src = rasterio.open("stack.tif")
ref=src.read(1) # This is the precip reflectivity
ptype=src.read(2) # This is the precip type
目前,ref 和 ptype 是两个数组,如下所示(-999 是一个无数据值):
[[-999. -999. -999. ... -999. -999. -999.]
[-999. -999. -999. ... -999. -999. -999.]
[-999. -999. -999. ... -999. -999. -999.]
...
[-999. -999. -999. ... -999. -999. -999.]
[-999. -999. -999. ... -999. -999. -999.]
[-999. -999. -999. ... -999. -999. -999.]]
我想最终使用颜色图正确着色。对于“雪”的值(或为 ptype
输入 3
,我想将 200 添加到该值以表示雪,对于所有其他值,我希望保持原样。
这让我想到了这个,是否有比较这些值或任何示例的最佳方法?
如 docs, reading a dataset with Rasterio returns an numpy.ndarray 中所述。
因此,您可以利用布尔比较来执行以下操作:
import numpy as np
import rasterio
fill_val = -999.0
snow_val = 3
# open original dataset
with rasterio.open("stack.tif") as src:
ref = src.read(1) # This is the precip reflectivity
ptype = src.read(2) # This is the precip type
kwargs = src.meta.copy()
# modify valid `ref` data based on values in the `ptype` layer
ref[np.logical_and(ptype == snow_val, ref != fill_val)] += 200
# write the result to a new raster dataset with same structure
with rasterio.open("stack_modified.tif", "w", **kwargs) as dst:
dst.write(ref, 1)
dst.write(ptype, 2)
请注意,不要修改无数据(填充)值,这一点很重要,因为这会错误地导致它们被识别为有效数据。