Як встановити всі пікселі зі значенням <= 0 на "nodata" в растрі DEM?


28

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

Мені здається, що це завдання для растрового калькулятора (встановлене значення пікселів <= 0 до "нодату") або перекласифікація (встановити значення пікселів <= 0 на "нодату" і зберегти всі інші значення), але я не ноу-хау.


Мені також потрібно встановити всі пікселі зі значенням <0 до "nodata". Тож повідомлення від васкобнуків мені не допомагає.
КАРТА

Вибачте, але це не допомагає мені змінити стиль відображення растра. Мені потрібно фізично редагувати свій растровий файл.
КАРТА

З коментарів та пропозицій щодо закриття, схоже, вам слід відредагувати своє запитання, щоб чітко уточнити, що ви хочете і що ви вже намагалися
PolyGeo

Відповіді:


29

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

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

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


17

Ось графічні вирази GRASS для встановлення діапазону 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 для НЕ NoData входу, для NoData введення повертається NODATA ).

Наступний вираз QGIS Raster Calculator повинен бути достатнім (растровий шар з назвою "myraster"), оскільки QGIS Raster Calculator встановлює всі пікселі, які не відповідають умові, нодані :

("myraster @ 1"> 0) * "myraster @ 1"

Наступне рішення засноване на https://docs.qgis.org/2.8/uk/docs/training_manual/processing/no_data.html , і працює для QGIS 2.8.3 з SAGA 2.1.2.

У 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, у нодати (0/0).


це не працює, тому що пікселі, які не відповідають умові, дорівнюють 0, а не нодатам
Домінік

Супер. Можна використовувати його для фільтру растрових значень: Наприклад filter (0.5; 23]: ifelse (g1 <0.5, 0/0, ifelse (g1> 23, 0/0, g1))
lolipop

10

Ви також можете зберегти шар (клацнути правою кнопкою миші, зберегти як ...) і вказати діапазон вузлів. Це дозволить зберегти початкові нодані та створити нові нодати для заданого діапазону значень.


Це найкраще рішення
Олександр

5

У мене була аналогічна проблема, але було значення BOTH, які я хотів перетворити на растр без даних та існуючих значень без даних.

Визначте результати

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

Щоб обійти це, вам потрібно перетворити як значення без даних, так і значення, які ви хочете перетворити на дані без даних, в послідовне число. Тоді добре використовувати другий крок @underdark.

Для цього використовуйте Панель інструментів обробки> Перекласифікуйте значення сітки (SAGA), щоб одночасно перетворити значення та значення без даних у загальне число (наприклад, -999). Зокрема, використовуйте метод "діапазон" і вкажіть діапазон. Потім замініть значення без даних виберіть це те саме значення (наприклад, -999). Скасувати замінити інші значення. Це працює і для зміни однієї величини, або для більш складних змін.

Потім виконайте метод @underdark і збережіть растр за допомогою Raster> Conversion> Translate та позначте no-data, ввівши використовуване значення (наприклад, -999).


-3

Клацніть правою кнопкою миші на растрі, перейдіть до властивостей растра, виберіть третій варіант "прозорість", на вкладці "значення даних" не додайте додаткового значення 0 та натисніть кнопку "Приміняти".


4
Не хороший метод. Ви насправді не змінюєте дані, тому якщо вам потрібно обчислити статистику чи зробити аналіз, результати будуть невірними
khafen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.