Name

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.

Synopsis

raster ST_MapAlgebraFctNgb(raster rast, integer band, text pixeltype, integer ngbwidth, integer ngbheight, regprocedure onerastngbuserfunc, text nodatamode, text[] VARIADIC args);

Description

[Warning]

ST_MapAlgebraFctNgb est obsolète depuis 2.1.0. Utilisez plutôt ST_MapAlgebra (callback function version).

(version à un raster) Retourne un raster dont les valeurs sont le résultat d'une fonction utilisateur PLPGSQL prenant un voisinage de valeurs de la bande du raster d'entrée. La fonction utilisateur prend le voisinage des valeurs des pixels sous la forme d'un tableau de nombres. Pour chaque pixel, elle renvoie le résultat de la fonction utilisateur, en remplaçant la valeur du pixel actuellement traité par le résultat de la fonction utilisateur.

rast

Raster sur lequel la fonction utilisateur est évaluée.

band

Numéro de bande du raster à évaluer. La valeur par défaut est 1.

pixeltype

Le type de pixel résultant du raster de sortie. Doit être l'un de ceux listés dans ST_BandPixelType, ou être omis ou défini à NULL. S'il n'est pas spécifié ou s'il est défini à NULL, le type de pixel du raster rast sera utilisé par défaut. Les résultats sont tronqués s'ils sont plus grands que ce qui est autorisé pour le type de pixel.

ngbwidth

La largeur du voisinage, en nombre de cellules.

ngbheight

La hauteur du voisinage, en nombre de cellules.

onerastngbuserfunc

Fonction utilisateur PLPGSQL/psql à appliquer aux pixels du voisinage de la bande du raster. Le premier élément est un tableau bidimensionnel de nombres, représentant le voisinage rectangulaire du pixel

nodatamode

Définit la valeur à transmettre à la fonction pour un pixel de voisinage qui est nodata ou NULL

'ignore' : toutes les valeurs NODATA rencontrées dans le voisinage sont ignorées par le calcul -- ce drapeau doit être envoyé à la fonction de rappel de l'utilisateur, et c'est la fonction de l'utilisateur qui décide comment l'ignorer.

'NULL' : toute valeur NODATA rencontrée dans le voisinage aura pour conséquence que le pixel résultant sera NULL -- la fonction de rappel de l'utilisateur est ignorée dans ce cas.

'value' : toutes les valeurs NODATA rencontrées dans le voisinage sont remplacées par le pixel de référence (celui qui se trouve au centre du voisinage). Notez que si cette valeur est NODATA, le comportement est le même que 'NULL' (pour le voisinage concerné)

args

Arguments à transmettre à la fonction utilisateur.

Disponibilité : 2.0.0

Exemples

Les exemples utilisent le raster katrina chargé comme une seule tuile, tel que décrit dans http://trac.osgeo.org/gdal/wiki/frmts_wtkraster.html et ensuite traitée dans les exemples ST_Rescale

--
-- A simple 'callback' user function that averages up all the values in a neighborhood.
--
CREATE OR REPLACE FUNCTION rast_avg(matrix float[][], nodatamode text, variadic args text[])
    RETURNS float AS
    $$
    DECLARE
        _matrix float[][];
        x1 integer;
        x2 integer;
        y1 integer;
        y2 integer;
        sum float;
    BEGIN
        _matrix := matrix;
        sum := 0;
        FOR x in array_lower(matrix, 1)..array_upper(matrix, 1) LOOP
            FOR y in array_lower(matrix, 2)..array_upper(matrix, 2) LOOP
                sum := sum + _matrix[x][y];
            END LOOP;
        END LOOP;
        RETURN (sum*1.0/(array_upper(matrix,1)*array_upper(matrix,2) ))::integer ;
    END;
    $$
LANGUAGE 'plpgsql' IMMUTABLE COST 1000;

-- now we apply to our raster averaging pixels within 2 pixels of each other in X and Y direction --
SELECT ST_MapAlgebraFctNgb(rast, 1,  '8BUI', 4,4,
        'rast_avg(float[][], text, text[])'::regprocedure, 'NULL', NULL) As nn_with_border
    FROM katrinas_rescaled
    limit 1;
                    

Première bande du raster

nouveau raster après calcul de la moyenne des pixels situés à moins de 4x4 pixels les uns des autres

Voir aussi

ST_MapAlgebraFct, ST_MapAlgebraExpr, ST_Rescale