Tôi đã cố gắng nhập một raster lớn vào cơ sở dữ liệu PostGIS 2.0 và gặp một vài vấp ngã.
Ban đầu khi tôi cố gắng nhập raster bằng raster2pgsql, tôi sẽ nhận được lỗi sau: rt_band_set_pixel_line: Tọa độ ngoài phạm vi
Sau khi tìm thấy trang này và sử dụng gdalinfo tôi thấy rằng raster vượt quá kích thước tối đa được phép là 65535 x 65535.
đầu ra gdalinfo:
$ gdalinfo ari100.tif
Trình điều khiển: GTiff / GeoTIFF
... Kích thước là 42971,
Hệ thống tọa độ 77138 là:
GEOGCS ["WGS 84",
...
AUTHORITY ["EPSG", "4326"]] Origin = (152.741676637167842, 2008 )
Kích thước điểm ảnh = (,000009239757419, -,000009239757419)
Metadata:
AREA_OR_POINT = Diện tích
hình ảnh cấu trúc siêu dữ liệu:
Interleave = BAND
Corner Tọa độ:
Upper Left (152,7416766, -26,2153028) (152d44'30.04 "E, 26d12'55.09" S)
dưới bên trái (152,7416766 , -26,9280392) (152d44'30.04 "E, 26d55'40.94" S)
Phía trên bên phải (153.1387183, -26.2153028) (153d 8'19,39 "E, 26d12'55.09 "S)
Trung tâm bên phải (153.1387183, -26.9280392) (
Trung tâm 153d 8'19,39 "E, 26d55'40.94" S) (152.9401974, -26.5716710) (152d56'24.71 "E, 26d34'18.02" S)
Band 1 , ColorInterp = Xám
...
Vì vậy, tôi quyết định sử dụng chức năng out-db bằng cách sử dụng cờ -R trong raster2pgsql.
Từ tài liệu: Đăng ký raster dưới dạng raster systemystem (out-db), Chỉ siêu dữ liệu của raster và vị trí đường dẫn đến raster mới được lưu trữ trong cơ sở dữ liệu (không phải pixel).
Tôi đã nhập raster bằng lệnh sau:
raster2pgsql /gis/Flood/ari100.tif -R | psql -U username database
Nhưng khi tôi thử một truy vấn:
SELECT ST_Value(rast, ST_PointFromText('POINT(152.9632 -26.4878)')) FROM ari100
Tôi nhận được lỗi sau đây:
NOTICE: Attempting to get pixel value with out of range raster coordinates: (23975, 29491)
CONTEXT: PL/pgSQL function "st_value" line 13 at RETURN
Tuy nhiên, nếu tôi sử dụng GDAL (thông qua Python) để truy vấn raster trực tiếp bằng tập lệnh này
python val_at_coord.py 152.9632 -26.4878
Tôi có thể lấy lại giá trị một cách chính xác.
Tôi quyết định tìm phạm vi của raster trong cơ sở dữ liệu:
SELECT ST_Height(rast) As rastheight, ST_Width(rast) As rastwidth from ari100;
rastheight | rastwidth
11602 | 42971
Chiều cao hoàn toàn không chính xác (nên là 77138).
Vì vậy, câu hỏi của tôi là: tôi đã làm điều gì sai (khi sử dụng raster2pgsql) hoặc có giới hạn trong việc sử dụng các trình raster out-db với PostGIS không?
Cảm ơn