Memuat raster ke database PostGIS 2.0 di Windows


18

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.exeprogram 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 cmdke dalam bilah pencarian dan tekan ctrl+ shift+ enter) untuk mengaktifkan raster2pgsql.exefungsinya. memuat raster ke dalam basis data saya. Saya memiliki file raster yang disebut ras_test.tifuntuk sementara saya letakkan di binfolder postgresqlinstalasi 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:

masukkan deskripsi gambar di sini

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
  1. Apakah saya harus menyediakan SRID? -s 4236

  2. Apakah -I -C -Msemua argumen opsional?

  3. -ttampaknya ukuran ubin; Apakah saya perlu menentukan ini jika saya tidak memiliki skema khusus?

  4. 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 riddan rast. ridmemiliki empat nilai, nad rasttidak 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:

masukkan deskripsi gambar di sini

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.


raster2pgsql merujuk pada referensi postgis.org/documentation/manual-svn/…
Mapperz

Saya mencoba memuat file raster (jpg) ke dalam post gis menggunakan sintaks yang disediakan di sini "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 "Saya bisa melihat tabel raster yang dibuat dalam database. Seperti yang ditunjukkan oleh Celenius di mana Anda tidak melihat apa pun di bawah kolom "rast raster" kecuali Anda mengklik sel tertentu. Inilah masalah saya yang sebenarnya. Cara melihat lapisan raster dari ArcGIS menggunakan lapisan kueri sql. Ketika saya mencoba menambahkan layer ini dan memvalidasinya, dikatakan "rast raster
GISTECH

Saya pikir Anda harus mengajukan ini sebagai pertanyaan baru karena Anda akan mendapatkan lebih banyak tanggapan. Saya tidak tahu bagaimana Anda dapat terhubung menggunakan ArcGIS tetapi Anda dapat menggunakan QGIS untuk mengaksesnya.
djq

1
Catatan: pgAdminIII menunjukkan sel kosong untuk data di luar ukuran tertentu; lihat tiket # 297
Mike T

querry di atas berfungsi tetapi adakah yang bisa memberitahu saya cara menyimpan nilai pixel / nilai sel dalam tabel?

Jawaban:


5

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


Terima kasih Mapperz, saya mengerti sebagian cara kerja raster2pgsql - namun raster saya di postgresql hanya berisi satu sel yang mengapa saya mencoba mencari tahu argumen apa yang digunakan.
djq

9

Celenius,

Jika Anda tidak menggunakan -topsi 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 -tharus 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:

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

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-guiuntuk membuatnya lebih sederhana untuk pemula.

Dalam verson terbaru raster2pgsqlada 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).


Terima kasih atas sarannya! Masih tidak bisa membuatnya bekerja, tetapi mulai memahami sakelar sedikit lebih baik.
djq

Memang berhasil, tapi saya tidak mengerti bagaimana ini harus terlihat dalam database. Sekali lagi terima kasih atas bantuan Anda.
djq

Apakah GUI untuk memuat raster ke pgsql akhirnya tiba? :)
astrojuanlu

-2

Dalam tampilan SQL, Anda tidak bisa melihat data saat besar. Anda bisa mengeksekusi kueri ke dalam file dan itu akan menampilkan data.


1
Pertanyaan asli (lama) sudah merupakan jawaban yang diterima dan pertanyaan Anda bukanlah solusi alternatif untuk pertanyaan tersebut, melainkan panggilan untuk inspeksi visual.
Curlew
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.