Chapter 9. Referenz Raster

Table of Contents
9.1. Datentypen zur Unterstützung von Rastern.
9.2. Rastermanagement
9.3. Raster Constructors
9.4. Zugriffsfunktionen auf Raster
9.5. Zugriffsfunktionen auf Rasterbänder
9.6. Zugriffsfunktionen und Änderungsmethoden für Rasterpixel
9.7. Raster Editoren
9.8. Editoren für Rasterbänder
9.9. Rasterband Statistik und Analytik
9.10. Rastereingabe
9.11. Ausgabe von Rastern
9.12. Rasterdatenverarbeitung
9.12.1. Map Algebra
9.12.2. Integrierte Map Algebra Callback Funktionen
9.12.3. DHM (Digitales Höhenmodell)
9.12.4. Raster nach Geometrie
9.13. Rasteroperatoren
9.14. Räumliche Beziehungen von Rastern und Rasterbändern
9.15. Raster Tipps
9.15.1. Out-DB Raster

Im Folgenden sind die gebräuchlichsten Funktionen aufgeführt, die zur Zeit durch PostGIS-Raster zur Verfügung gestellt werden. Es gibt noch zusätzliche Funktionen, die zur Unterstützung von Rasterobjekten benötigt werden und für den Anwender nur geringe Bedeutung haben.

raster ist ein neuer PostGIS Datentyp, der zum Speichern und zur Analyse von Rasterdaten verwendet wird.

Um Raster aus Rasterdateien zu laden, siehe Section 5.1, “Laden und Erstellen von Rastertabellen”

Die Beispiele dieser Referenz benutzen eine Rastertabelle, die mit folgendem Code aus Dummy-Rastern erstellt wurde

CREATE TABLE dummy_rast(rid integer, rast raster);
INSERT INTO dummy_rast(rid, rast)
VALUES (1,
('01' -- little endian (uint8 ndr)
||
'0000' -- version (uint16 0)
||
'0000' -- nBands (uint16 0)
||
'0000000000000040' -- scaleX (float64 2)
||
'0000000000000840' -- scaleY (float64 3)
||
'000000000000E03F' -- ipX (float64 0.5)
||
'000000000000E03F' -- ipY (float64 0.5)
||
'0000000000000000' -- skewX (float64 0)
||
'0000000000000000' -- skewY (float64 0)
||
'00000000' -- SRID (int32 0)
||
'0A00' -- width (uint16 10)
||
'1400' -- height (uint16 20)
)::raster
),
-- Raster: 5 x 5 Zellen, 3 Bänder, PT_8BUI Zelltyp, NODATA = 0
(2,  ('01000003009A9999999999A93F9A9999999999A9BF000000E02B274A' ||
'41000000007719564100000000000000000000000000000000FFFFFFFF050005000400FDFEFDFEFEFDFEFEFDF9FAFEF' ||
'EFCF9FBFDFEFEFDFCFAFEFEFE04004E627AADD16076B4F9FE6370A9F5FE59637AB0E54F58617087040046566487A1506CA2E3FA5A6CAFFBFE4D566DA4CB3E454C5665')::raster);

9.1. Datentypen zur Unterstützung von Rastern.

Abstract

Dieser Abschnitt listet die PostgreSQL Datentypen, welche zur Rasterunterstützung angelegt wurden.

geomval — Ein räumlicher Datatyp mit zwei Feldern - geom (enthält das geometrische Element) und val (enthält den Zellwert eines Rasterbandes in Doppelter Genauigkeit).
addbandarg — Ein zusammengesetzter Datentyp, der als Eingabewert für die Funktion "ST_AddBand" verwendet wird und sowohl Attribute als auch Initialwert des neuen Bandes festlegt.
rastbandarg — Ein zusammengesetzter Datentyp, der verwendet wird um den Raster und, über einen Index, das Band des Rasters anzugeben.
raster — Der räumliche Datentyp Raster
reclassarg — Ein Zusammengesetzter Datentyp, der als Eingabewert für die Funktion "ST_Reclass" dient und die Neuklassifizierung festlegt.
summarystats — Ein zusammgesetzter Datentyp, welcher von den Funktionen ST_SummaryStats und ST_SummaryStatsAgg zurückgegeben wird.
unionarg — Ein zusammengesetzter Datentyp, der als Eingabewert für die Funktion "ST_Union" dient. Dieser Datentyp bestimmt die zu behandelnden Bänder, sowie die Verhaltensweise des UNION Operators.

9.2. Rastermanagement

AddRasterConstraints — Fügt die Raster-Constraints zu einer bestimmten Spalte einer bereits geladenen Rastertabelle hinzu. Diese Constraints beschränken das Koordinatentransformationssystem, den Maßstab, die Blockgröße, die Ausrichtung, die Bänder, den Bandtyp und eine Flag, die anzeigt ob die Rasterspalte regelmäßig geblockt ist. Es müssen bereits Daten in die Tabelle geladen sein, damit die Constraints abgeleitet werden können. Gibt TRUE zurück, wenn das Setzen der Constraints ausgeführt wurde; bei Problemen wird eine Meldung angezeigt.
DropRasterConstraints — Löscht die Constraints eines PostGIS Rasters die sich auf eine Rastertabellenspalte beziehen. Nützlich um Daten erneut zu laden oder um die Daten einer Rasterspalte zu aktualisieren.
AddOverviewConstraints — Eine Rasterspalte als Übersicht für eine andere Rasterspalte kennzeichnen.
DropOverviewConstraints — Löscht die Markierung einer Rasterspalte, die festlegt dass sie als Übersicht für eine andere Spalte dient.
PostGIS_GDAL_Version — Gibt die von PostGIS verwendete Version der GDAL-Bibliothek aus.
PostGIS_Raster_Lib_Build_Date — Gibt einen vollständigen Bericht aus, wann die Rasterbibliothek kompiliert wurde.
PostGIS_Raster_Lib_Version — Gibt einen vollständigen Bericht über die Version und das Kompilationsdatum der Rasterbibliothek aus.
ST_GDALDrivers — Gibt eine Liste der Rasterformate aus, die von PostGIS über die Bibliothek GDAL unterstützt werden. Nur die Formate mit can_write=True können von ST_AsGDALRaster verwendet werden.
UpdateRasterSRID — Änderung der SRID aller Raster in der vom Anwender angegebenen Spalte und Tabelle.
ST_CreateOverview — Erzeugt eine Version des gegebenen Raster-Coverage mit geringerer Auflösung.

