Tôi có một bộ raster ở định dạng DTED mà tôi tải vào cơ sở dữ liệu PostGIS bằng công cụ dòng lệnh raster2pgsql.
Mỗi raster chỉ được lưu trữ trong một hàng và được mô tả bằng cách loại bỏ và một giá trị của định dạng raster.
Bây giờ, tôi muốn tạo một hàm cơ sở dữ liệu lấy kinh độ và vĩ độ của một điểm và trả về giá trị pixel tương ứng với điểm này.
Vấn đề tôi gặp phải là phải mất khá nhiều thời gian để làm điều đó (3-4 giây) vì cơ sở dữ liệu hoạt động trên bảng Odroid.
Tôi biết rằng tập dữ liệu tôi xử lý khá lớn (các trình quét bao quát toàn bộ khu vực Vương quốc Anh) nhưng vì tôi không quen lắm với PostgreQuery và PostGIS nên tôi nghi ngờ nó có thể được thực hiện nhanh hơn.
Đây là những gì tôi đã làm cho đến nay:
SELECT ST_Value(rast, ST_GeomFromText(CONCAT('POINT(', $1, ' ', $2, ')'), 4326))
FROM (
SELECT * FROM rasters
WHERE rast && ST_GeomFromText(CONCAT('POINT(', $1, ' ', $2, ')'), 4326)
) x;
$1
và $2
dài và lat tương ứng.
ST_SetSRID(ST_MakePoint($1, $2),4326)
thay cho chuỗi concats có thể giúp bạn tiết kiệm thời gian nếu có đủ số lần lặp.