Saya memiliki satu set raster dalam format DTED yang saya muat ke dalam database PostGIS menggunakan alat baris perintah raster2pgsql.
Setiap raster hanya disimpan dalam satu baris dan dijelaskan oleh rid dan nilai format raster.
Sekarang, saya ingin membuat fungsi basis data yang mengambil bujur dan lintang suatu titik dan mengembalikan nilai piksel yang sesuai dengan titik ini.
Masalah yang saya miliki adalah bahwa dibutuhkan cukup banyak waktu untuk melakukan itu (3-4 detik) karena database berfungsi pada papan Odroid.
Saya tahu bahwa dataset yang saya proses cukup besar (raster mencakup seluruh wilayah Inggris) tetapi karena saya tidak terlalu mengenal PostgreSQL dan PostGIS, saya curiga ini bisa dilakukan lebih cepat.
Inilah yang telah saya lakukan sejauh ini:
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
dan $2
panjang dan lat masing-masing.
ST_SetSRID(ST_MakePoint($1, $2),4326)
pengganti string concats dapat menghemat waktu Anda jika ada cukup iterasi.