Chapter 10. Référence Raster

Table of Contents
10.1. Types de données pour la prise en charge raster
10.2. Gestion raster
10.3. Constructeurs de raster
10.4. Fonctions d'accès aux rasters
10.5. Fonctions d'accès aux bandes raster
10.6. Fonctions d'accès et de modifications des pixels raster
10.7. Éditeurs de raster
10.8. Éditeurs de bandes raster
10.9. Statistiques et analyses des bandes raster
10.10. Import de raster
10.11. Export de raster
10.12. Traitement des données raster : algèbre cartographique
10.13. Fonctions de rappel intégrées d'algèbre cartographique
10.14. Traitement des données raster : MNT (élévation)
10.15. Traitement des données raster : raster vers géométrie
10.16. Opérateurs raster
10.17. Relations spatiales entre raster et entre bandes raster
10.18. Astuces raster
10.18.1. Rasters out-DB

Les fonctions mentionnées ci-dessous sont celles qu'un utilisateur typique de PostGIS Raster sera amené à utiliser et qui sont disponibles dans PostGIS Raster. D'autres fonctions sont également définies, requises en interne pour le support des objets rasters, mais ne sont pas destinées à être utilisées par le grand public.

raster est un nouveau type PostGIS pour stocker et analyser les données raster.

Pour charger des rasters depuis des fichiers, voir Section 9.1, “Chargement et création de rasters”

Pour les exemples dans cette section, nous utiliserons une table de rasters fictifs, créée via la requête suivante

CREATE TABLE dummy_rast(rid integer, rast raster);
INSERT INTO dummy_rast(rid, rast)
VALUES (1,
('01' -- little endian (uint8 ndr)
||
'0000' -- version (uint16 0)
||
'0000' -- nBands (uint16 0)
||
'0000000000000040' -- scaleX (float64 2)
||
'0000000000000840' -- scaleY (float64 3)
||
'000000000000E03F' -- ipX (float64 0.5)
||
'000000000000E03F' -- ipY (float64 0.5)
||
'0000000000000000' -- skewX (float64 0)
||
'0000000000000000' -- skewY (float64 0)
||
'00000000' -- SRID (int32 0)
||
'0A00' -- width (uint16 10)
||
'1400' -- height (uint16 20)
)::raster
),
-- Raster: 5 x 5 pixels, 3 bands, PT_8BUI pixel type, NODATA = 0
(2,  ('01000003009A9999999999A93F9A9999999999A9BF000000E02B274A' ||
'41000000007719564100000000000000000000000000000000FFFFFFFF050005000400FDFEFDFEFEFDFEFEFDF9FAFEF' ||
'EFCF9FBFDFEFEFDFCFAFEFEFE04004E627AADD16076B4F9FE6370A9F5FE59637AB0E54F58617087040046566487A1506CA2E3FA5A6CAFFBFE4D566DA4CB3E454C5665')::raster);

10.1. Types de données pour la prise en charge raster

Abstract

Cette section liste les types de données PostgreSQL créés pour supporter les fonctionnalités raster.

geomval — Un type spatial comportant deux champs : geom (stockant un objet géométrique) et val (stockant la valeur du pixel en double précision depuis une bande du raster).
addbandarg — Un type composite utilisé comme entrée pour la fonction ST_AddBand pour définir les attributs et la valeur initiale d'une nouvelle bande.
rastbandarg — Un type composite pour représenter à la fois un raster et un indice d'une bande de ce raster.
raster — Type de données raster spatial.
reclassarg — Un type composite utilisé comme entrée pour la fonction ST_Reclass pour définir le comportement de la reclassification.
summarystats — Un type composite retournée par les fonctions ST_SummaryStats et ST_SummaryStatsAgg.
unionarg — Un type composite utilisé comme entrée de la fonction ST_Union pour définir les bandes à traiter et le comportement de l'opération d'union.

10.2. Gestion raster

AddRasterConstraints — Ajoute des contraintes raster à une table pour une colonne spécifique pour contraindre le système de référence spatial, l'échelle, la taille des blocs, l'alignement, le nombre de bandes, le type de pixels, la contrainte d'unicité spatiale. La table doit être chargée avec des données pour que les contraintes puissent être inférées. Retourne true si les contraintes ont été ajoutées, ou émet une notice sinon.
DropRasterConstraints — Supprime des contraintes raster PostGIS raster sur une colonne raster d'une table. Utile pour recharger des données ou mettre à jour les données d'une colonne raster.
AddOverviewConstraints — Marque une colonne raster comme étant un aperçu d'une autre colonne.
DropOverviewConstraints — Supprime les contraintes d'aperçu de la colonne.
PostGIS_GDAL_Version — Retourne la version de la bibliothèque GDAL utilisée par PostGIS.
PostGIS_Raster_Lib_Build_Date — Retourne la date de compilation de la bibliothèque raster.
PostGIS_Raster_Lib_Version — Retourne la version complète de la bibliothèque raster et les informations sur la configuration de la compilation.
ST_GDALDrivers — Retourne la liste des formats raster supportés par PostGIS via GDAL. Seuls les formats avec can_write=True peuvent être utilisés par ST_AsGDALRaster
ST_Contour — Génère un ensemble de courbes de niveau vectorielles depuis la bande raster spécifiée, en utilisant l'algorithme de contour GDAL.
ST_InterpolateRaster — Interpole une surface quadrillée à partir d'un ensemble de points 3-d, en utilisant les coordonnées X et Y des points sur la grille et la coordonnée Z des points pour l'élévation des points.
UpdateRasterSRID — Change le SRID de tous les rasters dans la table et colonne en paramètres.
ST_CreateOverview — Créé une version à plus faible résolution d'une colonne raster.

