Suite

La fonction PostGIS ST_AsTIFF lève une exception de mémoire ?


Nous avons une image satellite chargée dans PostGIS. Nous avons calculé un raster de réflectance à partir de cette image et stocké les résultats sous forme de pixels 32BF. Il y a 54 tuiles 1000x1000 dans le raster de réflectance.

Je veux créer un GeoTIFF de ce raster de réflectance. Les carreaux individuels fonctionnent bien. Mais l'utilisation d'un ST_Union sur la colonne raster de réflectance lève une exception lors de l'exécution de la requête ci-dessous à partir de Python :

SELECT ST_AsTIFF(ST_Union(refl_rast), 'GTiff') gtiff FROM sat_rast_calc InternalError : taille de la demande d'allocation de mémoire non valide 1344128795

Je sais que je peux exporter les tuiles individuellement et les fusionner avec gdal_merge.py par la suite. Je préférerais cependant exporter ce GTiff en une seule étape.

L'un d'entre eux serait-il susceptible d'aider?

  1. Utiliser un autre type de pixel
  2. Passer une autre option ST_AsGTIFF
  3. Augmenter un paramètre de mémoire PostGRES
  4. Augmenter un paramètre du noyau Linux
  5. Faire autre chose

La limite en mémoire pour une ligne dans PostgreSQL est de 1 Go. Essayez d'utiliser un type de pixel moins gourmand en mémoire. Vous pouvez également essayer de passer un paramètre de compression à ST_AsTiff() mais je pense que le travail interne se fait sans compression. Essayez également de compresser les tuiles AVANT ST_Union() juste au cas où… Les rasters dans PostGIS sont conçus pour bien fonctionner en tant que petits morceaux de raster. Ne pas manipuler les gros rasters dans leur ensemble.


Voir la vidéo: Introduction to PostGIS (Octobre 2021).