GDAL로 만든 GeoTIFF는 Arc / QGIS에로드 될 때 최소 / 최대 범위가 없습니다.


11

GeoTIFF 드라이버를 사용하여 GDAL에서 부동 소수점 래스터를 만들고 있습니다. 결과 이미지를 QGIS 또는 Arc에로드 할 때 기본 심볼은 최소값을 -3.40282e38, 최대 값은 3.40282e38이되므로 래스터는 정확히 회색으로 보입니다. 실제 범위를 GeoTIFF에 직접 쓸 수있는 방법이 있습니까? 그래서 GIS 프로그램에로드 할 때 자동으로 히스토그램을 잘 조정합니까? 다음과 같은 기본 히스토그램을 만들려고했습니다.

rasterMin, rasterMax = raster.GetRasterBand(1).ComputeRasterMinMax()
raster.GetRasterBand(1).SetDefaultHistogram(rasterMin, rasterMax, 255)

그러나 바인딩 문제처럼 보이는 오류가 발생합니다.

  File "/usr/lib/python2.6/dist-packages/osgeo/gdal.py", line 846, in SetDefaultHistogram
    return _gdal.Band_SetDefaultHistogram(self, *args)
TypeError: not a sequence

내가 할 수있는 일이나 실수를 한 경우에 대한 제안?

답변:


8

데이터를 생성하는 경우 최소 및 최대를 즉시 추적 할 수 있습니다. 소스 데이터를 직접 제어 할 수없는 경우 기존 데이터를 합성 중인지 사용하는 ComputeRasterMinMax(0)것이 좋습니다.

어느 쪽이든, 최소값과 최대 값을 얻은 후에 SetStatistics()는 대역을 호출 하고 None모든 것이 디스크에 기록되도록 완료되면 데이터 세트를 설정해야합니다 .

또한 dataset.GetRasterBand(1).<some band function>GDAL Python이 밴드 참조를 처리하는 방식으로 인해 사용 이 제대로 작동하지 않는다고 말하는 것이 있습니다. 자세한 내용을 기억할 수 없지만 얼마 전에 GDALDev 메일 링리스트에 무언가가있었습니다. 명시 적 밴드 변수를 생성하는 것이 가장 좋습니다 그래서 : band = dataset.GetRasterBand(1)다음 호출 band.SetStatistics(min, max, mean, stddev).


고마워, 이것은 트릭을하고 컨텍스트에 감사드립니다. 그건 그렇고, 문제없이 임시 변수없이 밴드 참조를 중첩 할 수있었습니다.
Rich

참고 band.ComputeStatistics(0)또한 통계를 저장합니다. 쉬운 1 행입니다.
Mike T

1

GDAL을 사용하여 수행하는 방법을 모르지만 Python을 사용하여 Arc에서 '계산 통계'도구를 호출 할 수 있습니다.


2
안녕하세요 사이러스, GIS.se에 오신 것을 환영합니다. :) 정답은 두 가지 이유로 투표를 유치하지 않습니다. arcpy 계산 통계 도구는 통계를 외부 .aux 파일에 저장하며 포스터는 "지오텍으로 직접"를 요청했습니다. 둘째, 제목에 Arcgis가 언급되어 있지만 질문의 본문과 태그는 포스터가 gdal / qgis 솔루션에 실제로 더 관심이 있음을 나타냅니다. 어쨌든 기고 해 주셔서 감사합니다. 시작하는 것은 약간의 학습 곡선이지만 시간이 지남에 따라 노력이 그 자체로 보답한다는 것을 알게 될 것입니다.
매트 윌키
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.