DEM 래스터에서 값이 <= 0 인 모든 픽셀을 "nodata"로 설정하는 방법은 무엇입니까?


28

약 3000에서 -0.0003 사이의 픽셀 값을 가진 DEM 래스터가 있습니다. 모든 픽셀 값을 0으로 설정 하고 더 작게 (<= 0) "nodata"로 설정해야합니다 (나중 래스터 계산 및 파일 크기 줄이기).

이것은 래스터 계산기 (픽셀 <= 0에서 "nodata"로 설정된 값) 또는 재 분류 (픽셀 <= 0에서 "nodata"로 설정된 픽셀 값 및 다른 모든 값 유지)의 작업 인 것 같습니다. 방법을 아십시오.


또한 값이 <0 인 모든 픽셀을 "nodata"로 설정해야합니다. 그래서 vascobnunes의 게시물은 나를 돕지 않습니다.
MAP

미안하지만 래스터가 표시되는 방식을 변경하는 데 도움이되지 않습니다. 래스터 파일을 pysicaly 편집해야합니다.
MAP

의견과 마감 제안에서 원하는 것을 정확하게 시도하고 이미 시도한 것을 명확히하기 위해 질문을 편집해야합니다.
PolyGeo

답변:


29

한 도구 솔루션을 찾지 못했지만 먼저 래스터 계산기를 사용하여 특정 값 아래의 모든 값을 0으로 설정 한 다음 gdal_translate를 -a_nodata 0과 함께 사용하여 0을 nodata로 바꿀 수 있습니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


17

범위를 NULL로 설정하는 GRASS mapcalc 표현식은 다음과 같습니다.

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에 매핑합니다. 래스터가 4 바이트 플로트 인 경우이 NaN은 FLOAT_MIN (일명 -3.402832 ... e + 38)으로 렌더링됩니다.

이상하게 도이 질문은 (오늘 빠른 Google 검색에서 볼 수있는 한) 대부분의 응답자가 한 단계로 수행 할 수 없다고 말하는 것처럼 오래 동안 사용 된 것 같습니다. 확실히 이런 식으로 해킹 할 필요는 없습니다. QGIS 문서도 더 나을 수 있습니다.


10

도미니크에게 감사드립니다. 첫 번째 대답은 QGIS 2.8.3에 맞지 않습니다 (표현식 "myraster@1" > 0은 비 데이터 입력의 경우 0 또는 1을 반환 하고 nodata 입력의 경우 nodata를 반환 ).

다음 QGIS 래스터 계산기 QGIS 이후 발현이 충분 ( "myraster"라는 래스터 층)이어야 래스터 견적 상기 조건을 만족하지 않는 모든 화소 설정 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)로 바꿉니다.


조건을 만족하지 않는 픽셀이 0이 아니고 nodata가 아니기 때문에 작동하지 않습니다
Dominik

감독자. 래스터 값 필터에 사용할 수 있습니다. 예를 들어 필터 (0.5; 23] : ifelse (g1 <0.5, 0/0, ifelse (g1> 23, 0/0, g1))
lolipop

10

레이어를 저장하고 (오른쪽 클릭, 다른 이름으로 저장 ...) nodata 범위를 지정할 수도 있습니다. 원래 nodata를 유지하고 지정된 값 범위에 대해 새로운 nodata를 만듭니다.


이것이 최고의 솔루션입니다
Alexander

5

나는 비슷한 문제를했지만했다 둘 다 내가없는 데이터로 변환하고 싶었 값 래스터 기존없는 데이터 값을.

결과 식별

도움을 받기 위해이 페이지를 방문했지만 여기에 접근 할 때주의해야 할 점이 있습니다. @underdark 및 @Micha의 방법은 래스터에 기존의 데이터 없음 값이없는 경우에만 작동하는 것 같습니다.

이 문제를 해결하려면 데이터 없음 값과 데이터 없음으로 변환하려는 값을 모두 일관된 숫자로 변환해야합니다. 그런 다음 @underdark의 두 번째 단계를 사용하는 것이 좋습니다.

이렇게하려면 Processing Toolbox> SAGA (Reclassify Grid Values)를 사용하여 값과 비 데이터 값을 공통 번호 (예 : -999)로 동시에 변환하십시오. 특히, "range"메소드를 사용하고 범위를 지정하십시오. 그런 다음 데이터 없음 값 바꾸기에서 동일한 값을 선택하십시오 (예 : -999). Untick은 다른 값을 대체합니다. 이것은 단일 값 변경 또는 더 복잡한 변경에도 적용됩니다.

그런 다음 @underdark의 방법을 따르고 Raster> Conversion> Translate을 사용하여 래스터를 저장하고 사용하지 않은 값을 입력하여 데이터를 선택하지 마십시오 (예 : -999).


-3

래스터를 마우스 오른쪽 버튼으로 클릭하고 래스터 속성으로 이동 한 다음 데이터 값 탭에서 세 번째 옵션 "투명도"를 선택하고 추가 값 0을 추가 한 후 적용을 클릭하십시오.


4
좋은 방법이 아닙니다. 실제로 데이터를 변경하지는 않으므로 통계를 계산하거나 분석해야 할 경우 결과가 정확하지 않습니다
khafen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.