Name

ST_MapAlgebraFctNgb — Version mit 1em Band: Map Algebra Nearest Neighbor mit einer benutzerdefinierten PostgreSQL Funktion. Gibt einen Raster zurück, dessen Werte sich aus einer benutzerdefinierte PL/pgsql Funktion ergeben, welche die Nachbarschaftswerte des Ausgangsrasterbandes einbezieht.

Synopsis

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

Beschreibung

[Warning]

ST_MapAlgebraFctNgb Seit der Version 2.1.0 überholt. Benutzen Sie stattdessen bitte ST_MapAlgebra (callback function version)

(Version mit einem Raster) Gibt einen Raster zurück, dessen Werte sich aus einer benutzerdefinierte PL/pgSQL Funktion errechnen, welche die Nachbarschaftswerte des Ausgangsrasterbandes mit einbezieht. Die benutzerdefinierte Funktion nimmt die Werte der Nachbarschaftspixel als Zahlenfeld entgegen und gibt für jedes Pixel das Ergebnis der Funktion zurück, indem die aktuellen Werte der betrachteten Pixel mit dem Ergebnis der benutzerdefinierten Funktion ersetzt werden.

rast

Raster der durch die benutzerdefinierte Funktion ausgewertet werden soll.

band

Die Bandnummer des Raster, die ausgewertet werden soll. Die Standardeinstellung ist 1.

pixeltype

Der resultierende Pixeltyp des Zielraster muss entweder aus ST_BandPixelType sein, weggelassen oder auf NULL gesetzt werden. Wenn er nicht übergeben wird oder auf NULL gesetzt ist, wird er standardmäßig auf den Pixeltyp von rast gesetzt. Die Ergebnisse werden abgeschnitten, wenn sie größer als für den Pixeltyp erlaubt sind.

ngbwidth

Die Breite der Nachbarschaft in Zellen.

ngbheight

Die Höhe der Nachbarschaft in Zellen.

onerastngbuserfunc

Eine benutzerdefinierte Funktion in PLPGSQL/psql, die auf die Nachbarschaftspixel in einem einzelnen Rasterband angewandt wird. Das erste Element ist ein 2-dimensionales Feld mit Zahlen, welche das Rechteck mit den Nachbarschaftspixel beschreiben

nodatamode

Bestimmt welcher Wert an die Funktion übergeben werden soll, wenn ein Nachbarschaftspixel NODATA oder NULL ist

'ignore': NODATA Werte in der Nachbarschaft werden bei der Berechnung ignoriert -- diese Flag muss an die Rückruffunktion gesendet werden und die benutzerdefinierte Funktion entscheidet dann, wie diese Werte ignoriert werden sollen.

'NULL': NODATA Werte in der Nachbarschaft bedingen, dass die resultierenden Pixel ebenfalls NULL annehmen - die benutzerdefinierte Rückruffunktion wird bei diesem Fall übersprungen.

'value': NODATA Werte in der Nachbarschaft werden durch den Wert des Referenzpixel (das Pixel im Zentrum der Nachbarschaft) ersetzt. Anmerkung: Wenn dieser Wert NODATA ist, dann ist die Verhaltensweise gleich wie bei 'NULL' (für die betroffene Nachbarschaft)

args

Übergabewerte für die benutzerdefinierte Funktion.

Verfügbarkeit: 2.0.0

Beispiele

Die Beispiele nutzen den Raster "Katrina", der als einzelne Kachel geladen wird, wie unter http://trac.osgeo.org/gdal/wiki/frmts_wtkraster.html beschrieben; und in den Beispielen von ST_Rescale aufbereitet wurde.

--
-- 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;
                    

Das erste Band Unseres Rasters

neuer Raster mit dem Durchschnittswert der Pixel innerhalb von 4x4 Pixel