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.
Antworten:
SRID? -s 4236 (erforderlich)
Sind die Argumente -I -C -M alle optional?
-C Wenden Sie Raster-Einschränkungen an - srid, pixelize usw., um sicherzustellen, dass das Raster ordnungsgemäß in der Ansicht raster_columns registriert ist. (erforderlich)
-M (Analysieren Sie die Rastertabelle im Vakuum.) Optional
-I (Erstellen Sie einen GiST-Index für die Rasterspalte.) Optional, aber empfohlen
-t KACHELGRÖSSE (Schneiden Sie das Raster in Kacheln, die pro Tabellenzeile eingefügt werden sollen. KACHELGRÖSSE wird als BREITE x HÖHE ausgedrückt.)
myschema.demelevation
weglassen (ja)http://postgis.net/docs/using_raster_dataman.html#RT_Loading_Rasters
quelle
Celenius,
Wenn Sie die
-t
Option für Größenbemaßungen nicht verwenden , wird Ihre Rasterdatei als einzelner Datensatz eingespeist. Ich habe gerade einen Fehler in der Dokumentation festgestellt, der Sie wahrscheinlich verwirrt. Ich werde das reparieren. Dem-t
sollte immer eine widthxheight folgen.Wenn Sie möchten, dass der Bereich in 100 x 100 Pixel Breite aufgeteilt wird, verwenden Sie - wie Mapperz sagt - die Option -t.
Ihr Befehl wäre also:
Schauen Sie sich das Luftbildbeispiel in der Dokumentation an. http://www.postgis.org/documentation/manual-svn/using_raster.xml.html#RT_Raster_Loader
Welches ist das eine, das in vielen manuellen Beispielen verwendet wird:
raster2pgsql -I -C -e -Y -F -s 26986 -t 128x128 -l 2,4 bostonaerials2008/*.jpg aerials.boston | psql -U postgres -d gisdb -h localhost -p 5432
Ich weiß, dass die Schalter ein bisschen entmutigend sein können, weil es so viele und die meisten optional sind. Vielleicht haben wir in 2.1 eine GUI ähnlich der
shp2pgsql-gui
, um dies für Neulinge ein bisschen einfacher zu machen.In der neuesten Version von
raster2pgsql
gibt es eine Logik, um das srid aus den Georeferenzinformationen in der tif- oder anderen Rasterdatei abzuleiten (diese Version ist jetzt als Windows-Binärdatei verfügbar). Ich habe dieses Feature noch nicht ausprobiert, aber wenn es funktioniert, kannst du das srid sogar weglassen und es wird erraten (hoffentlich richtig).quelle
In der SQL-Ansicht können Sie keine Daten sehen, wenn sie groß sind. Sie können die Abfrage in eine Datei ausführen und es werden die Daten angezeigt.
quelle