Страница 1 из 1

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

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

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

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

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

Добавлено: 18 окт 2021, 03:00
Ivor
Воистину, возжелалось Вам странного.

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

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

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

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

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

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

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

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

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

Добавлено: 19 окт 2021, 20:13
gamm
если речь о интерактивном режиме, то разница между 0.1 секундой, 1 миллисекундой и 1 микросекундой не ощущается. В остальном согласен.