Запрос высоты на основании "облака точек".

Ответить
Аватара пользователя
oldbay
Участник
Сообщения: 53
Зарегистрирован: 14 июл 2015, 11:46
Репутация: 19
Откуда: Санкт-Петербург
Контактная информация:

Запрос высоты на основании "облака точек".

Сообщение oldbay » 17 окт 2021, 21:36

Коллеги - добрый день.
Есть отработанный механизм работы с ЦМР в postgis. А именно:
1) Слой с точками (трёхмерными или с высотой в метаданных) преобразую в ЦМР растр при помощи SAGA;
2) Загружаю этот растр в postgis raster слой;
3) Делаю запросы в raster слой для определения высоты произвольной точки в пределах границ ЦМР.

Но захотелось странного - избежать необходимости преобразования в растр. А именно делать запросы непосредственно к исходному слою с точками и производить интерполяцию "на лету" непосредственно в postgis.

п.с:
Пока был найден ST_InterpolatePoint (https://postgis.net/docs/ST_InterpolatePoint.html) - но эта функция находит значение z для точки на линии ближайшей к искомой точке. Если не найдётся ничего более пригодного - то видимо буду "плести паутину" из линий соединяющих ближайшие точки "исходного облака" к искомому объекту.

Ivor
Завсегдатай
Сообщения: 345
Зарегистрирован: 11 дек 2006, 09:46
Репутация: 102
Откуда: Иркутск

Re: Запрос высоты на основании "облака точек".

Сообщение Ivor » 18 окт 2021, 03:00

Воистину, возжелалось Вам странного.

Если у вас интерполяция линейная - можно попробовать вместо растра строить mesh, искать в нём нужный треугольник и интерполировать уже в нём. Если же интерполяция более заковыристая - то только воспроизводить алгоритм своими силами.

В любом случае это будет сильно медленнее растра. Смутно представляю себе ситуацию, в которой это может понадобиться.

Аватара пользователя
oldbay
Участник
Сообщения: 53
Зарегистрирован: 14 июл 2015, 11:46
Репутация: 19
Откуда: Санкт-Петербург
Контактная информация:

Re: Запрос высоты на основании "облака точек".

Сообщение oldbay » 19 окт 2021, 16:16

Ivor писал(а):
18 окт 2021, 03:00
В любом случае это будет сильно медленнее растра. Смутно представляю себе ситуацию, в которой это может понадобиться.
Спасибо большое за ответ!
Тоже пришёл к мнению что такая интерполяция на лету будет сложной в исполнении и крайне небыстрой.

gamm
Гуру
Сообщения: 4109
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1083
Ваше звание: программист
Откуда: Казань

Re: Запрос высоты на основании "облака точек".

Сообщение gamm » 19 окт 2021, 17:38

Интерполяцию "на лету" можно сделать и быстрой, для этого придумано k-d-tree, которое позволяет быстро найти соседей в заданном количестве, а потом можно что-то типа обратного расстояния использовать для интерполяции. Но не уверен, что все это (1) можно впихнуть в базу (хотя поиск ближайших соседей там может быть и готовый), и (2) что это не будет давать артефактов, особенно при экстраполяции или если соседи далеко. Но если точек много, и распределение плотное, должно работать.

Ivor
Завсегдатай
Сообщения: 345
Зарегистрирован: 11 дек 2006, 09:46
Репутация: 102
Откуда: Иркутск

Re: Запрос высоты на основании "облака точек".

Сообщение Ivor » 19 окт 2021, 18:48

gamm, но не быстрее прединтерполированного растра же. Единственное применение интерполяции "на лету" - это если вдруг надо искать максимально точные значения для произвольной точки, и любого вменяемого разрешения растра для этого не хватает. Но такие задачи я бы вообще в БД не решал, а писал специально обученную программу (ну или расширение для БД, если очень надо).

gamm
Гуру
Сообщения: 4109
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1083
Ваше звание: программист
Откуда: Казань

Re: Запрос высоты на основании "облака точек".

Сообщение gamm » 19 окт 2021, 20:13

если речь о интерактивном режиме, то разница между 0.1 секундой, 1 миллисекундой и 1 микросекундой не ощущается. В остальном согласен.

Ответить

Вернуться в «PostGIS/PostgreSQL»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость