Ich habe eine Reihe von Rastern im DTED-Format, die ich mit dem Befehlszeilentool raster2pgsql in die PostGIS-Datenbank lade.
Jedes der Raster wird einfach in einer Reihe gespeichert und durch rid und einen Wert im Rasterformat beschrieben.
Jetzt möchte ich eine Datenbankfunktion erstellen, die Längen- und Breitengrade eines Punkts verwendet und einen diesem Punkt entsprechenden Pixelwert zurückgibt.
Das Problem, das ich habe, ist, dass es ziemlich viel Zeit braucht (3-4 Sekunden), weil die Datenbank auf Odroid Board funktioniert.
Ich weiß, dass der Datensatz, den ich verarbeite, ziemlich groß ist (die Raster decken den gesamten britischen Bereich ab), aber da ich mit PostgreSQL und PostGIS nicht sehr vertraut bin, vermute ich, dass dies schneller möglich ist.
Folgendes habe ich bisher getan:
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
und $2
sind lang bzw. lat.
ST_SetSRID(ST_MakePoint($1, $2),4326)
anstelle von String-Concats kann Ihnen Zeit sparen, wenn genügend Iterationen vorhanden sind.