Bagaimana cara mengimpor raster ke PostGIS?

8

Saya mencoba mengikuti instruksi di sini untuk memuat raster ke dalam database PostGIS:

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

Saya mengerti bahwa saya mengganti *dengan jalan ke raster saya, tetapi saya tidak mengerti bagian myschema.demelevationatau elev.sql. Haruskah saya memiliki skema sendiri untuk file ini? Dan apa arti elev.sqlbagian itu?

Saya juga membaca driver raster PostGIS gdal untuk mencoba dan memahami ini dengan lebih banyak contoh. Demikian pula, mereka menyarankan memuat rasterkatrina

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

Menggunakan pengaturan saya saat ini, saya mencoba memuat katrinaraster di:

    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

Namun, saya mendapat kesalahan berikut:

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

Saya tidak sepenuhnya mengerti kesalahan ini artinya; ketika saya mengkompilasi gdalharuskah saya menentukan argumen untuk GDALSetRasterUnitType?

Secara umum, saya mengalami kesulitan memahami mengapa saya tidak menentukan basis data tempat saya mencoba memuat data ini.


Setelah mengikuti saran MerseViking saya berlari:

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

yang mengembalikan output berikut:

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

Lalu aku berlari:

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

yang mengembalikan yang berikut:

    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)

Pesan ini dan kursor yang berkedip muncul di layar. Saya berasumsi bahwa itu memuat ke dalam database, tapi saya tidak yakin. The tiffile hanya 3MB - saya telah diasumsikan bahwa itu tidak akan butuh waktu lama untuk memuat file ukuran ini tetapi kursor berkedip sudah berada pada layar untuk ~ 1 jam. Apakah ini macet atau apakah saya hanya perlu menunggu lama? Saya memiliki 4GB RAM dan prosesor ganda 2,5 GHz.

djq
sumber
Saya telah menemukan bahwa jika saya menekan tombol q, itu mengeksekusi perintah ini, dan memasukkan data ke dalam database test. Apakah ini perilaku normal dan haruskah saya melakukan ini?
djq

Jawaban:

3

Tampaknya ada kesalahan ketik pada halaman itu; dalam barisan:

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

The -Fparameter harus -tyang menentukan nama tabel untuk mengimpor data ke dalam. Bagian sebelum .adalah nama skema opsional jika Anda ingin tabel Anda dalam skema selain public. The -oparameter menentukan file yang dihasilkan oleh script Python. File ini adalah representasi SQL dari definisi tabel Anda dan data aktual dari raster sumber, sehingga bisa menjadi cukup besar. Setelah file ini dibuat, Anda harus menjalankannya psql -d <db_name> -f elev.sqluntuk benar-benar mengisi database, setelah itu dapat dihapus.

Namun, yang menurut saya aneh adalah Anda menelepon raster2pgsql.pydari direktori sumber PostGIS 2.0 . Sudahkah Anda mengkompilasi (dengan menjalankan make) dan menginstal (dengan menjalankan make installsebagai root) PostGIS 2.0? Karena itu harus di jalur Anda, dan IIRC installer secara otomatis memperbarui PYTHON_PATHvariabel lingkungan Anda .

Adapun yang hilang GDALSetRasterUnitType, hal pertama yang saya akan periksa adalah bahwa Anda tidak memiliki versi sebelumnya dari pustaka GDAL diinstal bahwa Python mengambil alih-alih 1.8.1. Coba gdalinfo --version Situs ini dapat menjelaskan masalah Anda.

MerseyViking
sumber
Terima kasih atas sarannya - saya akan mengujinya. Saya cukup bingung tentang cara memanggil skrip ini. Saya telah lari makedan make install; Saya seharusnya memanggilnya dari ./bin/raster2pgsql.py. Saya menggunakan shared hosting yang tidak memiliki akses root, tetapi saya dapat menginstal program. Ketika saya berlari gdalinfo --versionsaya mendapatkan GDAL 1.5.3, released 2008/09/09; yang merupakan versi server; Saya telah menginstal GDAL 1.8.1 tetapi tidak diambil oleh perintah ini.
djq