10.3. Constructeurs de raster

ST_AddBand — Retourne un raster avec la/les nouvelle(s) bande(s) ajouté(s) à un index donné, de type et valeur initiale donnés. Si aucun index n'est spécifié, la bande est ajoutée à la fin.
ST_AsRaster — Convertit une géométrie PostGIS en un raster PostGIS.
ST_Band — Retourne une ou plusieurs bandes d'un raster existant en tant que nouveau raster. Utile pour construire de nouveaux rasters à partir de rasters existants.
ST_MakeEmptyCoverage — Couvre une zone géo-référencée avec une grille raster de tuiles vides.
ST_MakeEmptyRaster — Retourne un raster vide (sans aucune bande) de dimension donnée (width & height), de coin supérieur gauche à X et Y, de paramètres de taille de pixel données (scalex, scaley, skewx & skewy) et de système de référence spatial (srid) donné. Si un raster est spécifié, retourne un nouveau raster de même taille, alignement et SRID. Si srid n'est pas spécifié, le système de référence spatial est défini à inconnu (0).
ST_Tile — Retourne un ensemble de rasters issus de la division d'un raster d'entrée selon les dimensions spécifiées pour les rasters de sortie.
ST_Retile — Retourne un ensemble de tuiles configurées à partir d'une couverture raster composée de tuiles arbitraires.
ST_FromGDALRaster — Retourne un raster depuis un fichier raster supporté par GDAL.

10.4. Fonctions d'accès aux rasters

ST_GeoReference — Retourne les méta-données de géo-référencement au format GDAL (par défaut) ou ESRI, tel qu'utilisé généralement dans les fichiers world file.
ST_Height — Retourne la hauteur du raster en pixels.
ST_IsEmpty — Retourne true si le raster est vide (largeur = 0 et hauteur = 0). Sinon, retourne false.
ST_MemSize — Retourne l'espace utilisé par le raster (en octets).
ST_MetaData — Retourne les méta-données de base de l'objet raster : taille des pixels, rotation, coin haut/bas gauche, etc.
ST_NumBands — Retourne le nombre de bandes de l'objet raster.
ST_PixelHeight — Retourne la hauteur d'un pixel, dans l'unité du système de référence spatial.
ST_PixelWidth — Retourne la largeur d'un pixel, dans l'unité du système de référence spatial.
ST_ScaleX — Renvoie la composante X de la largeur du pixel dans l'unité du système de référence spatial.
ST_ScaleY — Renvoie la composante Y de la hauteur du pixel dans l'unité du système de référence spatial.
ST_RasterToWorldCoord — Retourne le coin supérieur gauche du raster, sous forme de coordonnées X et Y (longitude et latitude) d'un colonne et d'une ligne. Les numéros de colonne et de ligne commencent à 1.
ST_RasterToWorldCoordX — Retourne la coordonnée X du coin supérieur gauche du raster à column et row. Les numéros de colonne et de ligne commencent à 1.
ST_RasterToWorldCoordY — Retourne la coordonnée Y du coin supérieur gauche du raster à column et row. Les numéros de colonne et de ligne commencent à 1.
ST_Rotation — Retourne l'angle de rotation du raster en radians.
ST_SkewX — Retourne l'obliquité géo-référencée X (paramètre de rotation).
ST_SkewY — Retourne l'obliquité géo-référencée Y (paramètre de rotation).
ST_SRID — Retourne l'identifiant du système de référence spatial du raster, tel que défini dans la table spatial_ref_sys.
ST_Summary — Retourne un résumé du contenu du raster sous forme de texte.
ST_UpperLeftX — Retourne la coordonnée X du coin supérieur gauche du raster projeté dans le système de référence spatial.
ST_UpperLeftY — Retourne la coordonnée Y du coin supérieur gauche du raster projeté dans le système de référence spatial.
ST_Width — Retourne la largeur du raster en pixels.
ST_WorldToRasterCoord — Retourne le coin supérieur gauche comme colonne et ligne, en fonction de coordonnées géométriques X et Y (longitude et latitude) ou un point géométrique dans le système de référence spatial du raster.
ST_WorldToRasterCoordX — Retourne la colonne dans le raster du point géométrique (pt) ou des coordonnées X et Y (xw, yw) exprimés dans le système de référence spatial du raster.
ST_WorldToRasterCoordY — Retourne la ligne dans le raster du point géométrique (pt) ou des coordonnées X et Y (xw, yw) exprimés dans le système de référence spatial du raster.

