DEM rasterinde <= 0 - “nodata” değerindeki tüm pikseller nasıl ayarlanır?


28

Yaklaşık 3000 ila -0.0003 arasında piksel değerlerine sahip bir DEM rasterim var. Tüm pikseli 0 değerine ve daha küçük (<= 0) değerine "nodata" olarak ayarlamam gerekiyor (daha sonraki raster hesaplamaları ve dosya boyutunu azaltmak için).

Bana göre bu, raster hesap makinesi (<= 0 - "nodata" için ayarlanan değeri) veya yeniden sınıflandırma (<= 0 - "nodata" için ayarlanan değeri değiştir ve diğer tüm değerleri sakla) için bir görev gibi görünüyor ama nasil OLDUĞUNU biliyorum.


Ayrıca tüm pikselleri <0 ila "nodata" değerine ayarlamalıyım. Bu yüzden vascobnunes'dan mesaj bana yardımcı olmuyor.
MAP

Üzgünüz, ancak rasterin görüntülenme biçimini değiştirmeme yardımcı olmuyor. Raster dosyamı fiziksel olarak düzenlemeliyim.
MAP

Yorumlardan ve kapatma önerilerinden, tam olarak ne istediğinizi ve neyi denediğinizi netleştirmek için Sorunuzu düzenlemelisiniz.
PolyGeo

Yanıtlar:


29

Tek araçlı bir çözüm bulamadım, ancak önce belirli bir eşiğin altındaki tüm değerleri sıfıra çevirmek için raster hesap makinesini kullanabilir ve ardından 0 değerini nodata dönüştürmek için gdal_translate komutunu -a_nodata 0 ile kullanabilirsiniz.

görüntü tanımını buraya girin

görüntü tanımını buraya girin


17

NULL olarak aralık ayarlamak için GRASS mapcalc ifadeleri:

r.mapcalc "dem_corrected = if(dem<=0, null(), dem)"

Harika, benim için çalışıyor!
ilFonta

16

QGIS'de raster hesap makinesinde bir adımda yapılabilir.

QGIS3'te "x" adlı bir raster katman için aşağıdaki ifadeyi kullanın:

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

Bu numara, raster değerleri x> 0'ı x / 1 = x oranına, raster değerleri x <= 0 oranına 0/0 = NaN oranına eşler. Bu NaN, raster 4-byte float ise FLOAT_MIN (aka -3.402832 ... e + 38) olarak yapılır.

Garip bir şekilde, bu sorunun bir süredir var gibi göründüğü kadarıyla (bugün hızlı Google aramalarımın gösterdiği gibi) çoğu katılımcı tek bir adımda yapılamayacağını söylüyor. Bu şekilde saldırıya uğramasına kesinlikle gerek yok. QGIS belgeleri de daha iyi olabilirdi.


10

Dominik'e çok teşekkürler. İlk yanıt (ifade QGIS 2.8.3 için doğru değildir "myraster@1" > 0getiri, 0 ya da olmayan için 1 nodata için girdi, nodata döndürür giriş nodata ).

Aşağıdaki QGIS Raster Hesap Makinesi ifadesi yeterli olmalıdır ("myraster" adlı raster katmanı), çünkü QGIS Raster Hesap Makinesi koşulu nodata uygun olmayan tüm pikselleri ayarlar :

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

Aşağıdaki çözüm https://docs.qgis.org/2.8/en/docs/training_manual/processing/no_data.html dayanmaktadır ve SAGA 2.1.2 ile QGIS 2.8.3 için çalışmaktadır.

QGIS İşleme yılında SAGA kullanmak Raster hesap ve aşağıdakileri girin Formula :

ifelse(g1=0, 0/0, ifelse(g1<0, 0/0, g1))

veya

ifelse(a=0, 0/0, ifelse(a<0, 0/0, a))

Bu, 0'dan küçük veya eşit olan tüm değerleri nodata (0/0) dönüştürecektir.


koşulunu sağlamayan pikseller değil nodata, 0, çünkü bu işe yaramazsa
Dominik

Süper. Raster değer filtresi için kullanılabilir: Örneğin filtre (0.5; 23]: ifelse (g1 <0.5, 0/0, ifelse (g1> 23, 0/0, g1))
lolipop

10

Ayrıca katmanı kaydedebilir (sağ tıklayıp, farklı kaydet ...) ve not aralığı belirtebilirsiniz. Bu, orijinal notu tutar ve belirtilen değer aralığı için yeni not oluşturur.


Bu en iyi çözüm
Alexander

5

Ben de benzer bir sorun yaşadım, ama BOTH değerleri vardı, rasterde veri içermeyen VE mevcut veri içermeyen değerlere dönüştürmek istedim .

Sonuçları tanımla

Yardım için bu sayfaya geldim, ancak buradaki yaklaşımlarda bir uyarı olduğunu düşünüyorum. @Underdark ve @Micha'nın metotları sadece rasterde veri bulunmayan değerlerin olmadığı yerlerde çalışıyor gibi görünmektedir.

Bunun üstesinden gelmek için hem veri içermeyen değerleri hem de veri içermeyen dönüştürmek istediğiniz değerleri tutarlı bir sayıya dönüştürmeniz gerekir. @Underdark'ın ikinci basamağını kullanmak daha sonra tamamdır.

Bunu yapmak için, değerleri ve veri içermeyen değerleri aynı anda ortak bir sayıya (örneğin, -999) dönüştürmek için İşleme Araç Kutusu> Izgara Değerlerini Yeniden Sınıflandır (SAGA) kullanın. Özellikle, "range" yöntemini kullanın ve aralığı belirtin. Ardından veri içermeyen değerleri değiştirmek için aynı değeri seçin (örn. -999). Diğer değerleri değiştir seçeneğinin işaretini kaldırın. Bu, tek bir değer değişikliği veya daha karmaşık değişiklikler için de geçerlidir.

Ardından @ underdark metodunu takip edin ve Raster> Dönüştürme> Çevirme özelliğini kullanarak rasterinizi kaydedin ve kullandığınız değeri girerek veri yok seçeneğini işaretleyin (örn. -999).


-3

Raster üzerine sağ tıklayın, raster özelliklerine gidin, üçüncü seçenek "saydamlık" ı seçin, veri değeri sekmesi olmadan, ek değer 0 ekleyin ve uygula seçeneğine tıklayın.


4
İyi bir yöntem değil. Aslında verileri değiştiremezsiniz, bu yüzden istatistikleri hesaplamanız veya analiz yapmanız gerekirse sonuçlar yanlış olur
khafen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.