Tengo un conjunto de rásteres en formato DTED que cargo en la base de datos PostGIS usando la herramienta de línea de comandos raster2pgsql.
Cada uno de los rásteres se almacena simplemente en una fila y se describe mediante rid y un valor de formato de ráster.
Ahora, quiero crear una función de base de datos que tome la longitud y la latitud de un punto y devuelva un valor de píxel correspondiente a este punto.
El problema que tengo es que lleva bastante tiempo hacerlo (3-4 segundos) porque la base de datos funciona en la placa Odroid.
Sé que el conjunto de datos que proceso es bastante grande (los rásteres cubren todo el área del Reino Unido), pero como no estoy muy familiarizado con PostgreSQL y PostGIS, sospecho que se puede hacer más rápido.
Esto es lo que he hecho hasta ahora:
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
y $2
son largos y lat respectivamente.
ST_SetSRID(ST_MakePoint($1, $2),4326)
en lugar de los concatenos de cuerdas puede ahorrarle algo de tiempo si hay suficientes iteraciones.