Laden eines Rasters in eine PostGIS 2.0-Datenbank unter Windows


18

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.exemit 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 cmdin die Suchleiste ein und drücken Sie ctrl+ shift+ enter), um die raster2pgsql.exevon 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 binOrdner meiner postgresqlInstallation 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:

Bildbeschreibung hier eingeben

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
  1. Muss ich eine SRID angeben? -s 4236

  2. Sind die Argumente -I -C -Malle optional?

  3. -tscheint Kachelgröße zu sein; Muss ich dies angeben, wenn ich kein benutzerdefiniertes Schema habe?

  4. 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 ridund rast. ridhat vier Werte, nad rasthat 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:

Bildbeschreibung hier eingeben

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.


raster2pgsql verweist auf die Referenz postgis.org/documentation/manual-svn/…
Mapperz

Ich habe versucht, eine Rasterdatei (jpg) mit der hier angegebenen Syntax in das Post-GIS zu laden ras_test.tif ras_test1 | psql .exe -U postgres -d raster_analysis -h localhost -p 5434 "In der Datenbank wurde eine Rastertabelle erstellt. Es war genau so, wie es Celenius gezeigt hat, wo Sie unter der Spalte "Raster" nichts sehen, es sei denn, Sie klicken auf eine bestimmte Zelle. Hier ist mein eigentliches Problem. Anzeigen des Raster-Layers in ArcGIS mithilfe des SQL-Abfrage-Layers. Als ich versuchte, diese Ebene hinzuzufügen und zu validieren, stand dort "Raster
GISTECH 25.07.12

Ich denke, Sie sollten dies als neue Frage stellen, da Sie mehr Antworten erhalten. Ich weiß nicht, wie Sie mit ArcGIS eine Verbindung herstellen können, aber Sie können mit QGIS darauf zugreifen.
DJQ

1
Hinweis: pgAdminIII zeigt eine leere Zelle für Daten ab einer bestimmten Größe an. Siehe Ticket Nr. 297
Mike T

die obige Abfrage funktioniert, aber kann mir jemand sagen, wie man Pixelwerte / Zellenwerte in der Tabelle speichert?

Antworten:


5

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


Vielen Dank, Mapperz, ich habe teilweise verstanden, wie raster2pgsql funktioniert. Mein Raster in postgresql enthält jedoch nur eine Zelle. Aus diesem Grund versuche ich herauszufinden, welche Argumente zu verwenden sind.
DJQ

9

Celenius,

Wenn Sie die -tOption 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 -tsollte 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:

raster2pgsql -s 102003  -t 100x100 ras_test.tif ras_test > elev.sql

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 raster2pgsqlgibt 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).


Danke für die Vorschläge! Immer noch nicht in der Lage, es zum Laufen zu bringen, aber die Schalter etwas besser zu verstehen.
4.

Es hat funktioniert, aber ich habe nicht verstanden, wie dies in der Datenbank aussehen soll. Danke nochmal für deine Hilfe.
4.

Ist die GUI zum Laden von Rastern in pgsql endlich eingetroffen? :)
Astrojuanlu

-2

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.


1
Die ursprüngliche (alte) Frage hat bereits eine akzeptierte Antwort und Ihre Frage ist keine Alternative zur Frage, sondern ein Aufruf zur visuellen Prüfung.
Brachvogel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.