Name

ST_MapAlgebraFctNgb — 1-bandsversion: Kartlägg Algebra närmaste granne med hjälp av användardefinierad PostgreSQL-funktion. Returnera en raster vars värden är resultatet av en PLPGSQL-användarfunktion som involverar ett grannskap av värden från inmatningsrasterbandet.

Synopsis

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

Beskrivning

[Warning]

ST_MapAlgebraFctNgb är föråldrad från och med 2.1.0. Använd ST_MapAlgebra (callback function version) istället.

(en rasterversion) Returnera en raster vars värden är resultatet av en PLPGSQL-användarfunktion som involverar ett grannskap av värden från inmatningsrasterbandet. Användarfunktionen tar grannskapet av pixelvärden som en matris med siffror, för varje pixel, returnerar resultatet från användarfunktionen och ersätter pixelvärdet för den för närvarande inspekterade pixeln med funktionsresultatet.

rast

Raster på vilket användarfunktionen utvärderas.

band

Bandnummer för det raster som ska utvärderas. Standardvärdet är 1.

pixeltype

Den resulterande pixeltypen för utdatarastern. Måste vara en som listas i ST_BandPixelType eller utelämnas eller sätts till NULL. Om den inte skickas in eller sätts till NULL, kommer pixeltypen för rastret att användas som standard. Resultaten trunkeras om de är större än vad som är tillåtet för pixeltypen.

ngbwidth

Bredden på grannskapet, i celler.

ngbheight

Höjden på kvarteret, i celler.

onerastngbuserfunc

PLPGSQL / psql-användarfunktion för att applicera på grannskapspixlar i ett enda band av en raster. Det första elementet är en 2-dimensionell matris med siffror som representerar den rektangulära pixelgrannskapet

nodatamode

Definierar vilket värde som ska skickas till funktionen för en grannskapspixel som är nodata eller NULL

'ignore': alla NODATA-värden som påträffas i grannskapet ignoreras av beräkningen -- denna flagga måste skickas till användarens återuppringningsfunktion, och användarfunktionen avgör hur den ska ignoreras.

"NULL": alla NODATA-värden som påträffas i grannskapet gör att den resulterande pixeln blir NULL - användarens återuppringningsfunktion hoppas över i detta fall.

"value": alla NODATA-värden som påträffas i grannskapet ersätts av referenspixeln (den i mitten av grannskapet). Observera att om detta värde är NODATA är beteendet detsamma som 'NULL' (för den berörda grannskapet)

args

Argument som ska skickas till användarfunktionen.

Tillgänglighet: 2.0.0

Exempel

Exemplen använder katrina-raster som lästs in som en enda bricka som beskrivs i https://gdal.org/user/drivers/raster/postgisraster.html och sedan förberetts i exemplen 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;
                    

Första bandet av vår raster

nytt raster efter medelvärdesbildning av pixlar inom 4x4 pixlar från varandra