9.3. Raster Constructors

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.
ST_AsRaster — Konvertiert den geometrischen Datentyp von PostGIS in einen PostGIS Raster.
ST_Band — Gibt einen oder mehrere Bänder eines bestehenden Rasters als neuen Raster aus. Nützlich um neue Raster aus bestehenden Rastern abzuleiten.
ST_MakeEmptyCoverage — Bedeckt die georeferenzierte Fläche mit einem Gitter aus leeren Rasterkacheln.
ST_MakeEmptyRaster — Gibt einen leeren Raster (ohne Bänder), mit den gegebenen Dimensionen (width & height), upperleft X und Y, Pixelgröße, Rotation (scalex, scaley, skewx & skewy) und Koordinatenreferenzsystem (SRID), zurück. Wenn ein Raster übergeben wird, dann wird ein neuer Raster mit der selben Größe, Ausrichtung und SRID zurückgegeben. Wenn SRID nicht angegeben ist, wird das Koordinatenreferenzsystem auf "unknown" (0) gesetzt.
ST_Tile — Gibt Raster, die aus einer Teilungsoperation des Eingaberasters resultieren, mit den gewünschten Dimensionen aus.
ST_Retile — Gibt konfigurierte Kacheln eines beliebig gekachelten Rastercoverage aus.
ST_FromGDALRaster — Erzeugt einen Raster aus einer von GDAL unterstützten Rasterdatei.

9.4. Zugriffsfunktionen auf Raster

ST_GeoReference — Gibt die Metadaten der Georeferenzierung, die sich üblicherweise in einem sogenannten "World File befinden, im GDAL oder ESRI Format aus. Die Standardeinstellung ist GDAL.
ST_Height — Gibt die Höhe des Rasters in Pixel aus.
ST_IsEmpty — Gibt TRUE zurück, wenn der Raster leer ist (width = 0 and height = 0). Andernfalls wird FALSE zurückgegeben.
ST_MemSize — Gibt den Platzbedarf des Rasters (in Byte) aus.
ST_MetaData — Gibt die wesentlichen Metadaten eines Rasterobjektes, wie Zellgröße, Rotation (Versatz) etc. aus
ST_NumBands — Gibt die Anzahl der Bänder des Rasters aus.
ST_PixelHeight — Gibt die Pixelhöhe in den Einheiten des Koordinatenreferenzsystem aus.
ST_PixelWidth — Gibt die Pixelbreite in den Einheiten des Koordinatenreferenzsystems aus.
ST_ScaleX — Gibt die X-Komponente der Pixelbreite in den Einheiten des Koordinatenreferenzsystems aus.
ST_ScaleY — Gibt die Y-Komponente der Pixelhöhe in den Einheiten des Koordinatenreferenzsystems aus.
ST_RasterToWorldCoord — Gibt die obere linke Ecke des Rasters in geodätischem X und Y (Länge und Breite) für eine gegebene Spalte und Zeile aus. Spalte und Zeile wird von 1 aufwärts gezählt.
ST_RasterToWorldCoordX — Gibt die geodätische X Koordinate links oberhalb des Rasters, der Spalte und der Zeile aus. Die Nummerierung der Spalten und Zeilen beginnt mit 1.
ST_RasterToWorldCoordY — Gibt die geodätische Y Koordinate links oberhalb des Rasters, der Spalte und der Zeile aus. Die Nummerierung der Spalten und Zeilen beginnt mit 1.
ST_Rotation — Gibt die Rotation des Rasters im Bogenmaß aus.
ST_SkewX — Gibt den georeferenzierten Versatz in X-Richtung (oder den Rotationsparameter) aus.
ST_SkewY — Gibt den georeferenzierten Versatz in Y-Richtung (oder den Rotationsparameter) aus.
ST_SRID — Gibt den Identifikator des Koordinatenreferenzsystems des Rasters aus, das in der Tabelle "spatial_ref_sys" definiert ist.
ST_Summary — Gibt eine textliche Zusammenfassung des Rasterinhalts zurück.
ST_UpperLeftX — Gibt die obere linke X-Koordinate des Rasters im Koordinatenprojektionssystem aus.
ST_UpperLeftY — Gibt die obere linke Y-Koordinate des Rasters im Koordinatenprojektionssystem aus.
ST_Width — Gibt die Breite des Rasters in Pixel aus.
ST_WorldToRasterCoord — Gibt für ein geometrisches X und Y (geographische Länge und Breite) oder für eine Punktgeometrie im Koordinatenreferenzsystem des Rasters, die obere linke Ecke als Spalte und Zeile aus.
ST_WorldToRasterCoordX — Gibt für eine Punktgeometrie (pt) oder eine globale X- und Y-Koordinate (xw, yw) die Rasterspalte im globalen Koordinatenreferenzsystem des Rasters aus.
ST_WorldToRasterCoordY — Gibt für eine Punktgeometrie (pt) oder eine globale X- und Y-Koordinate (xw, yw) die Rasterzeile im globalen Koordinatenreferenzsystem des Rasters aus.

