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

Определение кластеров группы точек.

Добавлено: 25 авг 2015, 09:58
andverh
Добрый день!
На входе есть таблица so2 в PostgreSQL с атрибутами LON, LAT, PRATA(концентрация от 0 до 15).
Изображение
На выходе необходимо получить кластеры точек объединенных по геометрии. То есть для данного рисунка результатом является два кластера:
1 кластер: группа точек которая расположена выше,
2 кластер: группа точек, которая расположена ниже.

Таблиц много, естественно среди них может быть три кластера точек и т.д., а также один кластер (то есть все точки). В таблицах все точки равноудалены друг от друга.

Подскажите, каким инструментом(-ми) можно воспользоваться для выделения таких кластеров?

P.S.
Вот еще пример таблицы PostgreSQL
Изображение

Re: Определение кластеров группы точек.

Добавлено: 07 сен 2015, 23:34
Boris
Раз никто не ответил, то видимо без программирования тут не обойтись. Если нет специальной функции "кластеризации" в языке, то это задача для растровой ГИС, на что и намекает регулярный характер рисунка точек. Там для такого объединения должна быть функция, не вспомню как называется по английски, которая объединяет точки по заданному значению между ними.
Решения задачи непосредственно на векторных данных, следует от точек прейти к полигонам, в частности к буферам. Задача решается в четыре хода:
1. установить доверительную границу, при попадании в которую точки считаются прилегающими друг к другу.
2. Для всех точек построить буфер в (половину этого расстояния+10%). Объединить отдельные буфера в один. (В Mapinfo - это выполняется за одну операцию.). Получиться многополигонный регион.
3. Разделить полигон на отдельные не пересекающиеся полигоны.
4. Построить буфер с отрицательной величиной в половину доверительного расстояния между точками. 10% оставим, что бы крайние точки точно оказались внутри полигонов.
Вот и все. Кластеризация закончена. Внутри каждого полигона будут только его точки.
Ну, а выбрать точки внутри полигона, это уже любая ГИС или ГИС-расширение SQL должны уметь.

Re: Определение кластеров группы точек.

Добавлено: 08 сен 2015, 02:04
andverh
Спасибо, это то, что я хотел услышать, пошел тренироваться. Из инструментов использую Python (Fiona, Shapely).

Re: Определение кластеров группы точек.

Добавлено: 08 сен 2015, 06:50
trir

Re: Определение кластеров группы точек.

Добавлено: 08 сен 2015, 06:52
gamm
расскажите пожалуйста, зачем вы создаете искусственные трудности, для тренировки?

У вас же явно был исходно растр, на котором идентификация объектов (связных областей) делается одной командой, а потом можно писать готовые ID в базу

Re: Определение кластеров группы точек.

Добавлено: 08 сен 2015, 09:02
andverh
Действительно, исходно у меня есть растр(ры) в формате hdf5. Из них мне не сложно выделять те самые кластеры, и затем складывать их в базу. Но часть этих растров утеряна, зато она векторизована в PostgreSQL. Собственно поэтому придется делать данную работу в векторном формате. Вопрос можно считать закрытым, если кому интересно, могу выложить потом скрипт на Python.

P.S. Честно сказать мне показалось странным отсутствие такого функционала в ГИС-ах. Даже в PostgreSQL приходится отдельно устанавливать для этого модуль kmeans (спасибо товарищу trir).

Re: Определение кластеров группы точек.

Добавлено: 08 сен 2015, 09:05
Александр Мурый
andverh писал(а): P.S. Честно сказать мне показалось странным отсутствие такого функционала в ГИС-ах. Даже в PostgreSQL приходится отдельно устанавливать для этого модуль kmeans (спасибо товарищу trir).
Может быть, это потому, что в обычных ГИС всегда можно растеризовать вектор и работать уже с растром?

Re: Определение кластеров группы точек.

Добавлено: 08 сен 2015, 12:32
gamm
andverh писал(а):P.S. Честно сказать мне показалось странным отсутствие такого функционала в ГИС-ах.
этот функционал к собственно ГИС отношения не имеет, это PPA (Point Pattern Analysis). И использовать для этой задачки k-means не есть гут, поскольку можно получить немного не то, чего ожидается.