Je crée régulièrement mes propres rasters GeoTIFF avec GDAL en Python, par exemple:
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
cependant, lorsque le résultat est affiché avec ArcCatalog / ArcGIS, il apparaît en noir ou en gris, car il n'a pas de statistiques. Ceci est résolu soit en cliquant avec le bouton droit sur le raster et en choisissant "Calculer les statistiques ..." dans ArcCatalog (il existe plusieurs autres façons de le faire), soit en utilisant gdalinfo dans une invite de commande:
gdalinfo -stats MyRaster.tif
va générer MyRaster.tif.aux.xml
, qui est utilisé par ArcGIS pour dimensionner correctement le raster. Le fichier PAM (Persistent Auxiliary Metadata) contient les statistiques, notamment les valeurs minimales et maximales:
<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>
Ma question: existe-t-il un moyen intégré pour que GDAL crée un fichier de statistiques (autre que l'utilisation de la gdalinfo -stats
commande)? Ou dois-je écrire le mien?
la source
band.GetStatistics(0,1)
cela calculera réellement les statistiques et les ajoutera aux métadonnées GeoTIFF dans le fichier unique. Aucun autre fichier requis. Cependant, à partir des tests avec les produits Esri, il ne fonctionne qu'avec ArcGIS 10.0 et versions ultérieures, et non ArcGIS 9.3 ou antérieur.Si les statistiques sont déjà calculées et incluses dans le fichier en interne,
gdalinfo -stats
ne créez pas de fichier de statistiques PAM supplémentaire (.aux.xml) pour utiliser GDAL 2.1.0. Mais il est très facile d'implémenter le .xml pour vous-même. Voici quelques modules Python intégrés expliqués pour faire ce genre de choses. Pour moi, j'ai utilisé l' API XML ElementTree avec le code ci-dessous:Le résultat ressemble à:
la source