Eu tenho um conjunto de rasters no formato DTED que carrego no banco de dados PostGIS usando a ferramenta de linha de comando raster2pgsql.
Cada rasters é simplesmente armazenado em uma linha e descrito por rid e um valor no formato raster.
Agora, eu quero criar uma função de banco de dados que tome longitude e latitude de um ponto e retorne um valor de pixel correspondente a esse ponto.
O problema que tenho é que leva muito tempo para fazer isso (3-4 segundos) porque o banco de dados funciona na placa Odroid.
Eu sei que o conjunto de dados que eu processo é bastante grande (os rasters cobrem toda a área do Reino Unido), mas como eu não estou muito familiarizado com o PostgreSQL e o PostGIS, suspeito que possa ser feito mais rapidamente.
Isto é o que eu fiz até agora:
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
são longos e lat, respectivamente.
fonte
ST_SetSRID(ST_MakePoint($1, $2),4326)
no lugar de concats de string pode economizar algum tempo se houver iterações suficientes.Respostas:
Você pode tentar o seguinte:
Mas o verdadeiro problema é a consulta raster; a disposição do conjunto de dados deve acelerar as consultas. Você pode tentar usar o PostGIS WKT Raster e seguir este tutorial .
Espero que seja útil,
fonte