У мене є набір растрів у форматі 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)
замість строкових контактів може заощадити певний час, якщо буде достатньо ітерацій.