powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / PostGIS кластеризация
23 сообщений из 23, страница 1 из 1
PostGIS кластеризация
    #39004634
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Меня интересует вопрос кластеризации геопространственных данных. Конкретно точек.
И у меня в голове сидит мысль по этому поводу.

В PostGIS существуют пространсвенные индексы, которые представляют собой R-деревья.

Вопрос: Можно ли создать такое R-дерево у которого в каждом узле будут хранится данные, близкие друг от друга по расстоянию (расстояние можно будет задавать). Степень дерева будет равна максимально возможному числу зума карты ( у гугла например 20). Таким образом такое дерево будет автоматом кластеризовано, то есть когда я захочу взять маркеры при зуме 10, то мне будут передаваться словари такого вида [номер кластера(узла), кол-во элементов, координаты центра кластера(узла)].

Возможно уже существует такое решение, если да, то подскажите пожалуйста? Либо может есть более продвинутые реализации кластеризации на уровне БД?
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39004642
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так понимаю это получается cR-дерево. Есть ли его реализации в PostGIS?
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39004734
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эм... В Пг есть индексы на различные запросы для геометрии. Думаю вам надо покопать в эту сторону.
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39005174
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ClosiusДобрый день.

Меня интересует вопрос кластеризации геопространственных данных. Конкретно точек.
И у меня в голове сидит мысль по этому поводу.

В PostGIS существуют пространсвенные индексы, которые представляют собой R-деревья.

Вопрос: Можно ли создать такое R-дерево у которого в каждом узле будут хранится данные, близкие друг от друга по расстоянию (расстояние можно будет задавать). Степень дерева будет равна максимально возможному числу зума карты ( у гугла например 20). Таким образом такое дерево будет автоматом кластеризовано, то есть когда я захочу взять маркеры при зуме 10, то мне будут передаваться словари такого вида [номер кластера(узла), кол-во элементов, координаты центра кластера(узла)].

Возможно уже существует такое решение, если да, то подскажите пожалуйста? Либо может есть более продвинутые реализации кластеризации на уровне БД?

Скорее всего речь идет о ка-мерном дереве для размерности 2

https://en.wikipedia.org/wiki/K-d_tree
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39005509
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ClosiusДобрый день.

Меня интересует вопрос кластеризации геопространственных данных. Конкретно точек.
И у меня в голове сидит мысль по этому поводу.

В PostGIS существуют пространсвенные индексы, которые представляют собой R-деревья.

Вопрос: Можно ли создать такое R-дерево у которого в каждом узле будут хранится данные, близкие друг от друга по расстоянию (расстояние можно будет задавать). Степень дерева будет равна максимально возможному числу зума карты ( у гугла например 20). Таким образом такое дерево будет автоматом кластеризовано, то есть когда я захочу взять маркеры при зуме 10, то мне будут передаваться словари такого вида [номер кластера(узла), кол-во элементов, координаты центра кластера(узла)].

Возможно уже существует такое решение, если да, то подскажите пожалуйста? Либо может есть более продвинутые реализации кластеризации на уровне БД?
для чего все это?
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39005705
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Warstone,

Нету там такого. Там есть классические B и R деревья и GiST. Правда там есть команда CLUSTER, но это что-то другое.

Sergunka,

Да! Квадро дерево еще лучше.

bochkov,

Кластеризация геоданных на стороне сервера.

Допустим у меня сто миллионов точек по всему миру. На клиенте (мобильное приложение) пользователь хочет посмотреть где находятся эти точки и он делает самый большой зум (на весь мир). При этом по классическому варианту (кластеризация на клиенте) пользователю надо выслать все маркеры. Это очень затратно.
Вариант два: кластеризация по запросу на сервере. При этом каждый запрос должен сопровождаться кластеризацией, хоть и на сервере. То есть фактически надо формировать cR или Kd дерево.
Вариант третий, мой: Мы держим такое дерево на уровне БД. Обновление такого дерева (добавление/удаление точек) происходит например раз в 10 минут в фоне. То есть клиенту приходит примерная информация, что в таком то месте есть примерно столько то маркеров.

При приближении идет кластеризация на клиенте.
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39005945
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для этого готовятся разные слои под разные зумы,
при чем тут кластеризация
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39005957
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Closius,

KNN поиск хоть как-то может помочь?
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39006001
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно сделать опорные таблицы для каждого зума
или одну таблицу одна колонка содержит полигон,
другая уровень зума,
геоданные в виде сетки, каждая геометрия это полигон,
при запросе нужную сетку джоиним с геометриями из
из таблицы с вашими данными
данные группируем и предоставляем клиенту количество точек...
ну и что там еще нужно предоставлять
вот вам и индекс используется
и ... кажись то что вам нужно
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39006361
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov,

