Saya mencoba mencari cara untuk memuat raster ke dalam database PostGIS2.0 (Saya telah mengajukan pertanyaan sebelumnya tentang topik ini di sini dan di sini ). Saya mencoba menggunakan raster2pgsql.exe
program yang disediakan dengan PostGIS2.0.
Setelah mengetahui bahwa prompt perintah di windows perlu dijalankan sebagai administrator (Di Windows 7 untuk menjalankan baris perintah sebagai administrator, ketik cmd
ke dalam bilah pencarian dan tekan ctrl
+ shift
+ enter
) untuk mengaktifkan raster2pgsql.exe
fungsinya. memuat raster ke dalam basis data saya. Saya memiliki file raster yang disebut ras_test.tif
untuk sementara saya letakkan di bin
folder postgresql
instalasi saya . Menggunakan kode berikut ini saya mengonversi dan memuat raster ini:
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
Ketika saya melihat tabel ini di PostGIS terlihat seperti ini:
Namun, saya belum dapat melihat ini di QGIS, dan saya tidak yakin apakah saya memuatnya dengan benar karena tampaknya tidak ada data dalam file ini. Sepertinya saya telah memuat nama file sebagai raster, bukan konten data. Sudahkah saya membuat kesalahan jelas yang mencegah saya memuat raster ke dalam database saya?
Dokumentasi PostGIS memberikan contoh cara memuat raster, tetapi saya tidak mengerti argumen mana yang opsional, dan masih belum jelas tentang apa yang harus saya gunakan jika saya ingin menggunakan skema default. Misalnya, dalam contoh berikut dari dokumentasi:
raster2pgsql -s 4236 -I -C -M *.tif -F -t myschema.demelevation > elev.sql
psql -d gisdb -f elev.sql
Apakah saya harus menyediakan SRID?
-s 4236
Apakah
-I -C -M
semua argumen opsional?-t
tampaknya ukuran ubin; Apakah saya perlu menentukan ini jika saya tidak memiliki skema khusus?- Bisakah saya tinggalkan saja
myschema.demelevation
?
EDIT: Saya sudah memasukkan hasil dari saran di bawah ini:
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
Ini menghasilkan tabel dengan dua kolom rid
dan rast
. rid
memiliki empat nilai, nad rast
tidak punya. Ketika saya mencoba menggunakan beberapa argumen lagi:
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)
Saya mendapatkan output berikut. Ini menghasilkan tabel baru dengan struktur berikut:
Saya berasumsi bahwa ini bukan raster yang dimuat dengan benar karena saya tidak dapat melihat data. Apakah ada opsi lain yang bisa saya coba?
EDIT: Upaya terakhir ini berhasil, saya hanya tidak mengakses raster dengan benar.
Jawaban:
SRID? -s 4236 (wajib)
Apakah argumen -I -C -M semuanya opsional?
-C Terapkan batasan raster - srid, pixelsize dll. Untuk memastikan raster terdaftar dengan benar di tampilan raster_columns. (yg dibutuhkan)
-M (Vacuum menganalisis tabel raster.) Opsional
-I (Buat indeks GiST pada kolom raster.) Opsional tetapi direkomendasikan
-t TILE_SIZE (Potong raster menjadi ubin yang akan dimasukkan satu per baris tabel. TILE_SIZE dinyatakan sebagai WIDTHxHEIGHT.)
myschema.demelevation
tinggalkan (ya)http://postgis.net/docs/using_raster_dataman.html#RT_Loading_Rasters
sumber
Celenius,
Jika Anda tidak menggunakan
-t
opsi dengan dimensi ukuran, maka file raster Anda akan masuk sebagai catatan tunggal. Saya baru saja melihat kesalahan dalam dokumen yang mungkin membingungkan Anda. Saya akan memperbaikinya. Itu-t
harus selalu diikuti oleh lebar x.Jika Anda ingin chunked katakan dalam tinggi 100x100 piksel - seperti yang dikatakan Mapperz - gunakan opsi -t.
Jadi perintah Anda adalah:
Lihatlah contoh aerial di dokumen. http://www.postgis.org/documentation/manual-svn/using_raster.xml.html#RT_Raster_Loader
Yang merupakan salah satu contoh manual banyak digunakan:
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
Saya tahu switch bisa sedikit menakutkan karena mereka begitu banyak dan kebanyakan bersifat opsional. Mungkin di 2.1 kita akan memiliki gui yang mirip dengan
shp2pgsql-gui
untuk membuatnya lebih sederhana untuk pemula.Dalam verson terbaru
raster2pgsql
ada logika untuk menyimpulkan srid dari info georeferensi di tif atau file raster lainnya (versi ini tersedia sebagai biner jendela sekarang). Belum mencoba fitur itu, tetapi jika berfungsi Anda bahkan dapat mengabaikan srid dan itu akan menebak (semoga benar).sumber
Dalam tampilan SQL, Anda tidak bisa melihat data saat besar. Anda bisa mengeksekusi kueri ke dalam file dan itu akan menampilkan data.
sumber