У меня есть набор растров в формате DTED, которые я загружаю в базу данных PostGIS с помощью инструмента командной строки raster2pgsql.
Каждый из растров просто хранится в строке и описывается ридом и значением растрового формата.
Теперь я хочу создать функцию базы данных, которая принимает долготу и широту точки и возвращает значение пикселя, соответствующее этой точке.
У меня проблема в том, что это занимает довольно много времени (3-4 секунды), потому что база данных работает на плате Odroid.
Я знаю, что обрабатываемый мной набор данных довольно большой (растры покрывают всю территорию Великобритании), но, поскольку я не очень хорошо знаком с PostgreSQL и PostGIS, я подозреваю, что это можно сделать быстрее.
Это то, что я сделал до сих пор:
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
и $2
длинные и лат соответственно.
источник
ST_SetSRID(ST_MakePoint($1, $2),4326)
вместо строк concats может сэкономить вам время, если будет достаточно итераций.Ответы:
Вы можете попробовать это:
Но настоящая проблема в растровых запросах; Черепица набора данных должна ускорить запросы. Вы можете попробовать использовать PostGIS WKT Raster и следовать этому руководству .
Надеюсь, это будет полезно,
источник