Suite

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

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


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 place le minimum à -3,40282e38 et le maximum à 3,40282e38, de sorte que le raster semble exactement gris. Existe-t-il un moyen d'écrire la plage réelle dans le GeoTIFF directement afin que, lorsqu'il est chargé dans un programme SIG, l'histogramme soit automatiquement mis à l'échelle correctement ? 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 :

Fichier "/usr/lib/python2.6/dist-packages/osgeo/gdal.py", ligne 846, dans 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 ?


Si vous générez les données, vous pouvez suivre le min et le max à la volée. Si vous n'avez pas le contrôle direct des données source, disons si vous composez des données existantes, puis utilisezCalculerRasterMinMax(0)c'est bien.

Quoi qu'il en soit, après avoir obtenu vos valeurs min et max, vous devriez appelerSetStatistics()sur la bande et assurez-vous de définir votre ensemble de données surRienlorsque vous avez terminé pour vous assurer que tout est écrit sur le disque.

Aussi, quelque chose dans le fond de mon esprit me dit d'utiliserdataset.GetRasterBand(1).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 explicitement une variable de bande :bande = jeu de données.GetRasterBand(1), puis appelezband.SetStatistics(min, max, moyenne, stddev).


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.