Запрос высоты на основании "облака точек".
- oldbay
- Участник
- Сообщения: 53
- Зарегистрирован: 14 июл 2015, 11:46
- Репутация: 19
- Откуда: Санкт-Петербург
- Контактная информация:
Запрос высоты на основании "облака точек".
Коллеги - добрый день.
Есть отработанный механизм работы с ЦМР в postgis. А именно:
1) Слой с точками (трёхмерными или с высотой в метаданных) преобразую в ЦМР растр при помощи SAGA;
2) Загружаю этот растр в postgis raster слой;
3) Делаю запросы в raster слой для определения высоты произвольной точки в пределах границ ЦМР.
Но захотелось странного - избежать необходимости преобразования в растр. А именно делать запросы непосредственно к исходному слою с точками и производить интерполяцию "на лету" непосредственно в postgis.
п.с:
Пока был найден ST_InterpolatePoint (https://postgis.net/docs/ST_InterpolatePoint.html) - но эта функция находит значение z для точки на линии ближайшей к искомой точке. Если не найдётся ничего более пригодного - то видимо буду "плести паутину" из линий соединяющих ближайшие точки "исходного облака" к искомому объекту.
Есть отработанный механизм работы с ЦМР в postgis. А именно:
1) Слой с точками (трёхмерными или с высотой в метаданных) преобразую в ЦМР растр при помощи SAGA;
2) Загружаю этот растр в postgis raster слой;
3) Делаю запросы в raster слой для определения высоты произвольной точки в пределах границ ЦМР.
Но захотелось странного - избежать необходимости преобразования в растр. А именно делать запросы непосредственно к исходному слою с точками и производить интерполяцию "на лету" непосредственно в postgis.
п.с:
Пока был найден ST_InterpolatePoint (https://postgis.net/docs/ST_InterpolatePoint.html) - но эта функция находит значение z для точки на линии ближайшей к искомой точке. Если не найдётся ничего более пригодного - то видимо буду "плести паутину" из линий соединяющих ближайшие точки "исходного облака" к искомому объекту.
-
- Завсегдатай
- Сообщения: 345
- Зарегистрирован: 11 дек 2006, 09:46
- Репутация: 102
- Откуда: Иркутск
Re: Запрос высоты на основании "облака точек".
Воистину, возжелалось Вам странного.
Если у вас интерполяция линейная - можно попробовать вместо растра строить mesh, искать в нём нужный треугольник и интерполировать уже в нём. Если же интерполяция более заковыристая - то только воспроизводить алгоритм своими силами.
В любом случае это будет сильно медленнее растра. Смутно представляю себе ситуацию, в которой это может понадобиться.
Если у вас интерполяция линейная - можно попробовать вместо растра строить mesh, искать в нём нужный треугольник и интерполировать уже в нём. Если же интерполяция более заковыристая - то только воспроизводить алгоритм своими силами.
В любом случае это будет сильно медленнее растра. Смутно представляю себе ситуацию, в которой это может понадобиться.
- oldbay
- Участник
- Сообщения: 53
- Зарегистрирован: 14 июл 2015, 11:46
- Репутация: 19
- Откуда: Санкт-Петербург
- Контактная информация:
-
- Гуру
- Сообщения: 4109
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1083
- Ваше звание: программист
- Откуда: Казань
Re: Запрос высоты на основании "облака точек".
Интерполяцию "на лету" можно сделать и быстрой, для этого придумано k-d-tree, которое позволяет быстро найти соседей в заданном количестве, а потом можно что-то типа обратного расстояния использовать для интерполяции. Но не уверен, что все это (1) можно впихнуть в базу (хотя поиск ближайших соседей там может быть и готовый), и (2) что это не будет давать артефактов, особенно при экстраполяции или если соседи далеко. Но если точек много, и распределение плотное, должно работать.
-
- Завсегдатай
- Сообщения: 345
- Зарегистрирован: 11 дек 2006, 09:46
- Репутация: 102
- Откуда: Иркутск
Re: Запрос высоты на основании "облака точек".
gamm, но не быстрее прединтерполированного растра же. Единственное применение интерполяции "на лету" - это если вдруг надо искать максимально точные значения для произвольной точки, и любого вменяемого разрешения растра для этого не хватает. Но такие задачи я бы вообще в БД не решал, а писал специально обученную программу (ну или расширение для БД, если очень надо).
-
- Гуру
- Сообщения: 4109
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1083
- Ваше звание: программист
- Откуда: Казань
Re: Запрос высоты на основании "облака точек".
если речь о интерактивном режиме, то разница между 0.1 секундой, 1 миллисекундой и 1 микросекундой не ощущается. В остальном согласен.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость