У меня есть шейп-файл с 16 400 полигонами. Каждый полигон показывает распространение вида птиц на весь мир.
Теперь я должен посчитать перекрывающиеся полигоны. Я попробовал это с объединением и распадением (считайте объединение), но объединение не работает для очень многих полигонов.
Затем я попытался обрезать континенты, но это также не работает из-за огромного количества полигонов. Более того, я попробовал этот метод , также безуспешно.
Поэтому я спрашиваю вас, есть ли способ подсчета перекрывающихся полигонов, если 16400 полигонов находятся в одном шейп-файле?
Я работаю с 10.0 и могу работать с 10.2. Решение ArcPy также прекрасно.
В данный момент я думаю о создании рыболовной сети и итерации по строкам shp с 16400 полигонами и записи 1 в поле значения ячейки рыболовной сети, если многоугольник находится в этой ячейке, а затем взять следующую строку (многоугольник) и если это также в числе ячеек ажурной сети +1.
Но я не знаю, является ли это хорошим решением и как его реализовать. Или я должен изучить R, чтобы использовать этот подход.
Результат: это должна быть форма, в которой у вас есть новые многоугольники из перекрывающихся и поле, где подсчитываются перекрытия.
Таким образом, в конце должен быть шейп-файл, где вы можете увидеть, сколько видов птиц найдено в одном и том же месте.
Ответы:
Я бы порекомендовал использовать инструмент Count Overlapping Features (Analysis) .
источник
Используя лексемы геометрии arcpy, вы можете попробовать что-то вроде этого:
Для приведенных выше примеров данных код вернет следующее число совпадений:
Код как есть будет возвращать счетчики только для тех многоугольников, у которых есть хотя бы одно перекрытие.
источник
Очень простой метод:
join_count
поля.источник
Я полагаю, вы пробовали этот метод: подсчитывать и растеризовывать перекрытия полигонов в ArcGIS Desktop?
16 400 полигонов не так много. Тем не менее, одним из возможных решений является простое регулярное пространственное соединение. В
ArcMap toolbox, > Analysis Tools -> Overlap -> Spatial Join
.Задайте для обоих объектов
target
иjoin
объектов один и тот же набор данных и укажите выходные данные. Оставьте остальные настройки.Через несколько секунд вы должны получить шейп-файл, который содержит столбец «количество соединений». Вычтите 1 из этого (как, очевидно, каждый объект должен пересекаться сам), и это должно быть количество «перекрытий» (фактически пересечений) для каждого многоугольника.
Я просто выполнил это на
источник
Я скачал и попробовал инструмент «Подсчет перекрывающихся полигонов». Это может работать, но это занимает очень много времени (вероятно, из-за размера файла, но мой входной FC имел только <5000 записей).
Пока я ждал запуска этого инструмента, я открыл еще одно окно ArcMap, и мне потребовалось всего несколько быстрых шагов, чтобы получить то, что я хотел. 1) Пространственное соединение - использование того же класса пространственных объектов, что и в объектах Target и Join, и выбор опции «Соединить один со многими». 2) Растворить - используя вывод последнего шага. Используйте «TARGET_FID» в качестве поля растворения, а для статистики вы можете СУММАТЬ поле «Join_Count» или СЧИТАТЬ поле «JOIN_FID». 3) В выходном файле из шага 2 используйте калькулятор поля, вычтите 1 из поля статистики («SUM_Join_Count» или «COUNT_JOIN_FID») - поскольку каждая функция пересекается сама.
Я предлагаю использовать этот метод над инструментом «Count Overlapping Polygon». Я начал запускать инструмент COP ~ за 5 минут до запуска этого метода Join-> Dissolve, и он дал мне результат с достаточным количеством времени, чтобы записать его еще до того, как инструмент «Count Overlapping Polygon» даже закончил.
Надеюсь это поможет!
источник