9.5. Zugriffsfunktionen auf Rasterbänder

ST_BandMetaData — Gibt die grundlegenden Metadaten eines bestimmten Rasterbandes aus. Wenn der Parameter "bandnum" nicht angegeben ist, wird das 1ste Band angenommen.
ST_BandNoDataValue — Gibt den NODATA Wert des gegebenen Bandes aus. Wenn der Parameter "bandnum" nicht angegeben ist, wird das 1ste Band angenommen.
ST_BandIsNoData — Gibt TRUE aus, wenn das Band ausschließlich aus NODATA Werten besteht.
ST_BandPath — Gibt den Dateipfad aus, unter dem das Band im Dateisystem gespeichert ist. Wenn "bandnum" nicht angegeben ist, wird 1 angenommen.
ST_BandFileSize — Gibt die Dateigröße eines im Dateisystem gespeicherten Bandes aus. Wenn "bandnum" nicht angegeben ist, wird 1 angenommen.
ST_BandFileTimestamp — Gibt den Zeitstempel eines im Dateisystem gespeicherten Bandes aus. Wenn "bandnum" nicht angegeben ist, wird 1 angenommen.
ST_BandPixelType — Gibt den Pixeltyp des angegebenen Bandes aus. Wenn der Parameter "bandnum" nicht angegeben ist, wird das 1ste Band angenommen.
ST_HasNoBand — Gibt TRUE aus, wenn kein Band mit der angegebenen Bandnummer existiert. Gibt den Pixeltyp des angegebenen Bandes aus. Wenn keine Bandnummer angegeben ist, wird das 1ste Band angenommen.

9.6. Zugriffsfunktionen und Änderungsmethoden für Rasterpixel

ST_PixelAsPolygon — Gibt die Polygongeometrie aus, die das Pixel einer bestimmten Zeile und Spalte begrenzt.
ST_PixelAsPolygons — Gibt die umhüllende Polygongeometrie, den Zellwert, sowie die X- und Y-Rasterkoordinate für jedes Pixel aus.
ST_PixelAsPoint — Gibt eine Punktgeometrie der oberen linken Ecke des Rasters zurück.
ST_PixelAsPoints — Gibt eine Punktgeometrie für jedes Pixel des Rasterbandes zurück, zusammen mit dem Zellwert und den X- und Y-Rasterkoordinaten eines jeden Pixels. Die Koordinaten der Punkte entsprechen dem oberen linken Eck der Pixel.
ST_PixelAsCentroid — Gibt den geometrischen Schwerpunkt (Punktgeometrie) der Fläche aus, die durch das Pixel repräsentiert wird.
ST_PixelAsCentroids — Gibt den geometrischen Schwerpunkt (Punktgeometrie) für jedes Pixel des Rasterbandes zurück, zusammen mit dem Zellwert und den X- und Y-Rasterkoordinaten eines jeden Pixels. Die Koordinaten der Punkte entsprechen dem geometrischen Schwerpunkt der Pixel.
ST_Value — Gibt den Zellwert eines Pixels aus, das über columnx und rowy oder durch einen bestimmten geometrischen Punkt angegeben wird. Die Bandnummern beginnen mit 1 und wenn keine Bandnummer angegeben ist, dann wird Band 1 angenommen. Wenn exclude_nodata_value auf FALSE gesetzt ist, werden auch die Pixel mit einem nodata Wert mit einbezogen. Wenn exclude_nodata_value nicht übergeben wird, dann wird er über die Metadaten des Rasters ausgelesen.
ST_NearestValue — Gibt den nächstgelegenen nicht NODATA Wert eines bestimmten Pixels aus, das über "columnx" und "rowy" oder durch eine Punktgeometrie - im gleichen Koordinatenreferenzsystem wie der Raster - ausgewählt wird.
ST_Neighborhood — Gibt ein 2-D Feld in "Double Precision" aus, das sich aus nicht NODATA Werten um ein bestimmtes Pixel herum zusammensetzt. Das Pixel Kann über "columnx" und "rowy" oder über eine Punktgeometrie - im gleichen Koordinatenreferenzsystem wie der Raster - ausgewählt werden.
ST_SetValue — Setzt den Wert für ein Pixel eines Bandes, das über columnx und rowy festgelegt wird, oder für die Pixel die eine bestimmte Geometrie schneiden, und gibt den veränderten Raster zurück. Die Bandnummerierung beginnt mit 1; wenn die Bandnummer nicht angegeben ist, wird 1 angenommen.
ST_SetValues — Gibt einen Raster zurück, der durch das Setzen der Werte eines bestimmten Bandes verändert wurde.
ST_DumpValues — Gibt die Werte eines bestimmten Bandes als 2-dimensionales Feld aus.
ST_PixelOfValue — Gibt die columnx- und rowy-Koordinaten jener Pixel aus, deren Zellwert gleich dem gesuchten Wert ist.

9.7. Raster Editoren

