Regularnie tworzę własne rastry GeoTIFF z GDAL w Pythonie, np .:
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
Jednak gdy wynik jest wyświetlany za pomocą ArcCatalog / ArcGIS, wygląda na czarny lub szary, ponieważ nie ma statystyk. Można to rozwiązać albo klikając prawym przyciskiem myszy raster i wybierając „Oblicz statystyki ...” w ArcCatalog (istnieje kilka innych sposobów, aby to zrobić), lub używając gdalinfo w wierszu polecenia:
gdalinfo -stats MyRaster.tif
wygeneruje MyRaster.tif.aux.xml
, który jest używany przez ArcGIS do prawidłowego skalowania rastra. Plik PAM (Persistent Auxiliary Metadata) zawiera statystyki, w szczególności wartości minimalne i maksymalne:
<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>
Moje pytanie: czy istnieje wbudowany sposób zmuszenia GDAL do utworzenia pliku statystyk (innego niż użycie gdalinfo -stats
polecenia)? Czy też muszę pisać własne?
źródło
band.GetStatistics(0,1)
faktycznie obliczy statystyki i doda je do metadanych GeoTIFF w jednym pliku. Żadne inne pliki nie są wymagane. Jednak z testów produktów Esri działa tylko z ArcGIS 10.0 i nowszymi, a nie ArcGIS 9.3 lub wcześniejszymi.Jeśli statystyki są już obliczone i uwzględnione w pliku wewnętrznie,
gdalinfo -stats
nie należy tworzyć dodatkowego pliku statystyk PAM (.aux.xml) do korzystania z GDAL 2.1.0. Ale bardzo łatwo jest zaimplementować plik .xml dla własnego. Oto kilka wbudowanych modułów Pythona, które wyjaśniają, jak to zrobić. Dla siebie użyłem API ElementTree XML z poniższym kodem:Wynik wygląda następująco:
źródło