6 votos

Cómo clúster de 9 vecinos puntos dentro de ArcGIS 10 veces?

Tengo un shapefile de 300 puntos que necesito para hacer grupos, cada uno de los cuales contendrá exactamente 9 puntos que están más cerca de los vecinos.

enter image description here

He probado el 'cerca' de la herramienta, que han sumado NEAR_FID y NEAR_DIST a la tabla de atributos, pero no podía usarlo para el grupo de 9 vecinos. También traté de 'análisis de agrupación de' herramienta, pero esto sólo hace 2 grupos en general con la variable número de miembros de cada momento.

enter image description here

Alguien tiene alguna idea mejor?

6voto

FelixIP Puntos 4035

Resultado de la técnica de clustering sugerido por @Albert se muestra con los colores de los puntos en la imagen de abajo. Salida dependerá en gran medida de orden físico de puntos en una clase de entidad. En algún momento se producirá en "islas", que se groupped en un muy dispersar a los "cluster", por ejemplo, puntos rojos en el grupo "C" a continuación. Observe que los puntos están marcados por sus FID.

El algoritmo que he descrito varias veces (ver mis comentarios a este post) negocia correctamente este problema, produciendo continuamente clusters. La salida muestra los colores de los rectángulos: enter image description here

La foto de abajo muestra el algoritmo aplicado a 297 puntos por 9 en los grupos:

enter image description here

ACTUALIZACIÓN:

Para producir el resultado anterior me calculada polígonos de Voronoi de puntos de interés y seguido los pasos descritos aquí. Tal vez usted puede hacer lo mismo y ver si te gusta salida.

Alternativamente: Llame a su puntos de NODOS en la tabla de contenido (shapefiles sólo!).

arcpy.AddGeometryAttributes_management("NODES")
arcpy.SpatialJoin_analysis("NODES", "NODES", "./links.shp", "JOIN_ONE_TO_MANY","INTERSECT", search_radius="1500 Meters")
arcpy.SelectLayerByAttribute_management("links",""""TARGET_FID" = "JOIN_FID"""")
arcpy.DeleteFeatures_management(in_features="links")
arcpy.AddField_management("links", "TIMES", "DOUBLE")
arcpy.CalculateField_management("links", "TIMES", "math.hypot( !POINT_X! - !POINT_X_1!, !POINT_Y!- !POINT_Y_1! )", ."PYTHON_9.3")
arcpy.AddField_management("NODES", "RCVNODE","LONG")
arcpy.AddField_management("NODES", "P2013","LONG")
arcpy.CalculateField_management("NODES", "P2013", "1")

Crear la herramienta como se muestra en la hipervínculos post y ejecutarlo. Comprobar los valores en el campo RCVNODE de NODOS, esto es un número de grupo asignado a sus puntos. Si la secuencia de comandos no significa que la distancia en la unión espacial es demasiado pequeño y tienes islas no conectado con el resto de la red. Aumentar la distancia.

Recuerde que cualquier solución es sólo una de las innumerables posibles soluciones. Si no te gusta intenta reordenar los nodos en la tabla.

Tenga en cuenta que con muy poco esfuerzo se puede visualizar los ENLACES de puntos en las líneas que conectan los NODOS:

enter image description here

2voto

Albert C Puntos 428

Como BIEN dijo, los grupos se diferencian dependiendo de la semilla a utilizar.

Usted puede hacer esto en Python y es relativamente fácil. Esta es la idea general, por supuesto, usted necesitará algunos bucles y contadores para asignar grupos.

  1. Crear una capa de memoria con todos sus puntos.
  2. Seleccione un punto de partida manualmente desde el conjunto de datos original, lo ideal es un punto en una esquina.
  3. Calcular su grupo (group = 1 hasta llegar a 9 repeticiones, entonces el grupo = grupo +1)
  4. Borrar el mismo ID de punto del punto seleccionado de la capa de memoria
  5. Encontrar el punto más cercano desde el punto seleccionado en contra de la memoria de la capa con la herramienta de proximidad
  6. Seleccione este mismo ID en el conjunto de datos original y empezar de nuevo desde el paso 3

La idea es ejecutar la herramienta de proximidad y encontrar el punto más cercano que va a estar en el mismo grupo hasta que comience el siguiente grupo. La cosa principal es la eliminación de los puntos que ya se han asignado cuando se ejecuta la herramienta de proximidad de nuevo.

0voto

saint_groceon Puntos 2696

Los Algoritmos genéticos se han encontrado para ser útil para la agrupación. Tal vez la única de estas soluciones podría ser limitada a producir racimos de 9 puntos.

El uso de Algoritmos Genéticos en la Agrupación de Problemas

Algoritmo genético basado en la técnica de clustering

Clustering Algoritmo Genético enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X