Una de mis tareas para el trabajo es dividir las parcelas en grupos. Los agentes utilizarán estos grupos para hablar con los propietarios. El objetivo es facilitar el trabajo del agente mediante la agrupación de parcelas cercanas entre sí, así como dividir las parcelas en números iguales para que el trabajo se distribuya de manera uniforme. El número de agentes puede fluctuar de una pareja a más de 10.
Actualmente realizo esta tarea manualmente, pero me gustaría automatizar el proceso si es posible. He explorado varias herramientas de ArcGIS, pero ninguna parece satisfacer mis necesidades. Probé un script (en Python) que utiliza near_analysis
y selecciona polígonos, pero es bastante aleatorio y lleva una eternidad lograr un resultado semicorrecto que luego me lleva más tiempo solucionarlo que si hubiera hecho todo manualmente desde el principio.
¿Existe un método confiable para automatizar esta tarea?
Ejemplo de resultados (con suerte sin la división que vemos en amarillo):
fuente
Respuestas:
Conjunto original:
Cree una pseudo-copia (CNTRL-arrastre en TOC) de ella y haga una unión espacial de uno a muchos con clon. En este caso utilicé la distancia 500m. Tabla de salida:
Eliminar registros de esta tabla donde PAR_ID = PAR_ID_1 - fácil.
Itere a través de la tabla y elimine los registros donde (PAR_ID, PAR_ID_1) = (PAR_ID_1, PAR_ID) de cualquier registro que se encuentre encima. No es tan fácil, usa acrpy.
Calcule los centroides de captación (UniqID = PAR_ID). Son nodos o red. Conéctelos por líneas usando la tabla de unión espacial. Este es un tema separado seguramente cubierto en algún lugar de este foro.
El siguiente script asume que la tabla de nodos se ve así:
donde MUID vino de las parcelas, P2013 es un campo para resumir. En este caso = 1 solo para contar. [rcvnode]: salida del script para almacenar la ID de grupo igual a NODEREC del primer nodo en el grupo / clúster definido.
Estructura de la tabla de enlaces con campos importantes resaltados
Times almacena el peso del enlace / borde, es decir, el costo de viaje de un nodo a otro. Igual 1 en este caso para que el costo de viaje a todos los vecinos sea el mismo. [fi] y [ti] son un número secuencial de nodos conectados. Para completar esta tabla, busque en este foro cómo asignar desde y hacia nodos para vincular.
Script personalizado para mi propio workbench mxd. Tiene que ser modificado, codificado con su nombre de los campos y fuentes:
ENCONTRAR CAPA DE NODOS
OBTENER CAPA DE ENLACES
Ejemplo de salida para 6 grupos:
Necesitará el paquete de sitio NETWORKX http://networkx.github.io/documentation/development/install.html
El script toma el número requerido de clústeres como parámetro (6 en el ejemplo anterior). Utiliza tablas de nodos y enlaces para hacer un gráfico con igual peso / distancia de los bordes de viaje (Times = 1). Considera la combinación de todos los nodos por 2 y calcula el total de [P2013] en dos grupos de vecinos. Cuando se alcanza la proporción requerida, por ejemplo (6-1) / 1 en la primera iteración, continúa con el objetivo de proporción reducida, es decir, 4, etc. hasta 1. Los puntos de inicio son de gran importancia, así que asegúrese de que sus nodos 'finales' se encuentren en la parte superior de su tabla de nodos (¿ordenando?) Vea los primeros 3 grupos en la salida de ejemplo. Ayuda a evitar el 'corte de ramas' en cada próxima iteración.
Personalización de script para trabajar desde mxd:
fuente
Debe utilizar la herramienta "Análisis de grupo" para lograr su objetivo. Esta herramienta es una gran herramienta de la caja de herramientas "estadísticas espaciales" como señaló @phloem. Sin embargo, debe ajustar la herramienta para adaptarla a sus datos y problemas. Creé un escenario similar al que publicaste y obtuve la respuesta cercana a tu objetivo.
Sugerencia: Al usar ArcGIS 10.2, cuando ejecuté la herramienta, se quejó del paquete de python que faltaba, "seis". Así que asegúrese de tenerlo instalado primero Enlace
Pasos:
su calculadora de campo para asignar 1 a este campo para todas las filas. solo cambia una fila a 2.
Establezca los parámetros de la herramienta "Análisis de grupo" de esta manera:
intente cambiar el parámetro "Número de vecinos" para adaptarlo a sus necesidades.
Instantáneas de resultados:
fuente
básicamente desea un método de agrupación de igual tamaño, para poder buscar con estas palabras clave en la web. Para mí, hay una buena respuesta en estadísticas. SE con una implementación de Python en una de las respuestas. Si está familiarizado con arcpy, debería poder usarlo con sus datos.
Primero debe calcular la X e Y de los centroides de sus polígonos, luego puede ingresar estas coordenadas en el script y actualizar su tabla de atributos con un cursor .da.
fuente
Hola, tuve un problema similar a este antes, así que le di un poco, sin embargo, nunca comencé con otro, pero solo en el lado que estaba pensando
FORMA DE ENTRADA
Estaba pensando que podría crear una red de pesca en la forma de entrada
mallas con una intersección de su forma de entrada entonces
Luego puede calcular el área de estas parcelas dentro del polígono recién procesado
Al comienzo de su script, el área ingresó la cantidad de polígono / enésima cantidad de tamaños iguales deseados
Luego, necesitaría una forma de relacionar las parcelas para que sepan cuáles están bordeadas.
Entonces podrías pasar por un cursor de fila para resumir las parcelas
Reglas siendo
* Comparte un borde con el último verano * No se ha sumado * Una vez que supera el valor calculado como el área igual, retrocedería y esto sería un grupo * El proceso comenzaría de nuevo * El último grupo podría ser la suma de las parcelas sobrantes
Creo que establecer la relación entre las parcelas puede ser complicado, pero una vez hecho esto, creo que podría ser posible automatizarlo.
fuente
Creo que la extensión que estás buscando es restrictiva. Por lo general, se usa para elecciones, pero también para franquicias de igual tamaño. (El tamaño no significa necesariamente para el área, puede ser cualquier demografía)
http://www.esri.com/software/arcgis/extensions/districting
http://help.arcgis.com/en/redistricting/pdf/Districting_for_ArcGIS_Help.pdf
fuente
Esta es mi solución para eventos puntuales. No hay garantías de que siempre funcionará ...
fuente
Necesitará crear un conjunto de datos de red primero usando sus calles. He probado este método propuesto y hasta ahora he tenido más suerte haciendo lo mismo con Agrupación (paso 3) por sí mismo, usando coordenadas X, Y y k-medias para los campos de entrada (no perfecto, pero más rápido y más cercano a lo que soy) necesitando). Estoy abierto a otros comentarios y opiniones.
fuente