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.