데이터가없는 픽셀로 인해 래스터를 합칠 수 없음


12

매일 토양 수분 데이터가있는 래스터 (.vrt) 세트가 있습니다. 월 단위로 측정하기 위해 모든 래스터의 픽셀을 합산하려고합니다. 그러나 전 세계가 매일 보장되지 않으므로 다른 요일에 측정 값이 존재하는 곳에 데이터 값이 없습니다.

내가하고 싶은 것은 각 래스터의 값을 합산하는 것입니다. 그러나 nodata 픽셀이 합산 될 때마다 결과 픽셀이 nodata로 직접 분류됩니다. 나는 모든 nodata 값을 무시하고 나머지를 합산하는 반대를 원합니다.

문제를 해결하는 두 가지 방법을 생각했습니다.

  1. nodata 값을 무시하고 래스터 합산
  2. nodata 픽셀을 값 0으로 변환 한 다음 모든 래스터를 합산

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

불행히도, 나는 이것을 할 수있는 도구를 찾을 수 없습니다.

누구든지 나를 도울 수 있습니까?


결과가 얼마나 해석 가능한지 궁금합니다. 결국에는 누락 된 날의 값이 포함되지 않으므로 누락 된 데이터의 양에 따라 다양한 양으로 바이어스됩니다. 상당한 양의 결측 데이터가 있는 경우 결측 셀의 값을 대치 하거나 예측 한 다음 합계를 수행하는 것을 고려해야합니다 .
whuber

1
이 의견에 감사드립니다. 나는 데이터 관리자에게 물었고 모든 가용 데이터를 합하여 평균값을 계산 한 다음 해당 픽셀에서 관찰이 가능한 달 안에 일 수로 나눈다 고 말했다.
Damien

2
이는 GIS가 모든 NoData 셀을 무시하도록 지시되는 래스터 스택의 로컬 평균과 동일하므로 다른 방법으로 갈 수 있습니다. 그런데 누락 된 관측치가 값과 상관 될 때이 절차는 여전히 편향 될 수 있습니다. 예를 들어, 구름 덮개로 인해 데이터가 누락 된 경우 그 당시 토양 수분이 평상시보다 더 높을 수 있습니다 (평균).
whuber

1
좋아, 방금 '데이터 무시'를 선택하고 셀 통계 도구를 테스트했으며 정확히 내가 원하는 것을 수행합니다. 나는 그러한 방법의 단점을 알고 있습니다. 그러나 제 작업은 공간과 시간 모두에서 다소 규모가 크므로 그러한 편향이 덜 중요하다고 가정합니다. 어쨌든, 나는 정말 많은 데이터를 선택할 수 없습니다.
Damien

척도는 편향의 양과 관련이 없습니다. 바이어스의 중요성은 크기와 응용 프로그램의 감도에 따라 다릅니다. 데이터에 대해 아무 것도 할 수 없지만 데이터 분석 절차를 제어 할 있습니다. 이를 개선 할 수있는 방법이 많이 있습니다. 시간이 지남에 따라 보간하고 토양 수분과 관련이있을 수 있으며 누락 된 날짜에도 사용할 수있는 공변량에 대한 회귀 분석 옵션이 있습니다. (결 측값을 "출력"하는 데 전념하는 전체 통계 분기가 있습니다.)
whuber

답변:


1

ArcGIS에 액세스 할 수있는 경우 셀 통계 도구에는 래스터를 합산 / 평균 / 최소 \ max하는 데이터를 무시하는 옵션이 있습니다.


"sum"을 "average"로 대체하기 위해이 답변을 수정하면 맞습니다. 이유에 대한 질문의 주석 스레드를 참조하십시오.
whuber

합산은 평균값을 얻고 싶기 때문에 문제의 한 부분이었습니다. 방금 확인했으며 셀 통계 도구는 데이터 픽셀을 무시하고 래스터를 합산하는 가장 쉬운 방법입니다.
Damien

11

먼저 gdal_calc.py 를 사용 하여 -9999를 모두 0으로 변경하고 NoData 값을 0으로 설정할 수 있습니다.

예를 들어 :

gdal_calc.py -A input.tif --outfile=input_with_NoData.tif --calc="A+9999*(A==-9999)" --NoDataValue=0

그런 다음 gdal_translate-a_nodata 옵션 과 함께 none을 사용하여 NoData 값을 무시할 수 있습니다 .

-a_nodata :

지정된 nodata 값을 출력 대역에 할당하십시오. 소스 파일에 대해 nodata 값이 존재하는 경우 출력 파일에 nodata 값을 설정하지 않도록 GDAL 1.8.0부터 none 으로 설정할 수 있습니다.

예:

gdal_translate -a_nodata none input_with_NoData.tif output_without_NoData.tif

팁 고마워. 나는 -a_nodata 매개 변수를 사용하여 조금 연주했으며 NULL 대신 -9999 값을 가질 수 있습니다. 그러나 여전히 -9999 픽셀을 모두 0으로 변경해야합니다.
Damien

1
적용하기 전에 gdal_calc.py 를 사용 하여 -9999를 모두 0으로 변경할 수 있습니다 gdal_translate -a_nodata none .... 예 : gdal_calc.py -A input.tif --outfile=input_with_NoData.tif --type=Int16 --calc="A+9999*(A==-9999)" --NoDataValue=0
Antonio Falciano

몇 가지 명령을 시도했지만 gdal_calc.py에 문제가 있다고 생각합니다. 예를 들어, 전체 래스터 ( i.imgur.com/WiZG7MC.png ) 에 1을 추가하려고 했는데이 Maxrepeat 오류가 발생했습니다. 이해가 안되며 OSGeo 쉘에서 직접 명령을 실행 했으며이 모듈은 쉘을 열 때 목록에 표시되므로 올바르게 설치 된 것 같습니다 ( i.imgur.com/fgtMZQZ.png ). 설치가 망가 졌습니까?
Damien