ST_SetGeoReference — Georeferenziert einen Raster über 6 Parameter in einem einzigen Aufruf. Die Zahlen müssen durch Leerzeichen getrennt sein. Die Funktion akzeptiert die Eingabe im Format von 'GDAL' und von 'ESRI'. Der Standardwert ist GDAL.
ST_SetRotation — Bestimmt die Rotation des Rasters in Radiant.
ST_SetScale — Setzt die X- und Y-Größe der Pixel in den Einheiten des Koordinatenreferenzsystems. Entweder eine Zahl pro Pixel oder Breite und Höhe.
ST_SetSkew — Setzt den georeferenzierten X- und Y-Versatz (oder den Rotationsparameter). Wenn nur ein Wert übergeben wird, werden X und Y auf den selben Wert gesetzt.
ST_SetSRID — Setzt die SRID eines Rasters auf einen bestimmten Ganzzahlwert. Die SRID wird in der Tabelle "spatial_ref_sys" definiert.
ST_SetUpperLeft — Setzt den Wert der oberen linke Ecke des Rasters auf die projizierten X- und Y-Koordinaten.
ST_Resample — Skaliert einen Raster mit einem bestimmten Algorithmus, neuen Dimensionen, einer beliebigen Gitterecke und über Parameter zur Georeferenzierung des Rasters, die angegeben oder von einem anderen Raster übernommen werden können.
ST_Rescale — Skaliert einen Raster indem lediglich der Maßstab (oder die Pixelgröße) angepasst wird. Neue Pixelwerte werden über NearestNeighbor, bilinear, kubisch, CubicSpline oder mit dem Lanczos-Filter errechnet. Die Standardeinstellung ist NearestNeighbor.
ST_Reskew — Skaliert einen Raster, indem lediglich der Versatz (oder Rotationsparameter) angepasst wird. Neue Pixelwerte werden über NearestNeighbor, bilinear, kubisch, CubicSpline oder mit dem Lanczos-Filter errechnet. Die Standardeinstellung ist NearestNeighbor.
ST_SnapToGrid — Skaliert einen Raster durch Fangen an einem Führungsgitter. Neue Pixelwerte werden über NearestNeighbor, bilinear, kubisch, CubicSpline oder mit dem Lanczos-Filter errechnet. Die Standardeinstellung ist NearestNeighbor. 
ST_Resize — Ändert die Zellgröße - width/height - eines Rasters
ST_Transform — Projiziert einen Raster von einem bekannten Koordinatenreferenzsystem in ein anderes bekanntes Koordinatenreferenzsystem um. Die Optionen für die Skalierung sind NearestNeighbor, Bilinear, Cubisch, CubicSpline und der Lanczos-Filter, die Standardeinstellung ist NearestNeighbor.

9.8. Editoren für Rasterbänder

ST_SetBandNoDataValue — Setzt den NODATA Wert eines Bandes. Wenn kein Band angegeben ist, wird Band 1 angenommen. Falls ein Band keinen NODATA Wert aufweisen soll, übergeben Sie bitte für den Parameter "nodatavalue" NULL.
ST_SetBandIsNoData — Setzt die Flag "isnodata" für das Band auf TRUE.
ST_SetBandPath — Aktualisiert den externen Dateipfad und die Bandnummer eines out-db Bandes.
ST_SetBandIndex — Aktualisiert die externe Bandnummer eines out-db Bandes.

9.9. Rasterband Statistik und Analytik

ST_Count — Gibt die Anzahl der Pixel für ein Band eines Rasters oder eines Raster-Coverage zurück. Wenn kein Band angegeben ist, wird standardmäßig Band 1 gewählt. Wenn der Parameter "exclude_nodata_value" auf TRUE gesetzt ist, werden nur Pixel mit Werten ungleich NODATA gezählt.
ST_CountAgg — Aggregatfunktion. Gibt die Anzahl der Pixel in einem bestimmten Band der Raster aus. Wenn kein Band angegeben ist, wird Band 1 angenommen. Wenn "exclude_nodata_value" TRUE ist, werden nur die Pixel ohne NODATA Werte gezählt.
ST_Histogram — Gibt Datensätze aus, welche die Verteilung der Daten eines Rasters oder eines Rastercoverage darstellen. Dabei wird die Wertemenge in Klassen aufgeteilt und für jede Klasse zusammengefasst. Wenn die Anzahl der Klassen nicht angegeben ist, wird sie automatisch berechnet.
ST_Quantile — Berechnet die Quantile eines Rasters oder einer Rastercoverage Tabelle im Kontext von Stichproben oder Bevölkerung. Dadurch kann untersucht werden, ob ein Wert bei 25%, 50% oder 75% Perzentil des Rasters liegt.
ST_SummaryStats — Gibt eine zusammenfassende Statistik aus, bestehend aus der Anzahl, der Summe, dem arithmetischen Mittel, der Standardabweichung, dem Minimum und dem Maximum der Werte eines Rasterbandes oder eines Rastercoverage. Wenn kein Band angegeben ist, wird Band 1 angenommen.
ST_SummaryStatsAgg — Aggregatfunktion. Gibt eine zusammenfassende Statistik aus, die aus der Anzahl, der Summe, dem arithmetischen Mittel, dem Minimum und dem Maximum der Werte eines bestimmten Bandes eines Rastersatzes besteht. Wenn kein Band angegeben ist, wird Band 1 angenommen.
ST_ValueCount — Gibt Datensätze aus, die den Zellwert und die Anzahl der Pixel eines Rasterbandes (oder Rastercoveragebandes) für gegebene Werte enthalten. Wenn kein Band angegeben ist, wird Band 1 angenommen. Pixel mit dem Wert NODATA werden standardmäßig nicht gezählt; alle anderen Pixelwerte des Bandes werden ausgegeben und auf die nächste Ganzzahl gerundet.

