Les GeoTIFF fabriqués dans GDAL n'ont pas de plage min / max lorsqu'ils sont chargés dans Arc / QGIS

11

Je crée des rasters à virgule flottante dans GDAL avec le pilote GeoTIFF. Lorsque je charge les images résultantes dans QGIS ou Arc, la symbologie par défaut met le min à -3.40282e38 et le max à 3.40282e38, de sorte que le raster semble exactement gris. Existe-t-il un moyen d'écrire directement la plage réelle dans GeoTIFF, donc lorsqu'il est chargé dans un programme SIG, il met automatiquement à l'échelle l'histogramme? J'ai essayé de créer un histogramme par défaut comme celui-ci:

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

Mais j'obtiens une erreur qui ressemble à un problème de liaison:

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

Des suggestions sur ce que je pourrais faire, ou si j'ai fait une erreur?

Riches
la source

Réponses:

8

Si vous générez les données, vous pouvez suivre les valeurs min et max à la volée. Si vous ne contrôlez pas directement les données source, par exemple, si vous compositez des données existantes, l'utilisation ComputeRasterMinMax(0)est très bien.

Quoi qu'il en soit, après avoir obtenu vos valeurs min et max, vous devez appeler SetStatistics()la bande et vous assurer de définir votre jeu de données Nonelorsque vous avez terminé pour vous assurer que tout est écrit sur le disque.

De plus, quelque chose dans mon esprit me dit que l'utilisation dataset.GetRasterBand(1).<some band function>ne fonctionnera pas correctement en raison de la façon dont GDAL Python gère les références de bande. Je ne me souviens pas des détails, mais il y avait quelque chose sur la liste de diffusion GDALDev il y a quelque temps. Il est donc préférable de créer une variable de bande explicitement:, band = dataset.GetRasterBand(1)puis appelez band.SetStatistics(min, max, mean, stddev).

MerseyViking
la source
Merci, cela a fait l'affaire, et merci pour le contexte. Soit dit en passant, j'ai pu imbriquer la référence de bande sans variable temporaire sans problème.
Rich
Notez que band.ComputeStatistics(0)stocke également des statistiques. C'est une ligne simple.
Mike T
1

Je ne connais pas de moyen de le faire en utilisant GDAL, mais vous pouvez utiliser python pour appeler l'outil `` calculer les statistiques '' dans Arc.

Cyrus
la source
2
Salut Cyrus, bienvenue sur GIS.se :) Bien que correcte, ta réponse est peu susceptible d'attirer des votes pour deux raisons. L'outil de calcul de statistiques arcpy place les statistiques dans un fichier externe .aux et l'affiche demandée "directement dans le géotiff". Deuxièmement, bien qu'Arcgis soit mentionné dans le titre, le corps de la question et ses balises indiquent que l'affiche est vraiment plus intéressée par une solution gdal / qgis. Dans tous les cas, merci pour votre contribution et continuez. C'est un peu de courbe d'apprentissage pour commencer, mais je pense que vous constaterez au fil du temps que l'effort se rembourse.
matt wilkie