Ich versuche herauszufinden, wie ein Raster in eine PostGIS2.0-Datenbank geladen wird (ich habe hier und hier vorhergehende Fragen zu diesem Thema gestellt ). Ich versuche, das raster2pgsql.exe
mit PostGIS 2.0 bereitgestellte Programm zu verwenden.
Nachdem Sie herausgefunden haben, dass die Eingabeaufforderung in Windows als Administrator ausgeführt werden muss (In Windows 7, um die Befehlszeile als Administrator auszuführen, geben Sie cmd
in die Suchleiste ein und drücken Sie ctrl
+ shift
+ enter
), um die raster2pgsql.exe
von mir verwalteten Funktionen zu aktivieren Laden Sie ein Raster in meine Datenbank. Ich habe eine Rasterdatei namens ras_test.tif
, die ich vorübergehend im bin
Ordner meiner postgresql
Installation abgelegt habe . Mit dem folgenden Code konvertiere und lade ich dieses Raster:
C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -s 102003 ras_test.tif -t> elev.sql
Processing 1/1: ras_test.tif
C:\Program Files (x86)\PostgreSQL\9.1\bin>psql.exe -p 5434 -U postgres -d test2 -f elev.sql
BEGIN
psql:elev.sql:2: NOTICE: CREATE TABLE will create implicit sequence "-t_rid_seq" for serial column "-t.rid"
psql:elev.sql:2: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "-t_pkey" for table "-t"
CREATE TABLE
INSERT 0 1
COMMIT
Wenn ich diese Tabelle in PostGIS ansehe, sieht es so aus:
Ich konnte dies jedoch nicht in QGIS anzeigen und bin nicht sicher, ob ich es richtig geladen habe, da diese Datei anscheinend keine Daten enthält. Anscheinend habe ich den Dateinamen als Raster geladen und nicht als Dateninhalt. Habe ich offensichtliche Fehler gemacht, die mich daran hindern, ein Raster in meine Datenbank zu laden?
Die PostGIS- Dokumentation enthält ein Beispiel zum Laden eines Rasters. Ich verstehe jedoch nicht, welche Argumente optional sind, und bin mir immer noch unklar, was ich verwenden soll, wenn ich das Standardschema verwenden möchte. Zum Beispiel im folgenden Beispiel aus der Dokumentation:
raster2pgsql -s 4236 -I -C -M *.tif -F -t myschema.demelevation > elev.sql
psql -d gisdb -f elev.sql
Muss ich eine SRID angeben?
-s 4236
Sind die Argumente
-I -C -M
alle optional?-t
scheint Kachelgröße zu sein; Muss ich dies angeben, wenn ich kein benutzerdefiniertes Schema habe?- Kann ich einfach weglassen
myschema.demelevation
?
EDIT: Ich habe das Ergebnis der Vorschläge unten aufgenommen:
C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -s 102003 -t 300x300 ras_test.tif ras_test | psql.exe -U postgres
-d raster_analysis -h localhost -p 5434
Processing 1/1: ras_test.tif
BEGIN
NOTICE: CREATE TABLE will create implicit sequence "ras_test_rid_seq" for serial column "ras_test.rid"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "ras_test_pkey" for table "ras_test"
CREATE TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
COMMIT
Dies ergibt eine Tabelle mit zwei Spalten rid
und rast
. rid
hat vier Werte, nad rast
hat keine. Wenn ich versuche, weitere Argumente zu verwenden:
C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -I -C -e -Y -F -s 102003 -t 300x300 ras_test.tif ras_test1 | psql
.exe -U postgres -d raster_analysis -h localhost -p 5434
Processing 1/1: ras_test.tif
NOTICE: CREATE TABLE will create implicit sequence "ras_test1_rid_seq" for serial column "ras_test1.rid"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "ras_test1_pkey" for table "ras_test1"
CREATE TABLE
CREATE INDEX
ANALYZE
NOTICE: Adding SRID constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding scale-X constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding scale-Y constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding blocksize-X constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding blocksize-Y constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding alignment constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding number of bands constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding pixel type constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding nodata value constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Unable to add constraint "enforce_nodata_values_rast"
CONTEXT: PL/pgSQL function "_add_raster_constraint_nodata_values" line 40 at RETURN
PL/pgSQL function "addrasterconstraints" line 94 at assignment
PL/pgSQL function "addrasterconstraints" line 49 at RETURN
WARNING: Unable to add constraint: 'nodata_values'. Skipping
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding maximum extent constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
addrasterconstraints
----------------------
t
(1 row)
Ich erhalte die folgende Ausgabe. Daraus ergibt sich eine neue Tabelle mit folgender Struktur:
Ich gehe davon aus, dass dies kein richtig geladenes Raster ist, da ich die Daten nicht anzeigen kann. Gibt es noch andere Optionen, die ich ausprobieren kann?
BEARBEITEN: Dieser letzte Versuch hat funktioniert, ich habe einfach nicht richtig auf das Raster zugegriffen.