Поиск кластеров из 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.


-1 ОП просит магический способ сделать это. Предоставление OpenLayers не очень поможет.
— Натан W

2
Но подход openlayers не мог помочь ему узнать, как это делается для реализации его в arcgis ??
— 1amtoo1337

1
Я согласен с комментарием и мне нравится ваш подход: часто нам приходится искать идеи и вдохновение за пределами нашей зоны комфорта. Но я бы нашел ваш ответ более полезным, если бы вы могли объяснить, как этот пример связан с конкретным вопросом, заданным здесь. Хотя вопрос и пример имеют общее слово «кластер», не очевидно, что они используют его в том же смысле или решают достаточно похожие проблемы.
— whuber

Я проголосовал за это, так как искал способ сделать это с открытым исходным кодом, и даже несмотря на то, что сообщение требовало arcgis, я часто обнаруживал, что решение в других ГИС-системах может помочь вам найти решение в выбранном вами программном обеспечении, используя его инструменты таким образом, это не распространено.
— GeorgeC
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.