我有一个DEM栅格,像素值在3000到-0.0003之间。我需要将所有值为0 且更小(<= 0)的像素设置为“ nodata”(用于以后的栅格计算并减小文件大小)。
对我来说,这似乎是栅格计算器的一项任务(像素<= 0的设置值到“ nodata”)或重新分类(像素<= 0的设置值到“ nodata”并保留所有其他值),但是我没有知识。
我有一个DEM栅格,像素值在3000到-0.0003之间。我需要将所有值为0 且更小(<= 0)的像素设置为“ nodata”(用于以后的栅格计算并减小文件大小)。
对我来说,这似乎是栅格计算器的一项任务(像素<= 0的设置值到“ nodata”)或重新分类(像素<= 0的设置值到“ nodata”并保留所有其他值),但是我没有知识。
Answers:
可以在QGIS的栅格计算器中一步完成。
在QGIS3中,对于名为“ x”的栅格图层,请使用以下表达式:
(("x">0)*"x") / (("x">0)*1 + ("x"<=0)*0)
此技巧将栅格值x> 0映射为比率x / 1 = x,将栅格值x <= 0映射为比率0/0 = NaN。如果栅格为4字节浮点数,则此NaN呈现为FLOAT_MIN(aka -3.402832 ... e + 38)。
奇怪的是,这个问题似乎已经存在了一段时间,(据我今天对Google的快速搜索显示),大多数受访者表示这不可能一步完成。它当然不需要像这样被黑客入侵。QGIS文档也可能更好。
非常感谢Dominik。我的第一个答案是不是QGIS 2.8.3(表达正确"myraster@1" > 0
返回0或1用于非无数据输入,为无数据输入它返回无数据)。
以下QGIS Raster Calculator表达式应足够(名为“ myraster”的栅格层),因为QGIS Raster Calculator
将不满足条件的所有像素都设置为nodata:
(“ myraster @ 1”> 0)*“ myraster @ 1”
以下解决方案基于https://docs.qgis.org/2.8/en/docs/training_manual/processing/no_data.html,并且适用于带有SAGA 2.1.2的QGIS 2.8.3。
在QGIS处理中,使用SAGA 栅格计算器,然后在“ 公式”中输入以下内容:
ifelse(g1=0, 0/0, ifelse(g1<0, 0/0, g1))
要么
ifelse(a=0, 0/0, ifelse(a<0, 0/0, a))
这会将所有小于或等于0的值转换为nodata(0/0)。
我遇到了类似的问题,但是我想将两个值都转换为栅格中的无数据和现有无数据值。
我来到此页面寻求帮助,但我认为这里的方法有一些警告。@underdark和@Micha的方法似乎仅在栅格中不存在任何无数据值的地方起作用。
为了解决这个问题,您需要将无数据值和希望转换为无数据的值都转换为一致的数字。然后可以使用@underdark的第二步。
为此,请使用“处理工具箱”>“重新分类网格值(SAGA)”将这些值和无数据值同时转换为通用数字(例如-999)。具体来说,使用方法“范围”并指定范围。然后在替换无数据值中,选择相同的值(例如-999)。取消勾选替换其他值。这适用于单个值更改或更复杂的更改。
然后遵循@underdark的方法,并使用“栅格”>“转换”>“转换”保存栅格,并勾选无数据,输入您使用的值(例如-999)。
右键单击栅格,转到栅格属性,在“无数据值”选项卡中选择第三个选项“透明度”,添加附加值0,然后单击“应用”。这与arcgis中的“显示背景值”类似。