Не совсем понял. Это реализация поиска ближайшего соседа?

bochkov,

Не совсем понял..
а как при этом осуществляются операции добавления и удаления точек?
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39006372
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
удаление добавление точек,
происходит обычным образом
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39006401
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,

Я не понимаю вашего подхода. Как будет происходить выдача кластеризованных маркеров?
Допустим у меня кучка маркеров, мне надо выдать не эту кучку, а один марке в центре этой кучки + кол-во маркеров в этом кластере.
При этом еще могут быть маркеры не в кучке, их надо выдать отдельно. Либо может быть много кучек...

Я сейчас смотрю в сторону SP-GiST индексов. У них есть реализация Quadtree. Только вот чето они не создаются...
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39006404
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто вы будете выдавать сетку,
квадраты, на которые разбита карта,
и информацию по каждому квадрату,
при этом размеры квадратов зависят от зума карты
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39006425
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,

Кажется понял вас, интересная мысль, спасибо! То есть мне надо весь мир разбить на квадраты для каждого зума? Или есть возможность делать запись в опорную таблицу, например я добавил маркер и он автоматом добавился на все уровни зума (пересекся с некоторыми квадартами). А эти квадраты должны физически существовать, чтобы сделать операцию пересечения или как?
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39006585
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Closius,
да правильно поняли,
опорная таблица с квадратами создается и заполняется один раз,
таблица с вашими данными живет свей жизнью,
т.е. просто поддерживайте ее актуальность
а вот для вывода на клиент эти таблицы нужно джоинить
...INNER JOIN ON St_within(staticgrid.boxgeom,datatable.geom)... могу параметры местами перепутаь, под рукой доки нет,
ну и таблицу с квадратами надо заполнить самому и индекс сделать надо
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39006751
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,

Спасибо!

Таблица с квадратами будет просто гигантских размеров на мелких зумах... На сколько я знаю весь мир итак покрыт квадратами ( http://gis-lab.info/qa/gentle-intro-gis-7.html http://gpsmapsearch.com/osm/nom.htm ) и PostGIS скорее всего умеет их определять.. Попробую покопаю в этом направлении...
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39006762
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Closius,

И всеравно.. Тут запрос будет тяжелый.. С деревом было бы на много легче. Хотя тут фактически тоже будет дерево. Но блин не получается построить sp-gist индекс, а он какраз для этих целей..
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39006780
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,

Хотя.. площадь земли 510072 км^2. Если брать минимальный уровень кластеризации на сервере 10х10 км, то 510072/100 = 5100.72 квадратов. В принципе это не много элементов. Думаю поиск по ним (при индексации) будет не сильно много времени занимать. Как вы думаете?
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39006783
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,

К тому же северный и южный полюс я кластеризовать не буду)
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39006791
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин ошибся.. 510072000 км^2... А это уже очень много 5100720 квадратов.... И что делать?
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39006946
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ClosiusИ что делать?
я не знаю, все зависит от того что вы уже сделали,
какой у вас клиент?
как данные получаете с сервера?
какие инструменты используете?
что то мне подсказывает, что дела у вас пока на уровне теории
еще раз повторю сетка делается,
для каждого зума для всего земного шара,
рассчитайте сколько допустимо квадратов на экране и сколько их может поместиться
иннер джоин пустые квадраты в результат запроса не пустит,
все можно сделать аккуратно и работать будет быстро
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39007106
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,

Все уже придумал) Есть такая вещь как MGRS ( https://en.wikipedia.org/wiki/Military_grid_reference_system). Это некий стандарт, который делит весь мир на зоны с минимальным разрешением 1 м.
Есть конверторы ( для питона например https://github.com/hobu/mgrs ).

То есть я просто в маркер записываю значения его MGRS кода. И когда мне надо выдать какой-то зум я делаю выборку в зависимости от обстоятельств. То есть если уровень самый большой то делаю запрос всех маркеров по UTM (первые 3 знака), подсчитываю в каждом UTM кол-во и выдаю кластеры с центрами по UTM. Пока еще это конкретно не продумал..

Вопрос такой: Есть код '37UDB1366973707'. Мне его как лучше хранить, целиком в одном поле или в разных полях: L1=37D; L2=DB; L3=1,7; ... ?

Просто я относительно новичек в БД и не очень представляю как быстрее сделать выборку будет.
...
Рейтинг: 0 / 0
PostGIS кластеризация
    #39007115
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / PostGIS кластеризация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]