10.5. Fonctions d'accès aux bandes raster

ST_BandMetaData — Retourne les méta-données de base d'une bande raster spécifique. Si aucune bande n'est spécifiée, la bande 1 est utilisée.
ST_BandNoDataValue — Retourne la valeur qui représente l'absence de valeur (nodata) pour cette bande. Si aucune bande n'est spécifiée, la bande 1 est utilisée.
ST_BandIsNoData — Retourne true si la bande ne contient que des valeurs nodata.
ST_BandPath — Retourne le chemin système du fichier d'une bande stockée sur le système de fichier. Si aucune bande n'est spécifiée, la bande 1 est utilisée.
ST_BandFileSize — Retourne la taille du fichier d'une bande stockée sur le système de fichier. Si aucune bande n'est spécifiée, la bande 1 est utilisée.
ST_BandFileTimestamp — Retourne le timestamp du fichier d'une bande stockée sur le système de fichier. Si aucune bande n'est spécifiée, la bande 1 est utilisée.
ST_BandPixelType — Retourne le type de pixel d'une bande. Si aucune bande n'est spécifiée, la bande 1 est utilisée.
ST_MinPossibleValue — Retourne la valeur minimale supportée par le type de pixel pixeltype.
ST_HasNoBand — Retourne true si le raster n'a pas la bande spécifiée. Si aucune bande n'est spécifiée, la bande 1 est utilisée.

10.6. Fonctions d'accès et de modifications des pixels raster

ST_PixelAsPolygon — Retourne la géométrie polygonale qui délimite le pixel pour une ligne et colonne spécifiées.
ST_PixelAsPolygons — Retourne la géométrie polygonale qui délimite chaque pixel de la bande raster, avec la valeur et les coordonnées raster X et Y de chaque pixel.
ST_PixelAsPoint — Retourne le point géométrique du coin supérieur gauche du pixel.
ST_PixelAsPoints — Retourne un point géométrique pour chaque pixel de la bande raster, avec sa valeur et ses coordonnées raster X et Y. Les coordonnées du points sont ceux du coin supérieur gauche du pixel.
ST_PixelAsCentroid — Retourne le centroïde (point géométrique) de la zone représentée par un pixel.
ST_PixelAsCentroids — Retourne le centroïde (point géométrique) pour chaque pixel de la bande raster, avec sa valeur et les coordonnées raster X et Y. Le point géométrique est le centroïde de la zone représentée par un pixel.
ST_Value — Retourne la valeur d'une bande raster spécifiée au pixel donné par columnx, rowy, ou à un point géométrique spécifié. Le numéro de bande démarre à 1, et la bande 1 est utilisée si non spécifié. Si exclude_nodata_value vaut false, tous les pixels y compris ceux ayant la valeur nodata sont considérés comme intersectés et leur valeur sera retournée. Si exclude_nodata_value n'est pas spécifié, la valeur est lue depuis les méta-données du raster.
ST_NearestValue — Retourne la valeur la plus proche différent de NODATA pour une bande raster spécifiée au pixel donné par columnx et rowy, ou à un point géométrique spécifié dans le même système de référence spatial que le raster.
ST_SetZ — Retourne une géométrie avec les mêmes coordonnées X/Y que la géométrie d'entrée, et avec la coordonnée Z copiée depuis les valeurs du raster selon l'algorithme d'interpolation en paramètre.
ST_SetM — Retourne une géométrie avec les mêmes coordonnées X/Y que la géométrie d'entrée, et avec la coordonnée M copiée depuis les valeurs du raster selon l'algorithme d'interpolation en paramètre.
ST_Neighborhood — Retourne un tableau 2-D de double avec les valeurs non NODATA autour du pixel de la bande spécifiée, aux coordonnées spécifiées par columnX & rowY ou par un point géométrique dans le même système de référence spatial que le raster.
ST_SetValue — Retourne un nouveau raster en modifiant la valeur du pixel pour la bande spécifiée et aux coordonnées columnx, rowy, ou pour tous les pixels qui intersectent une géométrie spécifiée. Le numéro de bande démarre à 1, et la bande 1 est utilisée si non spécifié.
ST_SetValues — Retourne un nouveau raster en modifiant les valeurs de certains pixels d'une bande spécifiée.
ST_DumpValues — Retourne les valeurs d'une bande raster spécifiée, sous forme d'un tableau à deux dimensions.
ST_PixelOfValue — Retourne les coordonnées columnx, rowy du pixel dont la valeur est égale à la valeur recherchée.

