Ho un set di raster in formato DTED che carico nel database PostGIS usando lo strumento da riga di comando raster2pgsql.
Ciascuno dei raster è semplicemente memorizzato in una riga e descritto da rid e un valore del formato raster.
Ora, voglio creare una funzione di database che prende la longitudine e la latitudine di un punto e restituisce un valore di pixel corrispondente a questo punto.
Il problema che ho è che ci vuole molto tempo per farlo (3-4 secondi) perché il database funziona sulla scheda Odroid.
So che il set di dati che elaboro è piuttosto grande (i raster coprono l'intera area del Regno Unito) ma poiché non ho molta familiarità con PostgreSQL e PostGIS, sospetto che possa essere fatto più velocemente.
Questo è quello che ho fatto finora:
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
e $2
sono rispettivamente long e lat.
ST_SetSRID(ST_MakePoint($1, $2),4326)
al posto dei concatenamenti può farti risparmiare un po 'di tempo se ci sono abbastanza iterazioni.