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.
raster ST_MapAlgebraFctNgb(
raster rast, integer band, text pixeltype, integer ngbwidth, integer ngbheight, regprocedure onerastngbuserfunc, text nodatamode, text[] VARIADIC args)
;
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.
Raster der durch die benutzerdefinierte Funktion ausgewertet werden soll.
Die Bandnummer des Raster, die ausgewertet werden soll. Die Standardeinstellung ist 1.
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.
Die Breite der Nachbarschaft in Zellen.
Die Höhe der Nachbarschaft in Zellen.
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
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)
Übergabewerte für die benutzerdefinierte Funktion.
Verfügbarkeit: 2.0.0
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;
|
|