Интересно, как можно хранить огромные наборы данных облака отсканированных лазером точек в PostGIS, учитывая время обработки? Я знаю, что существует объект геометрии Point
в PostGIS. Но, насколько я знаю, это сохраняет каждую точку в новом наборе, что может сделать поиск любой определенной точки очень медленным процессом, если хранится несколько миллионов или более из них.
Я нашел статью из Университета прикладных наук Рапперса, посвященную этой теме. Он предлагает три способа хранения таких данных: Whole data in one tupel
, Each point in one tupel
или Splitting Data into Blocks
которые ссылаются инфо-таблицами, держа расширяет каждый блок. Поскольку третий способ кажется наиболее полезным для определения местоположения сохраненных точек, мне интересно, кто-нибудь уже имел опыт работы с ним?
Документ можно найти здесь: http://wiki.hsr.ch/Datenbanken/files/pgsql_point_cloud.pdf
И последнее, но не менее важное: я наткнулся на проект на github, который, похоже, имеет дело с манерами облаков точек в PostgeSQL. К сожалению, не так много информации об этом в сети. Итак, тот же вопрос: кто-то уже имел опыт? Это можно использовать для таких целей?
Проект можно найти здесь: https://github.com/pramsey/pointcloud
Я также был бы рад услышать о других предложениях, идеях или опыте, если таковые имеются. Но я должен признать, что некоммерческие решения предпочтительнее.
источник
Ответы:
В вашем вопросе много всего. Короткий ответ: да, в PostGIS можно полностью хранить огромные данные облака точек и использовать их для обработки. Мы создали такую полную систему, которая делает это.
Это видео немного устарело с его номерами, но у нас были ТБ мобильных / наземных и аэрофотоснимков в postgis, доступные через python для обработки в бэкэнде и с веб-интерфейсом, позволяющим просматривать и загружать данные в 3D. https://vimeo.com/39053196
Это действительно сводится к тому, как вы решили хранить данные в PostGIS и как вы собираетесь получать к ним доступ. Хорошее решение для аэрофотоснимков вполне может заключаться в том, чтобы каким-то образом распределять данные по сетке и использовать многоточечные для эффективности. Однако, если вы работаете с мобильными или наземными данными, где плотность точек может составлять 500-30000 + точек на квадратный метр, такой подход не работает. Затем все сводится к анализу вашего оборудования и ожидаемого количества одновременно работающих пользователей. Подробности об этом можно найти в некоторых наших статьях http://www.mendeley.com/profiles/conor-mc-elhinney/
источник
(Ответ основан на моих и других комментариях выше; на самом деле не проверял)
Сохраните точки как MultiPointZM. Наилучший размер сетки, вероятно, будет зависеть от шаблонов доступа, и вам нужно провести некоторое тестирование по этому вопросу. Обычная сетка с пространственным индексом должна выполнять запросы довольно быстро. Если важен трехмерный доступ, тогда MultiPointZM может основываться на трехмерном блоке (1) вместо двумерной плоской сетки, тогда (если у вас PostGIS> = 2.0), вы сможете использовать &&& для быстрых трехмерных запросов.
Вы также можете сохранить шаблон сетки в отдельной таблице, что может быть полезно, например, при обновлении данных и проверке того, что блоки MultiPointZM остаются в своих границах после редактирования и т. Д.
Хранение меток времени или других данных будет возможно только для блока за один раз, но некоторые двоичные данные / данные категорий могут быть сохранены путем дезагрегации каждого блока по атрибуту, если не слишком много категорий и / или атрибутов.
Если вам в конечном итоге придется хранить данные как отдельный PointZM, то внешний ключ в таблице сетки + индекс B-Tree сделает загрузку только определенных точек (возможно) намного быстрее, чем просто запрос таблицы напрямую, даже с пространственным показатель.
(1) Если диапазон значений Z мал (в конце концов, это дорога), это, вероятно, не имеет смысла.
источник