Як знайти кластери з 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.