9.10. Rastereingabe

ST_RastFromWKB — Gibt einen Rasterwert von einer Well-known-Binary (WKB) Darstellung eines Rasters zurück.
ST_RastFromHexWKB — Gibt einen Rasterwert von einer Well-known-Binary (WKB) Hex-Darstellung eines Rasters zurück.

9.11. Ausgabe von Rastern

ST_AsBinary/ST_AsWKB — Gibt die Well-known-Binary (WKB) Darstellung eines Rasters zurück.
ST_AsHexWKB — Gibt die Well-known-Binary (WKB) Hex-Darstellung eines Rasters zurück.
ST_AsGDALRaster — Gibt die Rasterkachel in dem ausgewiesenen Rasterformat von GDAL aus. Sie können jedes Rasterformat angeben, das von Ihrer Bibliothek unterstützt wird. Um eine Liste mit den unterstützten Formaten auszugeben, verwenden Sie bitte ST_GDALDrivers().
ST_AsJPEG — Gibt die ausgewählten Bänder der Rasterkachel als einzelnes Bild (Byte-Array) im Format "Joint Photographic Exports Group" (JPEG) aus. Wenn kein Band angegeben ist und 1 oder mehr als 3 Bänder ausgewählt wurden, dann wird nur das erste Band verwendet. Wenn 3 Bänder ausgewählt wurden, werden alle 3 Bänder verwendet und auf RGB abgebildet.
ST_AsPNG — Gibt die ausgewählten Bänder der Rasterkachel als einzelnes, übertragbares Netzwerkgraphik (PNG) Bild (Byte-Feld) aus. Wenn der Raster 1,3 oder 4 Bänder hat und keine Bänder angegeben sind, dann werden alle Bänder verwendet. Wenn der Raster 2 oder mehr als 4 Bänder hat und keine Bänder angegeben sind, dann wird nur Band 1 verwendet. Die Bänder werden in den RGB- oder den RGBA-Raum abgebildet.
ST_AsTIFF — Gibt die ausgewählten Bänder des Raster als einzelnes TIFF Bild (Byte-Feld) zurück. Wenn kein Band angegeben ist oder keines der angegebenen Bänder im Raster existiert, werden alle Bänder verwendet.

9.12. Rasterdatenverarbeitung

9.12.1. Map Algebra

ST_Clip — Schneidet den Raster nach der Eingabegeometrie. Wenn die Bandnummer nicht angegeben ist, werden alle Bänder bearbeitet. Wenn crop nicht angegeben oder TRUE ist, wird der Ausgaberaster abgeschnitten.
ST_ColorMap — Erzeugt aus einem bestimmten Band des Ausgangsrasters einen neuen Raster mit bis zu vier 8BUI-Bändern (Grauwert, RGB, RGBA). Wenn kein Band angegeben ist, wird Band 1 angenommen.
ST_Grayscale — Erzeugt einen neuen Raster mit einem 8BUI-Band aus dem Ausgangsrasters und den angegebenen Bändern für Rot, Grün und Blau
ST_Intersection — Gibt Geometry-PixelValue Paare, oder einen Raster aus, der durch die Schnittmenge der beiden Raster bestimmt wird, oder durch die geometrische Verschneidung einer Vektorisierung des Rasters mit einem geometrischen Datentyp.
ST_MapAlgebra (Rückruffunktion) — Die Version mit der Rückruffunktion - Gibt für einen oder mehrere Eingaberaster einen Raster mit einem Band, den Bandindizes und einer vom Anwender vorgegebenen Rückruffunktion zurück.
ST_MapAlgebra (Ausdrucksanweisung) — Version mit Ausdrücken - Gibt für einen oder zwei Ausgangsraster, Bandindizes und einer oder mehreren vom Anwender vorgegebenen SQL-Ausdrücken, einen Raster mit einem Band zurück.
ST_MapAlgebraExpr — Version mit 1 Rasterband: Erzeugt ein neues Rasterband, dass über eine gültige, algebraische PostgreSQL Operation für ein Rasterband mit gegebenen Pixeltyp erstellt wird. Wenn kein Band bestimmt ist, wird Band 1 angenommen.
ST_MapAlgebraExpr — Version mit 2 Rasterbändern: Erstellt einen neuen Einzelbandraster, indem eine gültige algebraische PostgreSQL Funktion auf die zwei Ausgangsrasterbänder und den entsprechenden Pixeltyp angewendet wird. Wenn keine Bandnummern angegeben sind, wird von jedem Raste Band 1 angenommen. Der Ergebnisraster wird nach dem Gitter des ersten Raster ausgerichtet (Skalierung, Versatz und Eckpunkte der Pixel) und hat die Ausdehnung, welche durch den Parameter "extenttype" definiert ist. Der Parameter "extenttype" kann die Werte INTERSECTION, UNION, FIRST, SECOND annehmen.
ST_MapAlgebraFct — Version mit 1 Rasterband: Erzeugt ein neues Rasterband, dass über eine gültige PostgreSQL Funktion für ein gegebenes Rasterband und Pixeltyp erstellt wird. Wenn kein Band bestimmt ist, wird Band 1 angenommen.
ST_MapAlgebraFct — Version mit 2 Rasterbändern: Erstellt einen neuen Einzelbandraster, indem eine gültige PostgreSQL Funktion auf die 2 gegebenen Rasterbänder und den entsprechenden Pixeltyp angewendet wird. Wenn kein Band bestimmt ist, wird Band 1 angenommen. Wenn der "Extent"-Typ nicht angegeben ist, wird standardmäßig INTERSECTION angenommen.
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.
ST_Reclass — Erstellt einen neuen Raster, der aus neu klassifizierten Bändern des Originalraster besteht. Das Band "nband" ist jenes das verändert werden soll. Wenn "nband" nicht angegeben ist, wird "Band 1" angenommen. Alle anderen Bänder bleiben unverändert. Anwendungsfall: zwecks einfacherer Visualisierung ein 16BUI-Band in ein 8BUI-Band konvertieren und so weiter.
ST_Union — Gibt die Vereinigung mehrerer Rasterkacheln in einem einzelnen Raster mit mehreren Bändern zurück.

