Apakah ada batasan menggunakan raster out-db PostGIS?

8

Saya telah mencoba untuk mengimpor raster besar ke dalam database PostGIS 2.0 dan mendapatkan beberapa batu sandungan.

Awalnya ketika saya mencoba mengimpor raster menggunakan raster2pgsql, saya akan menerima kesalahan berikut: rt_band_set_pixel_line: Koordinat di luar jangkauan

Setelah menemukan halaman ini , dan menggunakan gdalinfo, saya menemukan bahwa raster melebihi ukuran maksimum yang diizinkan yaitu 65535 x 65535.

keluaran gdalinfo:

$ gdalinfo ari100.tif
Driver: GTiff / GeoTIFF
... Ukurannya adalah 42971, 77138
Sistem Koordinat adalah:
GEOGCS ["WGS 84",
...
AUTHORITY ["EPSG", "4326"]] Origin = (152.7416773737167842, -26.215302802012008 )
Ukuran Pixel = (,000009239757419, -,000009239757419)
Metadata:
AREA_OR_POINT = Lokasi
Gambar Struktur Metadata:
interleave = BAND
Pojok Koordinat:
Atas Kiri (152,7416766, -26,2153028) (152d44'30.04 "E, 26d12'55.09" S)
bawah Kiri (152,7416766 , -26.9280392) (152d44'30.04 "E, 26d55'40.94" S)
Kanan Atas (153.1387183, -26.2153028) (153d 8'19.39 "E, 26d12'55.09 "S)
Kanan Bawah (153.1387183, -26.9280392) (153d 8'19.39 "E, 26d55'40.94" S)
Center (152.9401974, -26.5716710) (152d56'24.71 "E, 26d34'18.02" S)
Band 1 Blok = 42971x1 Jenis = Float32 , ColorInterp = Abu-abu
...

Jadi saya memutuskan untuk menggunakan fungsionalitas out-db dengan menggunakan flag -R di raster2pgsql.

Dari dokumentasi: Daftarkan raster sebagai raster filesystem (out-db), Hanya metadata dari raster dan lokasi jalur ke raster yang disimpan dalam database (bukan piksel).

Saya mengimpor raster menggunakan perintah berikut:

raster2pgsql /gis/Flood/ari100.tif -R | psql -U username database

Tetapi ketika saya mencoba kueri:

SELECT ST_Value(rast, ST_PointFromText('POINT(152.9632 -26.4878)')) FROM ari100

Saya mendapatkan kesalahan berikut:

NOTICE:  Attempting to get pixel value with out of range raster coordinates: (23975, 29491)  
CONTEXT:  PL/pgSQL function "st_value" line 13 at RETURN  

Namun, jika saya menggunakan GDAL (melalui Python) untuk meminta raster secara langsung menggunakan skrip ini

python val_at_coord.py 152.9632 -26.4878

Saya dapat mengambil nilai dengan benar.

Saya memutuskan untuk menemukan luasan raster dalam database:

SELECT ST_Height(rast) As rastheight, ST_Width(rast) As rastwidth from ari100;

rastheight | rastwidth  
11602      | 42971  

Ketinggiannya benar-benar salah (harus 77138).

Jadi pertanyaan saya adalah: apakah saya melakukan sesuatu yang salah (menggunakan raster2pgsql) atau apakah ada batasan dalam menggunakan raster out-db dengan PostGIS?

Terima kasih

Philip D'Rozario
sumber
4
Hanya sebuah catatan: sepertinya meluap dengan baik, karena 77138 = 65536 + 11602.
lynxlynxlynx

Jawaban:

8

Anda pasti ingin memasang raster Anda. Lebar x tinggi maksimum yang diijinkan untuk tipe raster PostGIS adalah 65535 x 65535, terlepas dari apakah rasternya adalah in-db atau out-db. Alasan lain untuk memasang raster Anda (meskipun ini mungkin tidak berlaku dalam kasus Anda) adalah bahwa ukuran bidang maksimum yang diizinkan oleh PostgreSQL adalah 1 GB [1].

Adapun ukuran ubin optimal, saya hanya bisa menyarankan dua hal.

  1. Ukuran ubin <= 100 x 100 adalah yang terbaik. lebih kecil lebih cepat tetapi mengkonsumsi lebih banyak ruang penyimpanan.

  2. Jika memungkinkan, cari ukuran ubin yang dapat dibagi bersih dari dimensi raster. Jadi untuk raster 42971 x 77138, tidak ada ukuran ubin <= 100 x 100 yang berfungsi dengan baik. Dalam situasi ini, saya biasanya hanya pergi 50 x 50 atau sesuatu di lingkungan itu.

-Bborie

[1] http://www.postgresql.org/about/

dustymugs
sumber