Одна из моих задач для работы - разделить посылки на группы. Эти группы будут использоваться агентами для общения с владельцами недвижимости. Цель состоит в том, чтобы упростить работу агента, сгруппировав участки, которые находятся рядом друг с другом, а также разделить участки на равные числа, чтобы работа распределялась равномерно. Количество агентов может колебаться от пары до 10+.
В настоящее время я выполняю эту задачу вручную, но хотел бы автоматизировать процесс, если это вообще возможно. Я исследовал различные инструменты ArcGIS, но ни один из них не подходит мне. Я попробовал скрипт (на python), который использует near_analysis
и выбирает многоугольники, но он довольно случайный и требует вечного времени для получения полукорректного результата, который потом занимает больше времени, чем если бы я делал все вручную с самого начала.
Есть ли надежный способ автоматизировать эту задачу?
Пример результатов (надеюсь, без деления мы видим желтым цветом):
источник
Ответы:
Оригинальный набор:
Создайте его псевдокопию (перетаскиванием CNTRL в оглавлении) и сделайте пространственное соединение один ко многим с клоном. В этом случае я использовал расстояние 500м. Выходная таблица:
Удалить записи из этой таблицы, где PAR_ID = PAR_ID_1 - легко.
Выполните итерацию по таблице и удалите записи, где (PAR_ID, PAR_ID_1) = (PAR_ID_1, PAR_ID) любой записи над ней. Не так просто, используйте acrpy.
Вычислить центроиды водосбора (UniqID = PAR_ID). Это узлы или сеть. Соедините их линиями, используя таблицу пространственного соединения. Это отдельная тема, наверняка освещенная где-то на этом форуме.
В приведенном ниже сценарии предполагается, что таблица узлов выглядит следующим образом:
где MUID получен из посылок, P2013 - это поле для подведения итогов. В этом случае = 1 только для подсчета. [rcvnode] - вывод сценария для сохранения идентификатора группы, равного NODEREC первого узла в определенной группе / кластере.
Связывает структуру таблицы с выделенными важными полями
Times хранит вес ссылки / края, то есть стоимость перемещения от узла к узлу. В этом случае равен 1, так что стоимость проезда всех соседей одинакова. [fi] и [ti] - последовательный номер подключенных узлов. Чтобы заполнить эту таблицу, поищите в этом форуме информацию о том, как назначать узлы и ссылки на них.
Скрипт настроен под мой рабочий стол mxd. Должен быть изменен, жестко запрограммирован с указанием имен полей и источников:
НАЙТИ СЛОЙ СЛОЯ
ПОЛУЧИТЬ ССЫЛКИ СЛОЯ
Пример вывода для 6 групп:
Вам понадобится пакет сайта NETWORKX http://networkx.github.io/documentation/development/install.html
Скрипт принимает необходимое количество кластеров в качестве параметра (6 в примере выше). Он использует таблицы узлов и ссылок для построения графа с равным весом / расстоянием ребер перемещения (Times = 1). Он учитывает объединение всех узлов на 2 и вычисляет общее количество [P2013] в двух группах соседей. Когда требуемое соотношение достигнуто, например, (6-1) / 1 на первой итерации, продолжается с уменьшенным целевым отношением, т.е. 4 и т. Д. До 1. Начальные точки имеют огромное значение, поэтому убедитесь, что ваши «конечные» узлы расположены сверху вашей таблицы узлов (сортировка?) Смотрите первые 3 группы в примере вывода. Это помогает избежать «обрезки веток» на каждой следующей итерации.
Настройка скрипта для работы с mxd:
источник
Вы должны использовать инструмент «Групповой анализ» для достижения своей цели. Этот инструмент является отличным инструментом из набора инструментов «пространственная статистика», как указывал @phloem. Однако вы должны точно настроить инструмент для адаптации к вашим данным и проблемам. Я создал похожий сценарий, подобный тому, который вы опубликовали, и получил ответ, близкий к вашей цели.
Подсказка: используя ArcGIS 10.2, когда я запускал инструмент, он жаловался на отсутствующий пакет python, «шестерка». Поэтому убедитесь , что он установлен первой Ссылка
шаги:
Вы полевой калькулятор, чтобы назначить 1 этому полю для всех строк. просто измените одну строку на 2.
Установите параметры инструмента «Групповой анализ» следующим образом:
Попробуйте изменить параметр «Количество соседей» в соответствии с вашими потребностями.
Снимки результата:
источник
в основном вам нужен метод кластеризации одинакового размера, чтобы вы могли искать по этим ключевым словам в сети. Для меня есть хороший ответ на stats.SE с реализацией Python в одном из ответов. Если вы знакомы с arcpy, вы сможете использовать его со своими данными.
Сначала вам нужно вычислить X и Y центроидов ваших полигонов, затем вы можете ввести эти координаты в сценарий и обновить их таблицу атрибутов, используя курсор .da.
источник
Привет, у меня была такая же проблема, как и раньше, поэтому я дал ее, хотя, никогда не начинал с другой, это только на стороне thoery, я думал
ВХОДНАЯ ФОРМА
я думал, что вы можете создать рыболовную сеть на входной форме
рыболовная сеть с пересечением вашей входной формы будет затем
Затем вы можете рассчитать площадь этих участков внутри вновь обработанного многоугольника.
В начале вашего скрипта требуется область ввода полигона / n-го количества равных размеров
Тогда вам понадобится способ связать посылки, чтобы они знали о тех, которые ограничены.
Тогда вы могли бы пройти курсором строки суммирования посылок
Правила бытия
* Он разделяет границу с последним летом * Он не суммируется * После того, как он превысит значение, рассчитанное как равную площадь, он отступит назад, и это будет группа * Процесс начнется заново * Последняя группа может быть сумма отправленных посылок
я думаю, что установление отношений между участками может быть сложной задачей, но как только это будет сделано, я думаю, что можно было бы автоматизировать это
источник
Я считаю, что расширение, которое вы ищете, это район. Это обычно используется для выборов, но так же как для равных территорий привилегии размера. (Размер не обязательно означает для области, это может быть любая демография)
http://www.esri.com/software/arcgis/extensions/districting
http://help.arcgis.com/en/redistricting/pdf/Districting_for_ArcGIS_Help.pdf
источник
Это мое решение для точечных событий. Никаких гарантий, это всегда будет работать ...
источник
Сначала вам нужно будет создать набор сетевых данных, используя ваши улицы. Я попробовал этот предложенный метод, и до сих пор мне больше повезло, делая то же самое с Группировкой (шаг 3), используя координаты X, Y и k-средних для полей ввода (не идеально, но быстрее и ближе к тому, что я есть). необходимости). Я открыт для других комментариев и отзывов.
источник