9.12.2. Integrierte Map Algebra Callback Funktionen

ST_Distinct4ma — Funktion zur Rasterdatenverarbeitung, welche die Anzahl der einzelnen Pixelwerte in der Nachbarschaft errechnet.
ST_InvDistWeight4ma — Funktion zur Rasterdatenverarbeitung, die den Wert eines Pixel aus den Pixel der Nachbarschaft interpoliert.
ST_Max4ma — Funktion zur Rasterdatenverarbeitung, die den maximalen Zellwert in der Nachbarschaft eines Pixel errechnet.
ST_Mean4ma — Funktion zur Rasterdatenverarbeitung, die den mittleren Zellwert in der Nachbarschaft von Pixel errechnet.
ST_Min4ma — Funktion zur Rasterdatenverarbeitung, die den minimalen Zellwert in der Nachbarschaft von Pixel errechnet.
ST_MinDist4ma — Funktion zur Rasterdatenverarbeitung, welche die kürzeste Entfernung (in Pixel) zwischen dem Pixel von Interesse und einem benachbarten Pixel mit Zellwert zurückgibt.
ST_Range4ma — Funktion zur Rasterdatenverarbeitung, die den Wertebereich der Pixel in einer Nachbarschaft errechnet.
ST_StdDev4ma — Funktion zur Rasterdatenverarbeitung, welche die Standardabweichung der Zellwerte in der Nachbarschaft von Pixel errechnet.
ST_Sum4ma — Funktion zur Rasterdatenverarbeitung, die die Summe aller Zellwerte in der Nachbarschaft von Pixel errechnet.

9.12.3. DHM (Digitales Höhenmodell)

ST_Aspect — Gibt die Exposition (standardmäßig in Grad) eines Rasterbandes mit Höhen aus. Nütlich für Terrain-Analysen.
ST_HillShade — Gibt für gegebenen Horizontalwinkel, Höhenwinkel, Helligkeit und Maßstabsverhältnis die hypothetische Beleuchtung eines Höhenrasterbandes zurück.
ST_Roughness — Gibt einen Raster mit der berechneten "Rauhigkeit" des DHM zurück.
ST_Slope — Gibt die Neigung (standardmäßig in Grad) eines Höhenrasterbandes zurück. Nützlich für Terrain-Analysen.
ST_TPI — Berechnet den "Topographic Position Index" eines Raster.
ST_TRI — Gibt einen Raster mit errechneten Geländerauheitsindex aus.

9.12.4. Raster nach Geometrie

Box3D — Stellt das umschreibende Rechteck eines Raster als Box3D dar.
ST_ConvexHull — Gibt die Geometrie der konvexen Hülle des Raster, inklusive der Pixel deren Werte gleich BandNoDataValue sind. Bei regelmäßig geformten und nicht rotierten Raster ist das Ergebnis ident mit ST_Envelope. Diese Funktion ist deshalb nur bei unregelmäßig geformten oder rotierten Raster nützlich.
ST_DumpAsPolygons — Gibt geomval (geom,val) Zeilen eines Rasterbandes zurück. Wenn kein Band angegeben ist, wird die Bandnummer standardmäßig auf 1 gesetzt.
ST_Envelope — Stellt die Ausdehnung des Raster als Polygon dar.
ST_MinConvexHull — Gibt die Geometrie der konvexen Hülle des Raster aus, wobei Pixel mit NODATA ausgenommen werden.
ST_Polygon — Gibt eine Geometrie mit Mehrfachpolygonen zurück, die aus der Vereinigung von Pixel mit demselben Zellwert gebildet werden. Pixel mit NODATA Werten werden nicht berücksichtigt. Wenn keine Band angegeben ist, wird die Bandnummer standardmäßig auf 1 gesetzt. 

9.13. Rasteroperatoren

&& — Gibt TRUE zurück, wenn das umschreibende Rechteck von A das umschreibende Rechteck von B schneidet.
&< — Gibt TRUE zurück, wenn das umschreibende Rechteck von A links von dem von B liegt.
&> — Gibt TRUE zurück, wenn das umschreibende Rechteck von A rechts von dem von B liegt.
= — Gibt TRUE zurück, wenn die umschreibenden Rechtecke von A und B ident sind. Das umschreibende Rechteck ist in Double Precision.
@ — Gibt TRUE zurück, wenn das umschreibende Rechteck von A in jenem von B enthalten ist. Das umschreibende Rechteck ist in Double Precision.
~= — Gibt TRUE zurück wenn die Umgebungsrechtecke von "A" und "B" ident sind.
~ — Gibt TRUE zurück, wenn das umschreibende Rechteck von A jenes von B enthält. Das umschreibende Rechteck ist in Double Precision.

