J'ai un ensemble de rasters au format DTED que je charge dans la base de données PostGIS à l'aide de l'outil de ligne de commande raster2pgsql.
Chacun des rasters est simplement stocké dans une rangée et décrit par rid et une valeur de format raster.
Maintenant, je veux créer une fonction de base de données qui prend la longitude et la latitude d'un point et renvoie une valeur de pixel correspondant à ce point.
Le problème que j'ai, c'est que cela prend beaucoup de temps (3-4 secondes) car la base de données fonctionne sur la carte Odroid.
Je sais que l'ensemble de données que je traite est assez volumineux (les rasters couvrent toute la zone du Royaume-Uni) mais comme je ne suis pas très familier avec PostgreSQL et PostGIS, je pense que cela peut être fait plus rapidement.
Voici ce que j'ai fait jusqu'à présent:
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
et $2
sont respectivement long et lat.
la source
ST_SetSRID(ST_MakePoint($1, $2),4326)
à la place des chaînes de caractères peut vous faire gagner du temps s'il y a suffisamment d'itérations.Réponses:
Vous pouvez essayer ceci:
Mais le vrai problème est la recherche raster; la mise en mosaïque de l'ensemble de données devrait accélérer les requêtes. Vous pouvez essayer d'utiliser PostGIS WKT Raster et suivre ce didacticiel .
J'espère que ce sera utile,
la source