Wie importiere ich ein Raster in PostGIS?


8

Ich versuche, den Anweisungen hier zu folgen , um ein Raster in eine PostGIS-Datenbank zu laden:

python raster2pgsql.py -s 4269 -I -r *.tif -F myschema.demelevation -o elev.sql

Ich verstehe, dass ich durch *den Pfad zu meinem Raster ersetze , aber ich verstehe den Teil myschema.demelevationoder nicht elev.sql. Sollte ich ein eigenes Schema für diese Datei haben? Und was bedeutet der elev.sqlTeil?

Ich habe auch den PostGIS-Rastertreiber von gdal durchgelesen , um dies anhand weiterer Beispiele zu verstehen. Ebenso schlagen sie vor, ein Raster zu ladenkatrina

python raster2pgsql.py -r /path/to/katrina.tif -t katrina -l 1 -k 64x64 -o katrina.sql -s 4326 -I -M

Mit meinem aktuellen Setup habe ich versucht, das katrinaRaster zu laden in:

    python2.6 ~/src/postgis-2.0.0SVN/raster/scripts/python/raster2pgsql.py -r ~/tmp/katrina.tif -t katrina -l 1 -k 64x64 -o katrina.sql -s 4326 -I -M

Ich habe jedoch die folgenden Fehler erhalten:

Traceback (most recent call last):
  File "/home/src/postgis-2.0.0SVN/raster/scripts/python/raster2pgsql.py", line 34, in <module>
    from osgeo import gdal
  File "/home/lib/python2.6/GDAL-1.8.1-py2.6-linux-i686.egg/osgeo/__init__.py", line 21, in <module>
    _gdal = swig_import_helper()
  File "/home/lib/python2.6/GDAL-1.8.1-py2.6-linux-i686.egg/osgeo/__init__.py", line 17, in swig_import_helper
    _mod = imp.load_module('_gdal', fp, pathname, description)
ImportError: /home/lib/python2.6/GDAL-1.8.1-py2.6-linux-i686.egg/osgeo/_gdal.so: undefined symbol: GDALSetRasterUnitType

Ich verstehe diese Fehler nicht ganz. Hätte ich beim Kompilieren gdalein Argument für angeben sollen GDALSetRasterUnitType?

Im Allgemeinen habe ich Schwierigkeiten zu verstehen, warum ich die Datenbank, in die ich diese Daten laden möchte, nicht spezifiziere.


Nachdem ich den Ratschlägen von MerseViking gefolgt war, lief ich:

python /usr/lib/postgresql/8.4/bin/raster2pgsql.py -r /home/celenius/Downloads/katrina.tif -t katrina -l 1 -k 64x64 -o katrina.sql -s 4326 -I -M

welches die folgende Ausgabe zurückgab:

------------------------------------------------------------
 Summary of GDAL to PostGIS Raster processing:
------------------------------------------------------------
Number of processed raster files: 1 (/home/celenius/Downloads/katrina.tif)
List of generated tables (number of tiles):
1   katrina (256)

Dann rannte ich:

psql -d test -f katrina.sql - U postgres -W

welches das folgende zurückgab:

    addrastercolumn                                                                                                                                                                                        
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 public.katrina.rast srid:4326 pixel_types:{8BUI,8BUI,8BUI} out_db:false regular_blocking:true nodata_values:NULL scale_x:'0.029325513196481' scale_y:'-0.029325513196481' blocksize_x:'64' blocksize_y:'64' extent:POLYGON((-100.014662756598 9.98533724340176,-100.014662756598 40.0146627565982,-69.9853372434018 40.0146627565982,-69.9853372434018 9.98533724340176,-100.014662756598 9.98533724340176))
(1 row)

(END)

Diese Meldung und ein blinkender Cursor erscheinen auf dem Bildschirm. Ich gehe davon aus, dass es in die Datenbank geladen wird, bin mir aber nicht sicher. Die tifDatei ist nur 3 MB groß - ich hatte angenommen, dass das Laden einer Datei dieser Größe nicht lange dauern würde, aber der blinkende Cursor ist bereits seit ~ 1 Stunde auf dem Bildschirm. Ist das abgestürzt oder muss ich nur lange warten? Ich habe 4 GB RAM und einen Dual-Prozessor von 2,5 GHz.


Ich habe festgestellt, dass, wenn ich die Taste qdrücke, dieser Befehl ausgeführt wird und die Daten in die Datenbank eingefügt werden test. Ist das normal und sollte ich das tun?
DJQ

Antworten:


3

Es scheint, dass es auf dieser Seite einen Tippfehler gibt; in der Schlange:

python raster2pgsql.py -s 4269 -I -r *.tif -F myschema.demelevation -o elev.sql

Der -FParameter sollte -tder Tabellenname sein, in den die Daten importiert werden sollen. Der Teil vor dem .ist der optionale Schemaname, wenn Sie Ihre Tabelle in einem anderen Schema als möchten public. Der -oParameter gibt die Datei an, die vom Python-Skript generiert wird. Diese Datei ist die SQL-Darstellung Ihrer Tabellendefinition und der tatsächlichen Daten aus dem Quellraster, sodass sie ziemlich groß werden kann. Sobald diese Datei generiert wurde, müssen Sie sie ausführen, psql -d <db_name> -f elev.sqlum die Datenbank tatsächlich zu füllen. Danach kann sie gelöscht werden.

Was mir jedoch seltsam vorkommt, ist, dass Sie raster2pgsql.pyaus dem PostGIS 2.0- Quellverzeichnis aufrufen . Haben Sie PostGIS 2.0 tatsächlich kompiliert (durch Ausführen make) und installiert (durch Ausführen make installals Root)? Da es sich auf Ihrem Pfad und IIRC befinden sollte, aktualisiert das Installationsprogramm Ihre PYTHON_PATHUmgebungsvariable automatisch .

Was das Fehlen GDALSetRasterUnitTypebetrifft, würde ich zuerst prüfen, ob Sie keine frühere Version von GDAL-Bibliotheken installiert haben, die Python anstelle von 1.8.1 aufnimmt. Versuchen Sie gdalinfo --version diese Seite kann etwas Licht auf Ihr Problem werfen.


Danke für die Vorschläge - ich werde es ausprobieren. Ich bin ziemlich verwirrt darüber, wie ich dieses Skript aufrufen soll. Ich bin gelaufen makeund make installhätte es anrufen sollen ./bin/raster2pgsql.py. Ich verwende Shared Hosting ohne Root-Zugriff, kann aber Programme installieren. Wenn ich renne, gdalinfo --versionbekomme ich GDAL 1.5.3, released 2008/09/09; Welches ist die Serverversion; Ich habe GDAL 1.8.1 installiert, aber es wird von diesem Befehl nicht erfasst.
DJQ
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.