10.7. Éditeurs de raster

ST_SetGeoReference — Définit les 6 paramètres de géo-référencement en un seul appel. Les nombres doivent être séparés par un espace. Accepte les formats GDAL (par défaut) ou ESRI.
ST_SetRotation — Définit la rotation du raster en radians.
ST_SetScale — Définit la résolution des pixels en X et Y en unité du système de référence spatial : nombre d'unités/pixel en largeur/hauteur.
ST_SetSkew — Définit l'obliquité X et Y (skew, ou paramètre de rotation). Si une seule valeur est spécifiée, la même valeur est utilisée pour X et pour Y.
ST_SetSRID — Modifie le SRID d'un raster à une valeur définie dans la table spatial_ref_sys.
ST_SetUpperLeft — Modifie les coordonnées du pixel du coin supérieur gauche du raster, selon les coordonnées X et Y projetées.
ST_Resample — Rééchantillonne un raster, en utilisant l'algorithme spécifié, les nouvelles dimensions, un coin arbitraire de la grille et un ensemble de paramètres de géo-référencement définis ou empruntés à un autre raster.
ST_Rescale — Rééchantillonne un raster en ajustant juste son échelle (ou la taille des pixels). Les nouvelles valeurs des pixels sont calculées en utilisant l'algorithme de rééchantillonnage NearestNeighbor (plus proche voisin), Bilinear (Bilinéaire), Cubic (Cubique), CubicSpline (Cubique Spline), Lanczos, Max ou Min. La valeur par défaut est NearestNeighbor.
ST_Reskew — Rééchantillonne un raster en ajustant simplement son obliquité (skew, ou paramètre de rotation). Les nouvelles valeurs des pixels sont calculées en utilisant l'algorithme de rééchantillonnage NearestNeighbor (plus proche voisin), Bilinear (Bilinéaire), Cubic (Cubique), CubicSpline (Cubique Spline) ou Lanczos. La valeur par défaut est NearestNeighbor.
ST_SnapToGrid — Rééchantillonne un raster en l'accrochant sur une grille. Les nouvelles valeurs des pixels sont calculées en utilisant l'algorithme de rééchantillonnage NearestNeighbor (plus proche voisin), Bilinear (Bilinéaire), Cubic (Cubique), CubicSpline (Cubique Spline) ou Lanczos. La valeur par défaut est NearestNeighbor.
ST_Resize — Redimensionne un raster à une nouvelle largeur/hauteur
ST_Transform — Reprojette un raster depuis un système de référence spatial vers un autre, en utilisant l'algorithme de rééchantillonnage spécifié. Les algorithmes possibles sont NearestNeighbor (plus proche voisin), Bilinear (Bilinéaire), Cubic (Cubique), CubicSpline (Cubique Spline) ou Lanczos. La valeur par défaut est NearestNeighbor.

10.8. Éditeurs de bandes raster

ST_SetBandNoDataValue — Définit la valeur pour l'absence de données (nodata) pour la bande spécifiée. Si aucune bande n'est spécifiée, la bande 1 est utilisée. Pour indiquer qu'une bande n'a pas de valeur nodata, définir la valeur nodata = NULL.
ST_SetBandIsNoData — Définit la valeur du flag isnodata de la bande à TRUE.
ST_SetBandPath — Met à jour le chemin externe et le numéro de bande d'une bande out-db
ST_SetBandIndex — Met à jour le numéro de bande externe d'une bande out-db

10.9. Statistiques et analyses des bandes raster

ST_Count — Renvoie le nombre de pixels dans une bande donnée d'un raster ou d'une couverture raster. Si aucune bande n'est spécifiée, la valeur par défaut est la bande 1. Si exclude_nodata_value est true, seuls les pixels dont la valeur est différente de la valeur nodata seront comptés.
ST_CountAgg — Agrégat. Renvoie le nombre de pixels dans une bande donnée d'un ensemble de rasters. Si aucune bande n'est spécifiée, la valeur par défaut est la bande 1. Si exclude_nodata_value est true, seuls les pixels différents de la valeur NODATA seront comptés.
ST_Histogram — Retourne un ensemble d'enregistrements résumant une distribution de données raster ou de couverture raster, dans des classes distinctes. Le nombre de classes est calculé automatiquement s'il n'est pas spécifié.
ST_Quantile — Calcule les quantiles d'un raster ou d'une couverture raster, dans le contexte de l'échantillon ou de la population. Ainsi, une valeur peut être examinée pour se situer au percentile de 25%, 50% ou 75% du raster.
ST_SummaryStats — Retourne des résumés statistiques (count, sum, mean, stddev, min, max) pour une bande raster ou une couverture raster spécifiée. Si aucune bande n'est spécifiée, la bande 1 est utilisée.
ST_SummaryStatsAgg — Agrégat. Retourne des résumés statistiques (count, sum, mean, stddev, min, max) pour une bande raster spécifiée pour une ensemble de rasters. Si aucune bande n'est spécifiée, la bande 1 est utilisée.
ST_ValueCount — Retourne un ensemble d'enregistrements contenant une valeur de pixels et le nombre de pixels ayant cette valeur dans la bande du raster spécifié (ou de la couverture raster). Si aucune bande n'est spécifiée, la bande 1 est utilisée. Par défaut, les pixels de valeur nodata ne sont pas comptés, et toutes les autres valeurs sont retournées, avec leur valeur arrondies à l'entier le plus proche.

