Tengo una clase de entidad de puntos que representa ubicaciones de oficinas de todos los empleadores en una industria determinada. La clase de entidad tiene un atributo para almacenar la cantidad de empleados que trabajan en cada oficina. Alguien ha solicitado utilizar estos datos, unidos espacialmente a la unidad geográfica más pequeña posible: bloques censales, en este caso. Sin embargo, un acuerdo de privacidad impide la divulgación de los datos tal cual. En cambio, debe suprimirse para cumplir con dos criterios:
- Cualquier polígono debe contener al menos 3 empleadores (puntos);
- No más del 80% del empleo total dentro de un polígono puede ser por un solo empleador.
He escrito con éxito un guión que une espacialmente los puntos a los bloques del censo, manteniendo la suma y el empleo máximo en cada uno. Cada uno que no cumple con los criterios de supresión está marcado. (Los polígonos que no contienen puntos no se marcan, ya que no hay datos para suprimir). Luego verifico cada Grupo de bloques para ver si hay Bloques marcados dentro de él. Los grupos de bloques que contienen solo bloques sin marcar se reemplazan por los bloques. La clase de entidades resultante se compara con los criterios de supresión, para verificar si los Grupos de bloques han suprimido adecuadamente los datos.
El mismo proceso se repite para Tracts, dejándome con un conjunto de datos que consta de Tracts (algunos marcados y otros no), Grupos de bloques y Bloques (todos sin marcar). Sin embargo, la siguiente progresión en la jerarquía geográfica es el condado, que no sirve para la persona que solicita estos datos.
Mi pregunta, entonces, es esta: ¿Existen métodos comúnmente aceptados para agregar polígonos en tantos grupos como sea posible, de modo que todos cumplan con algunos criterios mínimos?
Aquí hay algunas reglas que me gustaría aplicar a la agregación:
- Siempre que sea posible, los Tractos marcados solo deben agregarse con otros Tratados marcados;
- Para los Tratados marcados que no son contiguos con ningún otro (o agrupaciones aisladas que aún no cumplen con los criterios), se pueden unir con Tractos que ya cumplen con los criterios, aunque puede haber Tratados sin empleadores entre ellos que también Necesita ser incluido.
- Me gustaría mantener intactos los límites del condado a menos que sea absolutamente imposible (y anticipo hacerlo separando las características de las entradas en sus respectivos condados antes de procesarlas).
- La solución debe estar en Python, con el uso de herramientas ArcGIS o bibliotecas Python de código abierto.
Idealmente, alguien puede señalarme un medio existente para implementar esta agregación. Si no, estoy feliz de codificar el algoritmo yo mismo, aunque una lista de pasos / herramientas específicas sería muy apreciada. El problema me parece un caso especial de redistribución de distritos (con polígonos no contiguos), y con este fin he investigado el uso de los algoritmos de regionalización de PySAL , aunque no tengo claro cómo verificar el porcentaje máximo de empleadores que emplean estos empleados. .