파이썬에서 GTiff에 대한 통계를 생성하기 위해 GDAL을 얻는 방법


14

저는 정기적으로 Python에서 GDAL을 사용하여 자체 GeoTIFF 래스터를 만듭니다.

from osgeo import gdal
from numpy import random
data = random.uniform(0, 10, (300, 200))
driver = gdal.GetDriverByName('GTiff')
ds = driver.Create('MyRaster.tif', 200, 300)
band = ds.GetRasterBand(1)
band.WriteArray(data)
ds = band = None # save, close

그러나 ArcCatalog / ArcGIS로 결과를 볼 때는 통계가 없으므로 검정 또는 회색으로 나타납니다. 래스터를 마우스 오른쪽 버튼으로 클릭하고 ArcCatalog에서 "Calculate Statistics ..."를 선택하거나 (다른 방법으로 수행 할 수있는 방법이 있음) 명령 프롬프트에서 gdalinfo 를 사용 하여이 문제해결 합니다.

gdalinfo -stats MyRaster.tif

MyRaster.tif.aux.xmlArcGIS에서 래스터를 적절하게 스케일링하기 위해 사용하는를 생성 합니다. PAM (Persistent Auxiliary Metadata) 파일에는 통계, 특히 최소값과 최대 값이 포함됩니다.

<PAMDataset>
  <PAMRasterBand band="1">
    <Metadata>
      <MDI key="STATISTICS_MINIMUM">0</MDI>
      <MDI key="STATISTICS_MAXIMUM">10</MDI>
      <MDI key="STATISTICS_MEAN">5.0189833333333</MDI>
      <MDI key="STATISTICS_STDDEV">2.9131294111984</MDI>
    </Metadata>
  </PAMRasterBand>
</PAMDataset>

내 질문 : GDAL이 통계 파일을 만들 수있는 기본 제공 방법이 gdalinfo -stats있습니까 (명령 사용 이외 )? 아니면 내가 직접 써야합니까?

답변:


13

GetStatistics 메서드를 사용하여 통계를 얻을 수 있습니다.

예.

stats =   ds.GetRasterBand(1).GetStatistics(0,1)

반환합니다 (Min, Max, Mean, StdDev)

따라서 XML을 읽을 수 있습니다.

<PAMDataset>
  <PAMRasterBand band="1">
    <Metadata>
      <MDI key="STATISTICS_MINIMUM">stats[0]</MDI>
      <MDI key="STATISTICS_MAXIMUM">stats[1]</MDI>
      <MDI key="STATISTICS_MEAN">stats[2]</MDI>
      <MDI key="STATISTICS_STDDEV">stats[3]</MDI>
    </Metadata>
  </PAMRasterBand>
</PAMDataset>

나는 python으로 XML 파일을 생성 / 조작하는 방법을 모른다. 그러나 수반되는 xml의 단순한 특성을 고려할 때 파일 I / O 작업으로 파일을 생성하는 것은 매우 중요하다.


5
그것은 밝혀 band.GetStatistics(0,1)실제로 통계를 계산하고 하나의 파일에 GeoTIFF 메타 데이터에 추가합니다. 다른 파일이 필요하지 않습니다. 그러나 Esri 제품으로 테스트하면 ArcGIS 9.3 이전 버전이 아닌 ArcGIS 10.0 이상에서만 작동합니다.
Mike T

이 기능은 GDAL 페이지 에 설명되어 있습니다. 이를 기반으로 함수에 전달 된 두 개의 인수는 bApproxOK (개요 또는 모든 타일의 하위 집합을 기반으로 TRUE 통계를 계산할 수있는 경우) 및 bForce (이미지를 다시 스캔하지 않고 수행 할 수있는 경우에만 FALSE 통계가 반환되는 경우)입니다. .

3

통계가 이미 계산되어 파일에 내부적으로 포함되어 있으면 gdalinfo -statsGDAL 2.1.0을 사용하기위한 추가 PAM 통계 파일 (.aux.xml)을 만들지 않습니다. 그러나 자신만의 .xml을 구현하는 것은 매우 쉽습니다. 다음 은 그러한 작업을 수행하기 위해 설명 된 내장 Python 모듈입니다. 나 자신을 위해 아래 코드와 함께 ElementTree XML API를 사용했습니다.

import xml.etree.cElementTree as ET

stats = file.GetRasterBand(band).GetStatistics(0,1)

pamDataset = ET.Element("PAMDataset")
pamRasterband = ET.SubElement(pamDataset, "PAMRasterBand", band="1")
metadata = ET.SubElement(pamRasterband, "Metadata")
ET.SubElement(metadata, "MDI", key = "STATISTICS_MAXIMUM").text = str(stats[1])
ET.SubElement(metadata, "MDI", key = "STATISTICS_MEAN").text = str(stats[2])
ET.SubElement(metadata, "MDI", key = "STATISTICS_MINIMUM").text = str(stats[0])
ET.SubElement(metadata, "MDI", key = "STATISTICS_STDDEV").text = str(stats[3])

tree = ET.ElementTree(pamDataset)
tree.write(destFilePath + ".aux.xml")

결과는 다음과 같습니다.

<PAMDataset>
    <PAMRasterBand band="1">
        <Metadata>
            <MDI key="STATISTICS_MINIMUM">-40.65</MDI>
            <MDI key="STATISTICS_MEAN">10.2929293137</MDI>
            <MDI key="STATISTICS_MAXIMUM">45.050012207</MDI>
            <MDI key="STATISTICS_STDDEV">17.4892321447</MDI>
        </Metadata>
    </PAMRasterBand>
</PAMDataset> 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.