10.10. Import de raster

ST_RastFromWKB — Retourne un raster à partir d'un raster Well-Known Binary (WKB).
ST_RastFromHexWKB — Retourne un raster à partir d'un raster Well-Known Binary (WKB) en hexadécimal.

10.11. Export de raster

ST_AsBinary/ST_AsWKB — Retourne la représentation Well-Known Binary (WKB) de ce raster.
ST_AsHexWKB — Retourne la représentation hexadécimale Well-Known Binary (WKB) de ce raster.
ST_AsGDALRaster — Retourne la tuile raster dans le format GDAL raster spécifié. Les formats raster disponibles sont ceux supportés par votre bibliothèque compilée. Utilisez ST_GDALDrivers() pour obtenir la liste des formats supportés par votre bibliothèque.
ST_AsJPEG — Retourne les bandes sélectionnées du raster sous la forme d'une image JPEG (sous forme de tableau d'octets). Si aucune bande n'est spécifiée, et que le raster a 1 ou plus de 3 bandes, seule la première bande est utilisée. Si le raster a exactement 3 bandes, les 3 bandes sont utilisées et mappées en RGB.
ST_AsPNG — Retourne les bandes sélectionnées du raster sous la forme d'une image PNG (sous forme de tableau d'octets). Si aucune bande n'est spécifiée et que le raster a 1, 3 ou 4 bandes, toutes les bandes sont utilisées. Si aucune bande n'est spécifiée et que le raster a 2 ou plus de 4 bandes, seule la bande 1 est utilisée. Les bandes sont mappées en RGB ou RGBA.
ST_AsTIFF — Retourne les bandes sélectionnées du raster sous la forme d'une seule image TIFF (sous forme de tableau d'octets). Si aucune bande n'est spécifiée ou si l'une des bandes spécifiées n'existe pas dans le raster, toutes les bandes sont utilisées.

10.12. Traitement des données raster : algèbre cartographique

ST_Clip — Retourne le raster coupé par la géométrie d'entrée. Si le numéro de bande n'est pas spécifié, toutes les bandes sont traitées. Si crop n'est pas spécifié ou est TRUE, le raster de sortie est recadré.
ST_ColorMap — Crée un nouveau raster comprenant jusqu'à quatre bandes 8BUI (niveaux de gris, RGB, RGBA) à partir du raster source et d'une bande spécifiée. Si aucune bande n'est spécifiée, la bande 1 est utilisée.
ST_Grayscale — Crée un nouveau raster à 1 bande 8BUI à partir du raster source et des bandes spécifiées représentant les composantes rouge, vert et bleu
ST_Intersection — Retourne un raster ou un ensemble de paires (géométrie, valeur de pixel) représentant la partie partagée de deux rasters ou l'intersection géométrique d'une vectorisation du raster et d'une géométrie.
ST_MapAlgebra (callback function version) — Version avec fonction de rappel - Retourne un raster à une bande à partir d'un ou plusieurs rasters d'entrée, d'index de bandes et d'une fonction de rappel spécifiée par l'utilisateur.
ST_MapAlgebra (expression version) — Version avec expression - Retourne un raster à une bande à partir d'un ou deux rasters d'entrée, d'index de bandes et d'une ou plusieurs expressions SQL spécifiées par l'utilisateur.
ST_MapAlgebraExpr — Version avec raster à 1 bande : Crée un nouveau raster à une bande formé par l'application d'une opération algébrique PostgreSQL valide sur la bande d'entrée du raster et du type de pixel fourni. Si aucune bande n'est spécifiée, la bande 1 est utilisée.
ST_MapAlgebraExpr — Version avec 2 bandes : Crée un nouveau raster à une bande formé en appliquant une opération algébrique PostgreSQL valide sur les deux bandes du raster d'entrée et du type de pixel fourni. La bande 1 de chaque raster est utilisée si aucun numéro de bande n'est spécifié. Le raster résultant sera aligné (échelle, obliquité et coins) sur la grille définie par le premier raster et aura son étendue définie par le paramètre "extenttype". Les valeurs de "extenttype" peuvent être : INTERSECTION, UNION, FIRST, SECOND.
ST_MapAlgebraFct — Version à 1 bande - Crée un nouveau raster à une bande formé par l'application d'une fonction PostgreSQL valide sur la bande d'entrée du raster et sur le type de pixel fourni. La bande 1 est utilisée si aucune bande n'est spécifiée.
ST_MapAlgebraFct — Version à 2 bandes - Crée un nouveau raster à une bande formé par l'application d'une fonction PostgreSQL valide sur les 2 bandes d'entrée du raster et sur le type de pixel fourni. La bande 1 est utilisée si aucune bande n'est spécifiée. Le type d'étendue INTERSECTION est utilisé si non spécifié.
ST_MapAlgebraFctNgb — Version à 1 bande : Algèbre cartographique Plus proche voisin en utilisant une fonction PostgreSQL définie par l'utilisateur. Retourne un raster dont les valeurs sont le résultat d'une fonction utilisateur PLPGSQL prenant un voisinage des valeurs de la bande raster d'entrée.
ST_Reclass — Crée un nouveau raster composé de types de bandes reclassifiés par rapport à l'original. La bande n est la bande à modifier. Si nband n'est pas spécifié, la bande 1 est utilisée. Toutes les autres bandes sont retournées inchangées. Cas d'utilisation : convertir une bande 16BUI en 8BUI et ainsi de suite pour un rendu plus simple en tant que formats visualisables.
ST_Union — Retourne l'union d'un ensemble de tuiles raster, en un seul raster composé de 1 ou plusieurs bandes.

