Ich habe versucht, ein großes Raster in eine PostGIS 2.0-Datenbank zu importieren und bin auf einige Stolpersteine gestoßen.
Beim Versuch, das Raster mit raster2pgsql zu importieren, wurde zunächst der folgende Fehler angezeigt: rt_band_set_pixel_line: Koordinaten außerhalb des Bereichs
Nachdem ich diese Seite gefunden und gdalinfo verwendet hatte, stellte ich fest, dass das Raster die maximal zulässige Größe von 65535 x 65535 überschritten hatte.
gdalinfo Ausgabe:
$ gdalinfo ari100.tif
Treiber: GTiff / GeoTIFF
... Größe ist 42971, 77138
Koordinatensystem ist:
GEOGCS ["WGS 84",
...
AUTHORITY ["EPSG", "4326"]] Origin = (152.741676637167842, -26.215302802012008 )
Pixelgröße = (,000009239757419, -,000009239757419)
Metadaten:
AREA_OR_POINT = Bereich
Bildaufbau - Metadaten:
INTERLEAVE = BAND
Corner Koordinaten:
Oben links (152,7416766, -26,2153028) (152d44'30.04 "E, 26d12'55.09" S)
unten links (152,7416766 , -26,9280392) (152d44'30,04 "E, 26d55'40,94" S) oben
rechts (153,1387183, -26,2153028) (153d 8'19,39 "E, 26d12'55.09 "S)
Unten rechts (153.1387183, -26.9280392) (153d 8'19.39 "E, 26d55'40.94" S)
Mitte (152.9401974, -26.5716710) (152d56'24.71 "E, 26d34'18.02" S)
Band 1 Block = 42971x1 Typ = Float32 , ColorInterp = Grau
...
Deshalb habe ich mich entschlossen, die out-db-Funktionalität mithilfe des -R-Flags in raster2pgsql zu verwenden.
Aus der Dokumentation: Registrieren Sie das Raster als Dateisystem-Raster (out-db). In der Datenbank werden nur die Metadaten des Rasters und der Pfadposition zum Raster gespeichert (nicht die Pixel).
Ich habe das Raster mit dem folgenden Befehl importiert:
raster2pgsql /gis/Flood/ari100.tif -R | psql -U username database
Aber als ich eine Abfrage versuchte:
SELECT ST_Value(rast, ST_PointFromText('POINT(152.9632 -26.4878)')) FROM ari100
Ich erhalte folgende Fehlermeldung:
NOTICE: Attempting to get pixel value with out of range raster coordinates: (23975, 29491)
CONTEXT: PL/pgSQL function "st_value" line 13 at RETURN
Wenn ich jedoch GDAL (über Python) verwende, um das Raster direkt mit diesem Skript abzufragen
python val_at_coord.py 152.9632 -26.4878
Ich kann den Wert korrekt abrufen.
Ich habe beschlossen, die Ausmaße des Rasters in der Datenbank zu finden:
SELECT ST_Height(rast) As rastheight, ST_Width(rast) As rastwidth from ari100;
rastheight | rastwidth
11602 | 42971
Die Höhe ist völlig falsch (sollte 77138 sein).
Meine Frage lautet also: Habe ich etwas falsch gemacht (bei der Verwendung von raster2pgsql) oder gibt es eine Einschränkung bei der Verwendung von Out-DB-Rastern mit PostGIS?
Vielen Dank