9.14. Räumliche Beziehungen von Rastern und Rasterbändern

ST_Contains — Gibt TRUE zurück, wenn kein Punkt des Rasters "rastB" im Äußeren des Rasters "rastA" liegt und zumindest ein Punkt im Inneren von "rastB" auch im Inneren von "rastA" liegt.
ST_ContainsProperly — Gibt TRUE zurück, wenn "rastB" das Innere von "rastA" schneidet, aber nicht die Begrenzung oder das Äußere von "rastA".
ST_Covers — Gibt TRUE zurück, wenn kein Punkt des Rasters "rastB" außerhalb des Rasters "rastA" liegt.
ST_CoveredBy — Gibt TRUE zurück, wenn kein Punkt des Rasters "rastA" außerhalb des Rasters "rastB" liegt.
ST_Disjoint — Gibt TRUE zurück, wenn sich die Raster "rastA" und "rastB" räumlich nicht überschneiden.
ST_Intersects — Gibt TRUE zurück, wenn sich die Raster "rastA" und "rastB" nicht räumlich überschneiden.
ST_Overlaps — Gibt TRUE zurück, wenn sich die Raster "rastA" und "rastB" schneiden, aber ein Raster den anderen nicht zur Gänze enthält.
ST_Touches — Gibt TRUE zurück, wenn rastA und rastB zumindest einen Punkt gemeinsam haben sich aber nicht überschneiden.
ST_SameAlignment — Gibt TRUE zurück, wenn die Raster die selbe Rotation, Skalierung, Koordinatenreferenzsystem und Versatz (Pixel können auf dasselbe Gitter gelegt werden, ohne dass die Gitterlinien durch die Pixel schneiden) aufweisen. Wenn nicht, wird FALSE und eine Bechreibung des Problems ausgegeben.
ST_NotSameAlignmentReason — Gibt eine Meldung aus, die angibt ob die Raster untereinander ausgerichtet sind oder nicht und warum wenn nicht.
ST_Within — Gibt TRUE zurück, wenn kein Punkt des Rasters "rastA" außerhalb des Rasters "rastB" liegt und zumindest ein Punkt im Inneren von "rastA" auch im Inneren von "rastB" liegt.
ST_DWithin — Gibt TRUE zurück, wenn die Raster "rastA" und "rastB" innerhalb der angegebenen Entfernung voneinander liegen.
ST_DFullyWithin — Gibt TRUE zurück, wenn die Raster "rastA" und "rastB" zur Gänze innerhalb der angegebenen Distanz zueinander liegen.

9.15. Raster Tipps

Abstract

Dieser Abschnitt beinhaltet verschiedene Gotchas/Fallstricke und Tipps in Bezug auf PostGIS Raster.

9.15.1. Out-DB Raster

9.15.1.1. Das Verzeichnis enthält eine Vielzahl an Dateien

Wenn GDAL eine Datei öffnet, dann liest es eifrig das gesamte Verzeichnis in dem sich die Datei befindet um einen Katalog mit den weieren Dateien zu erstellen. Wenn dieses Verzeichnis viele Dateien (z.B.: Tausende, Millionen) enthält, kann das Öffnen dieser Datei extrem lange dauern (insbesondere wenn sich die Datei auf einem Netzlaufwerk, wie einem NFS befindet).

Dieses Verhalten kann durch folgende Umgebungsvariable von GDAL beeinflusst werden: GDAL_DISABLE_READDIR_ON_OPEN. Setzen Sie GDAL_DISABLE_READDIR_ON_OPEN auf TRUE um das Scannen von Verzeichnissen zu verhindern.

Auf Ubuntu (angenommen Sie verwenden ein PostgreSQL Paket für Ubuntu), kann GDAL_DISABLE_READDIR_ON_OPEN in /etc/postgresql/POSTGRESQL_VERSION/CLUSTER_NAME/environment gesetzt werden (wobei POSTGRESQL_VERSION der Version von PostgreSQL entspricht, z.B. 9.6 und CLUSTER_NAME der Bezeichnung des Datenbankclusters, z.B. maindb). Sie können hier ebenso die Umgebungsvariablen von PostGIS setzen.

# environment variables for postmaster process
# This file has the same syntax as postgresql.conf:
#  VARIABLE = simple_value
#  VARIABLE2 = 'any value!'
# I. e. you need to enclose any value which does not only consist of letters,
# numbers, and '-', '_', '.' in single quotes. Shell commands are not
# evaluated.
POSTGIS_GDAL_ENABLED_DRIVERS = 'ENABLE_ALL'

POSTGIS_ENABLE_OUTDB_RASTERS = 1

GDAL_DISABLE_READDIR_ON_OPEN = 'TRUE'
                                        

9.15.1.2. Die maximale Anzahl geöffneter Dateien

Die Einstellungen von Linux und PostgreSQL bezüglich der maximal erlaubten Anzahl von offenen Dateien sind üblicherweise sehr konservativ (normalerweise 1024 offene Dateien pro Prozess), da sie unter der Annahme getroffen wurden, dass das System von Menschen genutzt wird. Bei Out-DB Rastern kann eine einzelne Abfrage spielend dieses Limit überschreiten (z.B. ein Datensatz mit Rasterwerten über 10 Jahre, wobei ein Raster die Tageswerte der niedrigsten und höchsten Temperaturwerte enthält und wir den absoluten Mindest- und Höchstwert des Datensatzes abfragen wollen).