10.13. Fonctions de rappel intégrées d'algèbre cartographique

ST_Distinct4ma — Fonction de traitement des données raster qui calcule le nombre de valeurs de pixels uniques dans un voisinage.
ST_InvDistWeight4ma — Fonction de traitement des données raster qui interpole la valeur d'un pixel à partir de son voisinage.
ST_Max4ma — Fonction de traitement des données raster qui calcule la valeur maximale d'un pixel dans un voisinage.
ST_Mean4ma — Fonction de traitement des données raster qui calcule la valeur moyenne d'un pixel dans un voisinage.
ST_Min4ma — Fonction de traitement des données raster qui calcule la valeur minimale d'un pixel dans un voisinage.
ST_MinDist4ma — Fonction de traitement des données raster qui renvoie la distance minimale (en nombre de pixels) entre le pixel d'intérêt et un pixel voisin ayant une valeur.
ST_Range4ma — Fonction de traitement des données raster qui calcule la plage de valeurs des pixels dans un voisinage.
ST_StdDev4ma — Fonction de traitement des données raster qui calcule l'écart type des valeurs des pixels dans un voisinage.
ST_Sum4ma — Fonction de traitement des données raster qui calcule la somme de toutes les valeurs de pixels dans un voisinage.

10.14. Traitement des données raster : MNT (élévation)

ST_Aspect — Retourne l'exposition (par défaut, en degrés) d'une bande raster d'élévation. Utile pour l'analyse de terrain.
ST_HillShade — Retourne l'hypothétique éclairage d'une bande raster d'élévation en utilisant les valeurs d'azimut, d'altitude, de luminosité et d'échelle fournies.
ST_Roughness — Retourne un raster avec la rugosité d'un MNT.
ST_Slope — Retourne la pente (par défaut, en degrés) d'une bande raster d'élévation. Utile pour l'analyse de terrain.
ST_TPI — Retourne un raster avec l'index de position topographique (TPI) calculé.
ST_TRI — Retourne un raster avec l'indice de rugosité du terrain (TRI) calculé.

10.15. Traitement des données raster : raster vers géométrie

Box3D — Retourne la représentation 3d de la boîte englobante du raster.
ST_ConvexHull — Retourne l'enveloppe convexe du raster, en incluant les valeurs de pixels égales à BandNoDataValue. Pour les données raster de forme régulière et sans obliquité, cette fonction donne le même résultat que ST_Envelope ; elle n'est donc utile que pour les données raster de forme irrégulière ou inclinée.
ST_DumpAsPolygons — Retourne un ensemble d'enregistrements de type geomval (geom, val), à partir d'une bande raster donnée. Si aucune bande bandnum n'est spécifiée, la bande 1 est utilisée.
ST_Envelope — Retourne la représentation polygonale de l'étendue du raster.
ST_MinConvexHull — Retourne la géométrie de l'enveloppe convexe du raster en excluant les pixels NODATA.
ST_Polygon — Retourne une géométrie multipolygonale formée par l'union des pixels dont la valeur est différente de nodata. Si aucune bande bandnum n'est spécifiée, la bande 1 est utilisée.

10.16. Opérateurs raster

&& — Retourne TRUE si la boite englobante de A intersecte la boite englobante de B.
&< — Retourne TRUE si la boîte englobante de A est à gauche de celle de B.
&> — Retourne TRUE si la boîte englobante de A est à droite de celle de B.
= — Retourne TRUE si la boîte englobante de A est la même que celle de B. Utilise des boîtes englobantes en double précision.
@ — Retourne TRUE si la boîte englobante de A est contenue dans celle de B. Utilise des boîtes englobantes en double précision.
~= — Renvoie TRUE si la boîte de délimitation de A est la même que celle de B.
~ — Retourne TRUE si la boîte englobante de A contient celle de B. Utilise des boîtes englobantes en double précision.

