Поиск кластеров из N точек на расстоянии X с помощью ArcGIS Desktop?

12

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

... но не соответствует нашей спецификации, которая имеет эти 3 параметра:

  • Набор точечных функций
  • N точек в кластере
  • Диапазон расстояний X, чтобы смотреть в

Например, «найди мне точки, где у каждого скопления есть 10 точек в пределах 50 метров» или что-то в этом роде.

ArcGIS 10 имеет два инструмента, которые я связал выше, но ни один из них, кажется, не обращается к N точкам в части кластера.

Могут ли наши требования соответствовать другим инструментам в ArcGIS? Является ли то, что я называю кластерным анализом, известным как определенный тип кластеризации?

У нас была версия этого в другом приложении, но я действительно хотел использовать инструменты в ArcGIS.

Спасли
источник
"обещал клиенту без моего ведома" ... я чувствую твою боль. Будет ли решение arcobjects приемлемым?
Кирк Куйкендалл
Разве невозможно создать кластеры, а затем обработать те, которые не соответствуют вашим критериям? То есть (и я спрашиваю из-за нехватки опыта в этом анализе), изменились бы кластеры, если бы им дали этот третий критерий перед анализом?
Натанус
@Kirk Kuykendall. ArcObjects может быть невозможен, так как он должен быть представлен как сервис геообработки через сервер arcgis 10.
Спасли
Должен ли кластер быть основан на круге, или он может быть прямоугольным? Создать хеш из координат так, чтобы хеш-код для всех точек в одном и том же поле 50x50 был одинаковым, легко.
Кирк Куйкендалл,
@ Кирк - я думаю, это должен быть круг.
Спасли

Ответы:

10

Попробуйте использовать инструмент Буфер для буферизации точек с допуском, распустите, чтобы создать отдельные полигоны для каждого кластера, а затем используйте объединение, чтобы подсчитать количество точек в кластере.

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

Мэтью Снейп
источник
+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.

1amtoo1337
источник
-1 ОП просит магический способ сделать это. Предоставление OpenLayers не очень поможет.
Натан W
2
Но подход openlayers не мог помочь ему узнать, как это делается для реализации его в arcgis ??
1amtoo1337
1
Я согласен с комментарием и мне нравится ваш подход: часто нам приходится искать идеи и вдохновение за пределами нашей зоны комфорта. Но я бы нашел ваш ответ более полезным, если бы вы могли объяснить, как этот пример связан с конкретным вопросом, заданным здесь. Хотя вопрос и пример имеют общее слово «кластер», не очевидно, что они используют его в том же смысле или решают достаточно похожие проблемы.
whuber
Я проголосовал за это, так как искал способ сделать это с открытым исходным кодом, и даже несмотря на то, что сообщение требовало arcgis, я часто обнаруживал, что решение в других ГИС-системах может помочь вам найти решение в выбранном вами программном обеспечении, используя его инструменты таким образом, это не распространено.
GeorgeC