Идентификация кластеров в векторных точечных данных с использованием QGIS?

34

У меня есть векторный набор данных сельских широкополосных точек данных (как быстро и т. Д.), И я хотел бы изучить, существуют ли кластеры точек с похожими характеристиками, и построить окружающие их многоугольники.

Например, у меня может быть 45 000 точек в одном наборе данных PostGIS, распределенном по ландшафту. Я хочу идентифицировать кластеры, которые лежат в пределах x км друг от друга и где скорость ниже y кбит / с, и производить выпуклые корпуса для каждого подходящего кластера.

Есть ли простой способ сделать это в QGIS, например?

Адриан
источник
3
Возможно, вы захотите обратить внимание на характер широкополосного доступа. Высокие скорости будут происходить в городских районах; промышленные конгломераты; излучение вдоль дорог от СО, модемов и других волоконно-оптических / кабельных / DSL-инфраструктур; и вещание с определенных вышек сотовой связи (в зависимости от вашего определения «широкополосный»). Таким образом, высокие скорости будут казаться кластерными, а более низкие скорости будут выглядеть как зазоры в кластерах. В частности, маловероятно, что выпуклые корпуса будут даже достойным описанием низкоскоростных регионов. Было бы хорошо узнать, как вы собираетесь интерпретировать любые «кластеры», которые вы найдете.
whuber
Спасибо за помощь. Я изучаю более сельские районы, где архитектура проводного широкополосного доступа может создавать более необычные ситуации из-за распределения уличных шкафов и линий прямого питания на столбах, а также, например, из-за географии районов. В результате вы находите кластеры, которые могут быть полезной отправной точкой для построения локальных решений и могут быть важным шагом в разработке стратегии. На самом деле вы даже можете найти их в городских районах, часто из-за промышленного наследия или таких вещей, как железнодорожные пути и реки, которые трудно пересечь.
Адриан

Ответы:

15

Я соединил биты из нескольких предложений и добавил немного своего собственного и нашел решение, которое хорошо работает для меня - и все изнутри QGis!

Сначала я запустил PostGis SELECT, чтобы найти точки, которые имеют правильные общие атрибуты и находятся в пределах x км друг от друга:

ВЫБЕРИТЕ DISTINCT s1.postcode, s1.the_geom, s1.gid ОТ broadband_data AS s1 ПРИСОЕДИНЯЙТЕСЬ к broadband_data AS s2 ON ST_DWithin (s1.the_geom, s2.the_geom, 1000) ГДЕ s1.postcode! = S2.postcode AND s1.fastest_broadband <= 2000

(Практически прямо из очень хорошей книги Мэннинга « PostGis in Action» , только добавление самостоятельного соединения)

Затем я загрузил плагин ManageR от Carson Farmer и импортировал слой. Отсюда я последовал за предложенный процесс кластеризации РАМ здесь , и экспортировать результат в файл формы, на которой Выпуклые шелуха были рассчитаны в секундах , используя fTools (Carson делает обойти!).

Адриан
источник
1-е издание PostGIS в действии вышло из печати. Вот ссылка на 2-е издание manning.com/books/postgis-in-action-second-edition и ссылка на первую бесплатную главу manning-content.s3.amazonaws.com/download/a/…, которая является отлично
подходит
8

Хотя это не решение QGIS, я лично выбрал бы некоторый предварительный анализ с использованием SaTScan . Это быстро, хорошо документировано и широко применяется, поэтому у вас не должно возникнуть проблем с запуском. 45k очков может потребовать некоторого объема ОЗУ.

Я не уверен, что он может читать напрямую из Postgres, но легко импортирует из dbf и текстовых файлов.

Результаты анализа могут быть легко прочитаны обратно в Postgres или QGIS. Вы можете решить искать круговые скопления или эллипсы (может быть полезно использовать, если в ваших данных есть определенный тип поселений, например, длинные города / деревни в долинах и т. Д.). Затем вы можете создавать полигоны или эллипсы или отображать только те места, которые являются членами кластеров.

Для быстрого просмотра результатов в Google Планета Земля вы также можете использовать инструмент преобразования SaTScan в Google Планета Земля NAACCR .

Важно отметить, что если вы решите запустить симуляции Монте-Карло (думаю, минимум 99), вы также сможете рассказать кое-что о статистической значимости ваших кластеров. Интерпретация и обоснование этих кластеров будет еще одной проблемой, поскольку она обсуждалась в пространственных науках, по крайней мере, в течение последних двух десятилетий (я думаю;).

Вы можете попытаться запустить чисто пространственный анализ в поисках кластеров с высокими, низкими или высокими значениями. Если у вас есть некоторые временные атрибуты в ваших данных * ежедневно, еженедельные агрегации), то я думаю, что было бы действительно интересно запустить некоторые модели пространства-времени.

Радек
источник
2
Выглядит хорошо - Хороший ответ
Mapperz
5

SciPy имеет пакет кластеризации (для python), вы можете использовать его в консоли python, написать простой плагин для этого или использовать PL / python внутри postgis.

http://docs.scipy.org/doc/scipy/reference/cluster.html

После анализа просто используйте f-инструменты для создания выпуклых оболочек.

Pablo
источник
Я простой пользователь с очень небольшим опытом работы с Python, но я посмотрю - я знаю, что мне нужно учиться!
Адриан
учитывает ли кластеризация SciPy пространственные отношения между точками?
Радек
1
Вы просто добавляете еще две ковариаты для координат x и y вашей точки.
Хосе
5

Там есть похожий пример того , что вы хотите сделать с помощью R и GRASS здесь . В качестве альтернативы вы можете использовать инструменты кластеризации scipy, как это было предложено, а затем выполнить вычисления выпуклой оболочки, используя этот метод .

Хосе
источник
3

Вы можете попробовать плагин Ftools. Vector> Geoprocessing Tools> Convex Hulls.

Существует опция для Create convex hulls based on input field, параметр поля ввода должен исходить из атрибутов ваших точек ввода.

Манинг
источник
Спасибо за помощь. Бит выпуклой оболочки создаст многоугольники, но он не определяет, существуют ли кластеры или где они могут быть. Мне бы очень хотелось сначала найти способ сопоставления точек с похожими характеристиками в пределах x км друг от друга. Я предполагаю, что мне нужно запустить какой-нибудь скрипт, который однозначно идентифицирует существование кластеров и обновляет дополнительное поле в таблице postgis для членов каждого кластера. Например, создание триангуляции Делоне и отфильтровывание всех точек, где стороны треугольников длиннее, чем х км, но я понятия не имею, как это сделать
Адриан