Name

ST_AddBand — Gibt einen Raster mit den neu hinzugefügten Band(Bändern) aus. Der Typ , der Ausgangswert und der Index für den Speicherort des Bandes kann angegeben werden. Wenn kein Index angegeben ist, wird das Band am Ende hinzugefügt.

Synopsis

(1) raster ST_AddBand( raster rast, addbandarg[] addbandargset);

(2) raster ST_AddBand( raster rast, integer index, text pixeltype, double precision initialvalue=0, double precision nodataval=NULL);

(3) raster ST_AddBand( raster rast, text pixeltype, double precision initialvalue=0, double precision nodataval=NULL);

(4) raster ST_AddBand( raster torast, raster fromrast, integer fromband=1, integer torastindex=at_end);

(5) raster ST_AddBand( raster torast, raster[] fromrasts, integer fromband=1, integer torastindex=at_end);

(6) raster ST_AddBand( raster rast, integer index, text outdbfile, integer[] outdbindex, double precision nodataval=NULL);

(7) raster ST_AddBand( raster rast, text outdbfile, integer[] outdbindex, integer index=at_end, double precision nodataval=NULL);

Beschreibung

Gibt einen Raster mit einem an der gegebenen Position (index) neu hinzugefügten Band zurück. aus. Der Typ, der Ausgangswert und der Wert für NODATA kann übergeben werden. Wenn kein Index angegeben ist, wird das Band am Ende hinzugefügt. Wenn fromband nicht angegeben ist, wird Band 1 angenommen. Der Pixeltyp wird als Zeichenfolge übergeben, wie in ST_BandPixelType festgelegt. Falls ein bereits bestehender Index angegeben wird, werden alle folgenden Bänder >= diesem Index um 1 erhöht. Wenn ein größerer Ausgangswert als das Maximum des Pixeltyps angegeben ist, dann wird der Ausgangswert auf den höchsten erlaubten Wert des Pixeltyps gesetzt.

Bei der Variante, welche ein Feld von addbandarg entgegennimmt (Variante 1), ist ein bestimmter Indexwert von "addbandarg" auf den Raster zu dem Zeitpunkt bezogen, als das Band mit diesem "addbandarg" zum Raster hinzugefügt wurde. Siehe das Beispiel "Mehrere neue Bänder" unterhalb.

Bei der Variante, die ein Feld an Rastern (Variante 5) entgegennimmt, wird wenn torast NULL ist, das fromband Band eines jeden Rasters in diesem Feld, in einem neuen Raster akkumuliert.

Bei den Varianten, die ein outdbfile (Varianten 6 und 7) entgegennehmen, muss der Wert den vollständigen Pfad der Rasterdatei enthalten. Die Datei muss auch für die PostgreSQL-Instanz zugänglich sein.

Erweiterung: 2.1.0 - Unterstützung für "addbandarg" hinzugefügt.

Erweiterung: 2.1.0 Unterstützung für die neuen "out-db" Bänder hinzugefügt.

Beispiele: Ein einzelnes, neues Band

-- Ein weiteres Band vom Typ "vorzeichenlose 8-Bit Ganzzahl" mit einem Anfangswert von 200 für die Pixel
UPDATE dummy_rast
    SET rast = ST_AddBand(rast,'8BUI'::text,200)
WHERE rid = 1;
                                
-- Erstellt einen leeren Raster mit 100x100 Einheiten, x und y der oberen linken Ecke sind jeweils 0, fügt 2 Bänder hinzu (Band 1 ist ein boolescher 0/1 Bit-Switch, Band2 beschränkt die Werte auf 0-15)
-- verwendet "addbandargs"
INSERT INTO dummy_rast(rid,rast)
    VALUES(10, ST_AddBand(ST_MakeEmptyRaster(100, 100, 0, 0, 1, -1, 0, 0, 0),
        ARRAY[
                ROW(1, '1BB'::text, 0, NULL),
                ROW(2, '4BUI'::text, 0, NULL)
                        ]::addbandarg[]
     )
    );

-- Ausgabe der Metadaten der Rasterbänder zur Kontrolle --
SELECT  (bmd).*
FROM (SELECT ST_BandMetaData(rast,generate_series(1,2)) As bmd
    FROM dummy_rast WHERE rid = 10) AS foo;
 --result --
 pixeltype | nodatavalue | isoutdb | path
-----------+----------------+-------------+---------+------
 1BB       |             | f       |
 4BUI      |             | f       |


-- Ausgabe der Metadaten des Rasters -
SELECT  (rmd).width, (rmd).height, (rmd).numbands
FROM (SELECT ST_MetaData(rast) As rmd
    FROM dummy_rast WHERE rid = 10) AS foo;
-- result --
 upperleftx | upperlefty | width | height | scalex | scaley | skewx | skewy | srid | numbands
------------+------------+-------+--------+------------+------------+-------+-------+------+----------
          0 |          0 |   100 |    100 |      1 |     -1 |     0 |     0 |   0 |        2
                                

Beispiele: Mehrere neue Bänder

SELECT
        *
FROM ST_BandMetadata(
        ST_AddBand(
                ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0),
                ARRAY[
                        ROW(NULL, '8BUI', 255, 0),
                        ROW(NULL, '16BUI', 1, 2),
                        ROW(2, '32BUI', 100, 12),
                        ROW(2, '32BF', 3.14, -1)
                ]::addbandarg[]
        ),
        ARRAY[]::integer[]
);

 bandnum | pixeltype | nodatavalue | isoutdb | path
---------+-----------+-------------+---------+------
       1 | 8BUI      |           0 | f       |
       2 | 32BF      |          -1 | f       |
       3 | 32BUI     |          12 | f       |
       4 | 16BUI     |           2 | f       |
                                
-- Aggregiert das 1ste Band einer Tabelle mit änlichen Rastern zu einem einzelnen Raster
-- Soviele Bänder wie "test_types" und soviele Zeilen (neuer Raster) wie Mäuse
-- ANMERKUNG: "ORDER BY test_type" wird erst ab PostgreSQL 9.0 unterstützt,
-- bei 8.4 und niedriger funktioniert dies meist, indem man die Daten in einer Unterabfrage sortiert (ohne Gewähr)
-- Der resultierende Raster hat ein Band für jeden "test_type", die Bänder sind alphabetisch nach dem "test_type" sortiert
-- Für Mausliebhaber: Bei dieser Übung werden keine Mäuse verletzt
SELECT
        mouse,
        ST_AddBand(NULL, array_agg(rast ORDER BY test_type), 1) As rast
FROM mice_studies
GROUP BY mouse;
                                

Beispiele: Neues Out-db Band

SELECT
        *
FROM ST_BandMetadata(
        ST_AddBand(
                ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0),
                '/home/raster/mytestraster.tif'::text, NULL::int[]
        ),
        ARRAY[]::integer[]
);

 bandnum | pixeltype | nodatavalue | isoutdb | path
---------+-----------+-------------+---------+------
       1 | 8BUI      |             | t       | /home/raster/mytestraster.tif
       2 | 8BUI      |             | t       | /home/raster/mytestraster.tif
       3 | 8BUI      |             | t       | /home/raster/mytestraster.tif
                                

Siehe auch

ST_BandMetaData, ST_BandPixelType, ST_MakeEmptyRaster, ST_MetaData, ST_NumBands, ST_Reclass