У меня есть класс точечных объектов, представляющий офисы всех работодателей в определенной отрасли. Класс пространственных объектов имеет атрибут для хранения количества сотрудников, работающих в каждом офисе. Кто-то попросил использовать эти данные, пространственно объединенные с наименьшей возможной географической единицей - в данном случае - блоки переписи. Тем не менее, соглашение о конфиденциальности предотвращает выпуск данных как есть. Вместо этого оно должно быть подавлено, чтобы соответствовать двум критериям:
- Любой полигон должен содержать не менее 3 работодателей (баллов);
- Не более 80% от общей занятости в пределах многоугольника может быть у одного работодателя.
Я успешно написал сценарий, который пространственно объединяет пункты с блоками переписи, сохраняя сумму и максимальную занятость в каждом. Каждый, который не соответствует критериям подавления, помечается. (Полигоны, не содержащие точек, не помечаются, поскольку нет данных для подавления.) Затем я проверяю каждую группу блоков, чтобы увидеть, содержатся ли в ней какие-либо помеченные блоки. Группы блоков, содержащие только не отмеченные блоки, затем заменяются блоками. Полученный класс пространственных объектов затем проверяется на соответствие критериям подавления, чтобы проверить, адекватно ли подавили данные группы блоков.
Тот же процесс повторяется для трактов, и у меня остается набор данных, состоящий из трактов (некоторые помечены, а некоторые нет), групп блоков и блоков (все не помечены). Однако следующим шагом в географической иерархии является округ, который бесполезен для лица, запрашивающего эти данные.
Мой вопрос, таким образом, заключается в следующем: существуют ли общепринятые методы объединения полигонов в максимально возможное количество групп, чтобы все они соответствовали некоторым минимальным критериям?
Вот некоторые правила, которые я хотел бы применить к агрегации:
- Когда это возможно, помеченные трактаты следует объединять только с другими помеченными трактатами;
- Для помеченных Трактов, которые не соприкасаются с какими-либо другими (или изолированными группами, которые все еще не соответствуют критериям), они могут быть объединены с Трактами, которые уже соответствуют критериям, хотя могут быть Тракты без работодателей между ними, которые также будут должны быть включены.
- Я хотел бы сохранить границы округов нетронутыми, за исключением случаев, когда это абсолютно невозможно (и я предполагаю сделать это путем разделения входных объектов на соответствующие округа перед их обработкой).
- Решение должно быть на языке Python с использованием инструментов ArcGIS или библиотек Python с открытым исходным кодом.
В идеале, кто-то может указать мне на существующие средства реализации этой агрегации. Если нет, то я с удовольствием сам кодирую алгоритм, хотя список конкретных шагов / инструментов будет высоко ценится. Эта проблема поражает меня как особый случай перераспределения (с несмежными полигонами), и с этой целью я изучил использование алгоритмов регионализации PySAL , хотя мне не ясно, как проверить максимальный процент работодателя от общего числа сотрудников, используя эти ,