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.
quelle
ST_SetSRID(ST_MakePoint($1, $2),4326)
anstelle von String-Concats kann Ihnen Zeit sparen, wenn genügend Iterationen vorhanden sind.Antworten:
Sie könnten dies versuchen:
Das eigentliche Problem ist jedoch die Rasterabfrage. Durch Kacheln des Datasets sollten Abfragen beschleunigt werden. Sie können versuchen, PostGIS WKT Raster zu verwenden, und diesem Tutorial folgen .
Ich hoffe, es wird nützlich sein,
quelle