Как установить все пиксели со значением <= 0 в «nodata» в растре DEM?

28

У меня есть DEM-растр со значениями пикселей между 3000 и -0.0003. Мне нужно установить все пиксели со значением 0 и smaler (<= 0) в «nodata» (для более поздних растровых расчетов и для уменьшения размера файла).

Мне кажется, что это задача для растрового калькулятора (установить значение пикселей <= 0 для "nodata") или для реклассификации (установить значение пикселей <= 0 для "nodata" и оставить все остальные значения), но я не секрет производства.

КАРТА
источник
Мне также нужно установить все пиксели со значением <0 для «nodata». Так что сообщение от vascobnunes мне не помогает.
КАРТА
Извините, но это не помогает мне изменить стиль отображения растра. Мне нужно физически редактировать мой растровый файл.
MAP
Из комментариев и предложений по закрытию кажется, что вы должны отредактировать свой Вопрос, чтобы уточнить, что именно вы хотите и что вы уже попробовали.
PolyGeo

Ответы:

29

Я не нашел решения с одним инструментом, но вы можете сначала использовать растровый калькулятор, чтобы превратить все значения ниже определенного порога в ноль, а затем использовать gdal_translate с -a_nodata 0, чтобы превратить 0 в нодаты.

введите описание изображения здесь

введите описание изображения здесь

Подземье
источник
17

Вот выражения GRASS mapcalc, чтобы установить диапазон в NULL:

r.mapcalc "dem_corrected = if(dem<=0, null(), dem)"
Миха
источник
Отлично, у меня работает!
ilFonta
16

Это можно сделать за один шаг в QGIS в растровом калькуляторе.

В QGIS3 для растрового слоя с именем "x" используйте следующее выражение:

(("x">0)*"x") / (("x">0)*1 + ("x"<=0)*0)

Этот прием отображает растровые значения x> 0 в отношение x / 1 = x, а растровые значения x <= 0 в отношение 0/0 = NaN. Этот NaN отображается как FLOAT_MIN (он же -3.402832 ... e + 38), если растр имеет 4-байтовое значение с плавающей запятой.

Как ни странно, этот вопрос, кажется, был давно, поскольку (насколько показывает мой быстрый поиск в Google сегодня) большинство респондентов заявили, что это невозможно сделать за один шаг. Это, конечно, не должно быть взломано, как это. Документация QGIS тоже может быть лучше.

Колин Старк
источник
10

Большое спасибо Доминику. Мой первый ответ не верен для 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 и работает для QGIS 2.8.3 с SAGA 2.1.2.

В QGIS Processing используйте калькулятор SAGA Raster и введите следующее в формулу :

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).

Ховард Твите
источник
это не работает, потому что пиксели, которые не удовлетворяют условию, равны 0, а не nodata
Dominik
Супер. Можно использовать его для фильтра растровых значений: например, фильтр (0,5; 23]: ifelse (g1 <0,5, 0/0, ifelse (g1> 23, 0/0, g1))
lolipop
10

Вы также можете сохранить слой (щелкнуть правой кнопкой мыши, сохранить как ...) и указать диапазон узлов. Это сохранит исходные нодаты и создаст новые нодаты для указанного диапазона значений.

Йост Беккерс
источник
Это лучшее решение
Александр
5

У меня была похожая проблема, но были ОБА значения, которые я хотел преобразовать в данные без данных И существующие значения без данных в растре.

Определить результаты

Я пришел на эту страницу за помощью, но я думаю, что здесь есть предостережение. Методы @underdark и @Micha, похоже, работают только тогда, когда в растре отсутствуют значения без данных.

Чтобы обойти это, вам нужно преобразовать как значения без данных, так и значения, которые вы хотите преобразовать в данные без данных, в согласованное число. Тогда можно использовать второй шаг @underdark.

Чтобы сделать это, используйте Toolbox> Переклассифицировать значения сетки (SAGA) для одновременного преобразования значений и значений без данных в общее число (например, -999). В частности, используйте метод «диапазон» и укажите диапазон. Затем в разделе заменить значения без данных выберите это же значение (например, -999). Снимите флажок заменить другие значения. Это работает как для одного изменения значения, так и для более сложных изменений.

Затем следуйте методу @underdark и сохраните растр, используя Raster> Conversion> Translate, и отметьте no-data, введя значение, которое вы использовали (например, -999).

Sarracenia
источник
-3

Щелкните правой кнопкой мыши растр, перейдите к свойствам растра, выберите третий параметр «прозрачность», на вкладке без значения данных добавьте дополнительное значение 0 и нажмите «Применить». Это аналогичный параметр «Отображать значение фона» в arcgis.

Бхарадвай А.К.
источник
4
Не очень хороший метод. Вы на самом деле не изменяете данные, поэтому, если вам нужно рассчитать статистику или сделать анализ, результаты будут неверными
Хафен