10.17. Relations spatiales entre raster et entre bandes raster

ST_Contains — Retourne true si aucun point du raster rastB ne se trouve à l'extérieur du raster rastA et si au moins un point de l'intérieur du raster rastB se trouve à l'intérieur du raster rastA.
ST_ContainsProperly — Retourne true si rastB intersecte l'intérieur de rastA, mais pas la frontière ou l'extérieur de rastA.
ST_Covers — Retourne true si aucun point du raster rastB ne se trouve à l'extérieur du raster rastA.
ST_CoveredBy — Retourne true si aucun point du raster rastA ne se trouve à l'extérieur du raster rastB.
ST_Disjoint — Retourne true si le raster rastA n'intersecte pas spatialement le rastB.
ST_Intersects — Retourne vrai si le raster rastA intersecte spatialement le raster rastB.
ST_Overlaps — Retourne true si les raster rastA et rastB intersectent mais que l'un ne contient pas complètement l'autre.
ST_Touches — Retourne true si les raster rastA et rastB ont au moins un point en commun mais que leurs intérieurs n'intersectent pas.
ST_SameAlignment — Retourne true si les rasters ont les mêmes skew, scale, spatial ref, et offset (les pixels peuvent être placés sur la même grille sans être coupés) et false si ce n'est pas le cas, avec une NOTICE détaillant le problème.
ST_NotSameAlignmentReason — Retourne un texte indiquant si les rasters sont alignés et, s'ils ne le sont pas, la raison du problème.
ST_Within — Retourne true si aucun point du raster rastA ne se trouve à l'extérieur du raster rastB et si au moins un point de l'intérieur du raster rastA se trouve à l'intérieur du raster rastB.
ST_DWithin — Retourne true si les rasters rastA et rastB se trouvent à une distance donnée l'un de l'autre.
ST_DFullyWithin — Retourne true si les rasters rastA et rastB se trouvent entièrement à une distance donnée l'un de l'autre.

10.18. Astuces raster

Abstract

Cette section présente divers pièges et astuces liés à PostGIS raster.

10.18.1. Rasters out-DB

10.18.1.1. Répertoire contenant de nombreux fichiers

Lorsque GDAL ouvre un fichier, il parcourt l'entièreté du répertoire du fichier pour construire un catalogue d'autres fichiers. Si ce répertoire contient de nombreux fichiers (par exemple des milliers, des millions), l'ouverture de ce fichier devient extrêmement lente (en particulier si ce fichier se trouve sur un lecteur réseau tel que NFS).

Pour contrôler ce comportement, GDAL fournit la variable d'environnement suivante : GDAL_DISABLE_READDIR_ON_OPEN. Définissez GDAL_DISABLE_READDIR_ON_OPEN à TRUE pour désactiver l'analyse des répertoires.

Sous Ubuntu (et en supposant que vous utilisez les paquets PostgreSQL pour Ubuntu), GDAL_DISABLE_READDIR_ON_OPEN peut être défini dans /etc/postgresql/POSTGRESQL_VERSION/CLUSTER_NAME/environment (où POSTGRESQL_VERSION est la version de PostgreSQL, par ex.9.6 et CLUSTER_NAME est le nom du cluster, par exemple maindb). Vous pouvez également définir les variables d'environnement PostGIS ici.

# environment variables for postmaster process
# This file has the same syntax as postgresql.conf:
#  VARIABLE = simple_value
#  VARIABLE2 = 'any value!'
# I. e. you need to enclose any value which does not only consist of letters,
# numbers, and '-', '_', '.' in single quotes. Shell commands are not
# evaluated.
POSTGIS_GDAL_ENABLED_DRIVERS = 'ENABLE_ALL'

POSTGIS_ENABLE_OUTDB_RASTERS = 1

GDAL_DISABLE_READDIR_ON_OPEN = 'TRUE'
                    

10.18.1.2. Nombre maximum de fichiers ouverts

Le nombre maximum de fichiers ouverts autorisé par Linux et PostgreSQL est généralement prudent (typiquement 1024 fichiers ouverts par processus), étant donné l'hypothèse que le système est utilisé par des utilisateurs humains. Pour les rasters Out-DB, une seule requête valide peut facilement dépasser cette limite (par exemple, un jeu de données de 10 ans avec un raster pour chaque jour contenant les températures minimales et maximales et nous voulons connaître les valeurs min et max absolues pour un pixel dans ce jeu de données).