정규식 문제 인 것 같습니다 ... cd명령을 사용하여 작업 디렉토리를 변경 하고 다시 시도하십시오 -A test.tif.
Antonio Falciano

1
그것은 나를 위해 작동하지만 OSGeo4W 설치 프로그램을 통해이 모든 것을 설치했습니다 . 대신 독립 실행 형 설치 관리자를 통해 QGIS를 설치 한 것으로 나타났습니다. 따라서 설정을 새로 고치거나 업데이트하십시오.
Antonio Falciano

5

R에서 :

library(raster)
s <- stack('file1', 'file2', ...)
ss <- sum(s, na.rm=TRUE)

이 코드에 대한 설명 (작성한 경우) 또는 사이트에서 간단한 요약을 통해 찾은 링크를 추가 할 수 있습니까?
Paul

1
위의 내용은 먼저 래스터 패키지를로드 한 다음 쉼표로 구분 된 파일 이름으로 표시된 파일을 포함하는 "스택"(각각 파일이이 스택의 슬라이스가되는 동일한 범위와 해상도의 래스터 파일의 3 차원 배열)을 만듭니다. . 최종 라인은 스택의 모든 셀에 걸쳐 조각이 많다는 합을 수행 s인수와 함께, na.rm=TRUE결과 NA값은 무시된다. 출력 객체 ssraster로 내보낼 수 있는 객체입니다 writeRaster(참조 ?writeRaster). (@RobertH는 R raster패키지 의 제작자입니다 .)
jbaums

1

Spatial Analyst의 Conditional Tool은 널값을 0으로 쉽게 변환하는 방법입니다. 그런 다음 총액을 가져가는 것이 간단해야합니다.


당신의 답변에 감사드립니다. 나는이 게시물을 따라 갔다 : support.esri.com/fr/knowledgebase/techarticles/detail/34932 모든 null 픽셀을 0으로 변환 할 수있었습니다. 그러나, 나는 모든 래스터에 대해이 작업을 수행하고 싶었습니다. 예배 규칙서. QGIS의 '그리드 값 재 분류'가이 작업을 수행 할 수있는 것처럼 보이지만 작동 방식을 모릅니다. "Simple table"방법을 선택하고 null을 0으로 설정하도록 요청하고 다른 값을 변경하지 말고 결과 래스터의 범위는 -0.99에서 0.08이며 원래 428에서 3491까지입니다.
Damien

어딘가에 원래 래스터의 발췌문을 게시 할 수 있습니까?
til_b

2
도구를 마우스 오른쪽 버튼으로 클릭하면 원하는 수의 파일 (예 : 전체 디렉토리)에 대해 일괄 처리를 실행할 수 있습니다.
브록

답변 주셔서 감사합니다. 그러나 '공간 분석가 /지도 대수 / 래스터 계산기'를 사용하여 단일 파일에 대해 모든 NULL을 0으로 변환 할 수 있습니다. 이 도구를 올바르게 클릭하면 디렉토리를 배치 할 수 있지만 각 파일을 자동으로 고려하기 위해 구문은 무엇입니까? ( i.imgur.com/aYaUCzz.png )
Damien

나는 '공간 분석가 / 재 분류 / 재 분류'도구를 살펴 보았고 내가 원하는 것을 정확하게 수행합니다. 여러 파일을 한 번에 처리하기 위해 배치 창을 사용했습니다. 마지막 문제가 있습니다. '출력 래스터'를 마우스 오른쪽 버튼으로 클릭하거나 채우면 모든 입력 래스터에 대해 동일한 출력 파일이 복사됩니다. 각 입력마다 다른 출력을 만들려면 어떻게해야합니까? ( i.imgur.com/jzTI2x9.png )
Damien

1

나는 전에 같은 문제가 있었고 그것을 해결할 수있었습니다.

QGIS에 nodata 값을 표시하는 것에 대한 메모와 같이 : nodata 값은 실제로 -9999, 0, NULL 등의 값을 가지고 있는지에 관계없이 맵 창에서 "object information"도구를 사용할 때 항상 nodata 값으로 표시됩니다. 따라서 nodata 값을 0으로 다시 분류 한 후 계층 설정으로 이동하면 메타 데이터에서 nodata의 값이 0임을 알 수 있습니다.

마침내 퀘스트를위한 완벽한 도구 인 GRASS를 찾았습니다 r.series. "집계 작업"설정 "최대"및 "전파 전파"를 선택하지 않으면 도구가 요구 사항에 맞는 레이어를 만듭니다.


0

나는이 문제가 잠시 동안 있었던 것을 기억합니다. 해결책으로 래스터의 모든 셀에 +1을하고 래스터를 함께 추가 한 다음 최종 뺄셈을 수행했습니다 (그러나 많은 +1을 추가했습니다). 꽤 거칠지 만 일을 끝내면 ...!

또는 QGIS의 처리 도구 상자에서 '격자 값 재 분류'를 사용하여 널값을 0으로 변환하십시오.


안녕하세요, 저는 '모눈 값 재 분류'도구를 사용하지 않고 여러 가지 방법으로 시도했습니다. 모든 NULL 픽셀을 -9999로 변환하는 래스터에서 시작했습니다. [0] single 메소드를 사용하여 다시 분류하고 'old value = -9999', 'new value = 0.0', 'operator : [0] ='으로 설정했지만 'nan'으로 가득 찬 래스터 만 있습니다. 픽셀. 내가 도대체 ​​뭘 잘못하고있는 겁니까?
Damien
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.