Am einfachsten kann dies über die PostgreSQL Einstellung max_files_per_process geändert werden. Der Standardwert von 1000 ist für Out-DB Raster viel zu niedrig. Ein zuverlässiger Anfangswert könnte 65536 sein, wobei dies jedoch sehr stark von den verwendeten Datensätzen abhängt und den Abfragen die Sie auf diese ausführen wollen. Diese Einstellung muss vor dem Starten des Servers gesetzt werden und kann vermutlich nur in der Konfigurationsdatei von PostgreSQL (z.B. /etc/postgresql/POSTGRESQL_VERSION/CLUSTER_NAME/postgresql.conf auf Ubuntu) vorgenommen werden.

...
# - Kernel Resource Usage -

max_files_per_process = 65536           # min 25
                                        # (change requires restart)
...
                                        

Die wesentliche Änderung muss an den Limits des Linux Kernels für offene Dateien vorgenommen werden. Dies umfasst zwei Teile:

  • Die maximale Anzahl geöffneter Dateien für das ganze System

  • Die maximale Anzahl geöffneter Dateien pro Prozess

9.15.1.2.1. Die maximale Anzahl geöffneter Dateien für das ganze System

Das folgende Beispiel zeigt, wie Sie die aktuelle Einstellung zu der maximalen Anzahl geöffneter Dateien für das ganze System anzeigen können:

$ sysctl -a | grep fs.file-max
fs.file-max = 131072
                                        

Wenn der ausgegebene Wert zu niedrig ist, können Sie wie im folgenden Beispiel gezeigt wird, eine Datei zu /etc/sysctl.d/ hinzufügen:

$ echo "fs.file-max = 6145324" 
>
> /etc/sysctl.d/fs.conf

$ cat /etc/sysctl.d/fs.conf
fs.file-max = 6145324

$ sysctl -p --system
* Applying /etc/sysctl.d/fs.conf ...
fs.file-max = 2097152
* Applying /etc/sysctl.conf ...

$ sysctl -a | grep fs.file-max
fs.file-max = 6145324
                                        
9.15.1.2.2. Die maximale Anzahl geöffneter Dateien pro Prozess

Die maximale Anzahl geöffneter Dateien pro Process für die Serverprozesse von PostgreSQL sollten geändert werden.

Um die maximale Anzahl geöffneter Dateien herauszufinden, welche von den Prozessen des PostgreSQL Dienstes genutzt werden, können Sie folgendes ausführen (stellen Sie sicher, dass PostgreSQL läuft):

$ ps aux | grep postgres
postgres 31713  0.0  0.4 179012 17564 pts/0    S    Dec26   0:03 /home/dustymugs/devel/postgresql/sandbox/10/usr/local/bin/postgres -D /home/dustymugs/devel/postgresql/sandbox/10/pgdata
postgres 31716  0.0  0.8 179776 33632 ?        Ss   Dec26   0:01 postgres: checkpointer process
postgres 31717  0.0  0.2 179144  9416 ?        Ss   Dec26   0:05 postgres: writer process
postgres 31718  0.0  0.2 179012  8708 ?        Ss   Dec26   0:06 postgres: wal writer process
postgres 31719  0.0  0.1 179568  7252 ?        Ss   Dec26   0:03 postgres: autovacuum launcher process
postgres 31720  0.0  0.1  34228  4124 ?        Ss   Dec26   0:09 postgres: stats collector process
postgres 31721  0.0  0.1 179308  6052 ?        Ss   Dec26   0:00 postgres: bgworker: logical replication launcher

$ cat /proc/31718/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             15738                15738                processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       15738                15738                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us
                                        

Im oberen Beispiel haben wir die Limits für geöffnete Dateien für den Prozess 31718 ausgelesen. Es spielt dabei keine Rolle welcher Prozess von PostgreSQL, es genügt jeder. Von Interesse ist dabei die Rückmeldung von Max open files.

Wir wollen das Soft Limit und das Hard Limit für die Max open files so erhöhen, dass sie über dem Wert liegen den wir in der Einstellung von PostgreSQL für max_files_per_process angegeben haben. In unserem Beispiel haben wir max_files_per_process mit 65536 angegeben.

Auf Ubuntu (angenommen Sie verwenden ein PostgreSQL Paket für Ubuntu), kann das Soft Limit und das Hard Limit am einfachsten durch editieren von /etc/init.d/postgresql (SysV) oder /lib/systemd/system/postgresql*.service (systemd) geändert werden.

Befassen wir uns zuerst mit dem Fall SysV auf Ubuntu, bei dem wir ulimit -H -n 262144 und ulimit -n 131072 zu /etc/init.d/postgresql hinzufügen.

...
case "$1" in
    start|stop|restart|reload)
        if [ "$1" = "start" ]; then
            create_socket_directory
        fi
        if [ -z "`pg_lsclusters -h`" ]; then
            log_warning_msg 'No PostgreSQL clusters exist; see "man pg_createcluster"'
            exit 0
        fi

        ulimit -H -n 262144
        ulimit -n 131072

        for v in $versions; do
            $1 $v || EXIT=$?
        done
        exit ${EXIT:-0}
        ;;
    status)
...

Nun der Fall mit systemd unter Ubuntu. Wir fügen LimitNOFILE=131072 in jeder Datei /lib/systemd/system/postgresql*.service in dem Abschnitt [Service] ein.

...
[Service]

LimitNOFILE=131072

...

[Install]
WantedBy=multi-user.target
...

Nach den erforderlichen systemd Änderungen müssen Sie den Dämon neu laden

systemctl daemon-reload