Le changement le plus simple à effectuer est le paramètre suivant de PostgreSQL : max_files_per_process. La valeur par défaut est de 1000, ce qui est beaucoup trop faible pour les données raster Out-DB. Une valeur de départ sûre pourrait être 65536, mais cela dépend vraiment de vos ensembles de données et des requêtes exécutées sur ces ensembles de données. Ce paramètre ne peut être défini qu'au démarrage du serveur et probablement uniquement dans le fichier de configuration de PostgreSQL (par exemple /etc/postgresql/POSTGRESQL_VERSION/CLUSTER_NAME/postgresql.conf dans les environnements Ubuntu).

...
# - Kernel Resource Usage -

max_files_per_process = 65536           # min 25
                                        # (change requires restart)
...
                    

La principale modification à apporter concerne les limites des fichiers ouverts du noyau Linux. Il y a deux parties à cela :

  • Nombre maximal de fichiers ouverts pour l'ensemble du système

  • Nombre maximal de fichiers ouverts par processus

10.18.1.2.1. Nombre maximal de fichiers ouverts pour l'ensemble du système

L'exemple suivant vous permet de connaître le nombre maximum de fichiers ouverts sur l'ensemble du système :

$ sysctl -a | grep fs.file-max
fs.file-max = 131072
                    

Si la valeur retournée n'est pas assez importante, ajoutez un fichier dans /etc/sysctl.d/ comme dans l'exemple suivant :

$ echo "fs.file-max = 6145324" 
>
> /etc/sysctl.d/fs.conf

$ cat /etc/sysctl.d/fs.conf
fs.file-max = 6145324

$ sysctl -p --system
* Applying /etc/sysctl.d/fs.conf ...
fs.file-max = 2097152
* Applying /etc/sysctl.conf ...

$ sysctl -a | grep fs.file-max
fs.file-max = 6145324
                    
10.18.1.2.2. Nombre maximal de fichiers ouverts par processus

Nous devons augmenter le nombre maximum de fichiers ouverts par processus pour les processus du serveur PostgreSQL.

Pour connaître le nombre maximal de fichiers ouverts utilisé par les processus de service PostgreSQL, suivez l'exemple suivant (assurez-vous que PostgreSQL est en cours d'exécution) :

$ ps aux | grep postgres
postgres 31713  0.0  0.4 179012 17564 pts/0    S    Dec26   0:03 /home/dustymugs/devel/postgresql/sandbox/10/usr/local/bin/postgres -D /home/dustymugs/devel/postgresql/sandbox/10/pgdata
postgres 31716  0.0  0.8 179776 33632 ?        Ss   Dec26   0:01 postgres: checkpointer process
postgres 31717  0.0  0.2 179144  9416 ?        Ss   Dec26   0:05 postgres: writer process
postgres 31718  0.0  0.2 179012  8708 ?        Ss   Dec26   0:06 postgres: wal writer process
postgres 31719  0.0  0.1 179568  7252 ?        Ss   Dec26   0:03 postgres: autovacuum launcher process
postgres 31720  0.0  0.1  34228  4124 ?        Ss   Dec26   0:09 postgres: stats collector process
postgres 31721  0.0  0.1 179308  6052 ?        Ss   Dec26   0:00 postgres: bgworker: logical replication launcher

$ cat /proc/31718/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             15738                15738                processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       15738                15738                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us
                    

Dans l'exemple ci-dessus, nous avons inspecté la limite des fichiers ouverts pour le processus 31718. Peu importe le processus PostgreSQL, n'importe lequel fera l'affaire. La réponse qui nous intéresse est Max open files.

Nous voulons augmenter Soft Limit et Hard Limit de Max open files pour qu'il soit supérieur à la valeur que nous avons spécifiée pour le paramètre PostgreSQL max_files_per_process. Dans notre exemple, nous avons fixé max_files_per_process à 65536.

Sous Ubuntu (et en supposant que vous utilisez les paquets PostgreSQL pour Ubuntu), la façon la plus simple de changer les paramètres Soft Limit et Hard Limit est d'éditer /etc/init.d/postgresql (SysV) ou /lib/systemd/system/postgresql*.service (systemd).

Commençons par le cas de SysV Ubuntu où nous ajoutons ulimit -H -n 262144 et ulimit -n 131072 à /etc/init.d/postgresql.

...
case "$1" in
    start|stop|restart|reload)
        if [ "$1" = "start" ]; then
            create_socket_directory
        fi
    if [ -z "`pg_lsclusters -h`" ]; then
        log_warning_msg 'No PostgreSQL clusters exist; see "man pg_createcluster"'
        exit 0
    fi

    ulimit -H -n 262144
    ulimit -n 131072

    for v in $versions; do
        $1 $v || EXIT=$?
    done
    exit ${EXIT:-0}
        ;;
    status)
...

Passons maintenant au cas de systemd Ubuntu. Nous ajouterons LimitNOFILE=131072 à chaque fichier /lib/systemd/system/postgresql*.service dans la section [Service].

...
[Service]

LimitNOFILE=131072

...

[Install]
WantedBy=multi-user.target
...

Après avoir effectué les changements nécessaires à systemd, assurez-vous de recharger le démon

systemctl daemon-reload