Як знайти кластери з N точок в межах відстані X за допомогою ArcGIS Desktop?


12

Ми спробували два методи кластерного аналізу:

... але не відповідає нашій специфікації, яка має ці 3 параметри:

  • набір функцій точки
  • N балів у кластері
  • Діапазон відстаней X, щоб заглянути

Наприклад, "знайдіть мені точки, де кожен кластер має 10 балів у межах 50 метрів", або щось для цього.

У ArcGIS 10 є два інструменти, які я зв'язав вище, але ні один з них не вирішує N точок у частині кластера.

Чи можуть наші вимоги відповідати іншим інструментам в ArcGIS? Чи називається те, що я називаю кластерним аналізом, як певний тип кластеризації?

У нас була версія цього в іншому додатку, але я дуже хотів використовувати інструменти в ArcGIS.


"обіцяв клієнтові без мого відома" ... Я відчуваю твій біль. Чи було б рішення аркобектів прийнятним?
Кірк Куйкендалл

Чи не вдалося б створити кластери, а потім обробити ті, які не відповідають вашим критеріям? Тобто (і я запитую через відсутність досвіду цього аналізу), чи зміняться кластери, якби їм було надано цей третій критерій перед аналізом?
Нафан

@Kirk Kuykendall. ArcObjects може виявитися неможливим, оскільки його потрібно виставити як послугу геообробки через сервер arcgis 10.
Хат

Чи повинен кластер базуватися на колі, чи він може бути прямокутним. Створити хеш з координат таким чином, щоб хеш-код для всіх точок, які знаходяться в одному полі 50х50, був однаковим, просто.
Кірк Куйкендалл

@ Кірк - я повинен бути колом, я думаю.
Хат

Відповіді:


10

Спробуйте використовувати інструмент Buffer для буферування точок до допуску, розчинення, щоб створити окремі багатокутники для кожного кластеру, а потім використовуйте приєднання для підрахунку кількості балів у кластері.

Потім використовуйте співвідношення між площею кластера та кількістю точок, щоб застосувати ваші параметри.


+1 Цей підхід повинен працювати, але я не бачу, куди входить рішення.
whuber

площа / кількість дає міру щільності в кластері. Це допоможе усунути лінійні ланцюги точок, які не слід розглядати як кластери.
Метью Снейп

2
Гаразд, але постановка проблеми цього не вимагає. Він запитує лише "10 балів у межах 50 метрів", наприклад. Якщо точки буфера на 50/2 = 25 метрів, то будь-яке місце, де є 10 і більше перекриттів, вважається центром такого кластера. Готово!
whuber

Коли ви маєте на увазі "приєднатися", ви спеціально маєте на увазі просторове з'єднання.
Хат

2

Це можна досягти за допомогою ArcObjects без особливих труднощів.

Створіть картопологію та додайте до неї точковий клас класу. Встановіть толерантність кластерів на основі відстані кластера (50) та побудуйте кеш .

Проведіть цикл через кожен вузол у maptopology.cache.nodes . Якщо ITopologyNode.Parents.Count> 10, тоді робіть все, що вам потрібно зробити.

Я зробив щось подібне для користувацького шару, який малює кожну точку кластера символом, колір якого ґрунтується на кількості точкових особливостей кластера. Продуктивність була прийнятною, оскільки функції зберігаються в пам'яті - відновлення кешу - це дорога частина.

Схожий на код, розміщений тут .


Чи можливо це в python?
Хат

Я не думаю. Не те, що знайоме з arcobjects sdk і не зовсім впевнене в ліцензійних вимогах для його використання.
Хат

2

Спробуйте перейти до першої точки, а потім створити рекурсивну функцію, яка перевіряє точки на відстані і виконує ту саму операцію на тій, яка шукає точки на відстані, і виконує ту саму операцію на тому і т.д.

Я щойно вирішив подібне питання, в тому, що мені довелося знайти набір точок, що відповідають певному пункту; Я побудував рекурсивну функцію, щоб визначити, чи були точки, з'єднані в межах 8 комірок (N, NW, W, SW, S, SE, E, NE), і назвав ту саму функцію для цієї точки. Якщо повернутий список містив x точок, я збираю навколо себе багатокутник.


1

Я не маю ніякої інформації про використання ArcGIS, оскільки я використовую лише програмне забезпечення OpenSource. Але я думаю, що це буде досягнуто, з Openlayers. Приклад стратегії кластера, який ви можете знайти тут: http://openlayers.org/dev/examples/strategy-cluster.html


-1 ОП просить арггізського способу зробити це. Надання способу OpenLayers насправді не допоможе.
Nathan W

2
Але підхід до відкритих верств не міг допомогти йому з'ясувати, як це робиться для його впровадження в аргументи ??
1amtoo1337

1
Я погоджуюся з коментарем і вам подобається ваш підхід: часто нам доводиться шукати поза нашою зоною комфорту ідеї та натхнення. Але я вважаю вашу відповідь більш корисною, якби ви могли пояснити, як цей приклад пов'язаний з конкретним запитанням, яке тут задається. Хоча питання та приклад поділяють слово "кластер", не видно, що вони вживають його в одному сенсі або вирішують достатньо схожі проблеми.
whuber

Я підтримав це, коли шукав відкритий спосіб цього зробити, і хоча, навіть після архівних розшуків, я часто виявляв, що рішення в інших системах ГІС може допомогти вам знайти рішення у вашому програмному забезпеченні за вибором, використовуючи інструменти певним чином. це не є загальним явищем.
ДжорджК
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.