6 votos

¿Cálculo de la distancia máxima y media entre puntos en ModelBuilder?

Tengo dos capas de puntos. Una contiene las ubicaciones de los nidos y el ID del individuo que utiliza ese nido. La segunda capa de puntos contiene los puntos de movimiento de todos los individuos de la zona.

Quiero que mi modelo ModelBuilder genere una tabla con una fila para cada nido que muestre la distancia MÁXIMA y MEDIA desde el nido al punto de movimiento que son del ID individual que utiliza el nido.

Las imágenes siguientes son una maqueta de la idea básica del aspecto de la entrada y de lo que me gustaría que contuvieran los resultados.

Hasta ahora, y con algo de ayuda en este foro, he utilizado Distancia de Puntos para generar una tabla que contiene la distancia de cada punto del nido a todos los demás puntos. Luego he estado jugando con Summary Statistics para tratar de generar la tabla de salida. El problema es que la herramienta Distancia al Punto, creo, está creando la distancia desde el nido a TODOS los puntos y no sólo a los que coinciden con el ID. Necesito poner un filtro en SurveyPoints al principio para iterar a través de los IDs de los nidos. Pero lo ideal sería que todo esto para envolver en una sola tabla final.

Mi idea no probada es tratar de hacer una iteración a través de SurveyPoints utilizando un filtro basado en el id de nido (no sé cómo hacer esto). A continuación, de alguna manera anexar los resultados de la distancia entre puntos o las estadísticas de resumen para obtener una tabla final.

Table Mockup Example Current Model

---UPDATE--- He intentado el enfoque como se sugiere que parecía que iba a funcionar. Sin embargo, estoy recibiendo un inconveniente extraño. Déjeme saber si esto debe ser una nueva pregunta.

Mi Iterate Field Values está configurado igual que la sugerencia con el Iterator usando el campo UnitID del nido que es una cadena.

Cuando ejecuto el modelo (después de validarlo) me da un error porque el Valor = 1 por alguna razón. En realidad, si hago clic en el círculo Value antes de ejecutar el modelo, el valor que aparece en gris en el cuadro Value es "1". Ninguno de los campos UnitID es 1.

Así que cuando ejecuto el modelo obtengo el siguiente error. "Nests_meter" es el verdadero nombre del círculo etiquetado "Nests" en mi modelo.

ERROR 000358: Expresión no válida UnitID = 1 Se ha utilizado una expresión SQL no válida. Se ha utilizado una sentencia SQL no válida. [Nests_meter] Error en la ejecución (Make Feature Layer).

Lo raro es que la primera vez que añadí el iterador, sí contenía un valor válido. Pero después de que sólo se inicia con un valor de 1. He recreado el modelo desde cero, pero todavía obtener el '1'.

new model iterator values make feature values

4voto

jbalk Puntos 581

Es necesario añadir un iterador de selección de características. Establezca el 'group by fields' al id del nido. Esto iterará a través de los puntos de la encuesta seleccionando cada id de nido.

enter image description here

ACTUALIZACIÓN

Creo que le resultará más fácil trabajar con dos capas de características. Implementar esto para el inicio de su modelo, a continuación, conecte las dos capas de características a la herramienta de distancia de punto.

Modelo: enter image description here

Configuración de valores de campo de iteración (Tenga en cuenta que si su id de nido es una cadena, cambie el tipo de datos a 'cadena'): enter image description here

Realice los ajustes de la capa de características (Tenga en cuenta que si su id de nido es una cadena, cambie la expresión a NESTID = '%Valor%'): enter image description here

ACTUALIZACIÓN 2

Como ha señalado OP, el campo "Valor" del iterador tiene un valor de 1 antes de ejecutar el modelo. Esto es sólo un valor ficticio que no debe ser utilizado. Sin embargo, las herramientas de creación de capas de características fallaban porque se ejecutaban antes de que el iterador comenzara a ejecutarse, y tomaban el valor ficticio.

Para solucionarlo, haga que "Valor" sea una condición previa para las herramientas de creación de capas de características. Para ello, utilice el conector para conectar "Valor" a ambas herramientas de creación de capas de características. Cuando las conecte, seleccione "Precondición" en el menú emergente.

Esto asegurará que 'Valor' ha recibido realmente un valor antes de pasar el valor a la herramienta hacer capa de característica.

Información sobre condiciones previas: http://desktop.arcgis.com/en/arcmap/10.3/analyze/modelbuilder/a-quick-tour-of-using-precondition.htm

0voto

Stroboskop Puntos 2039

En primer lugar, la forma en que has descrito la relación nido-individuo es 1 a 1. Cualquier nido sólo es utilizado por un individuo y cualquier individuo sólo utiliza un nido. Por lo tanto, no hay necesidad de dos capas de puntos en su sistema. Podemos simplificar esto a una capa uniendo los atributos usando 'individual'. (Incluso si la relación 1:1 no es cierta y tienes M:M, esto seguirá funcionando pero se complicará si te importa a qué nido nos referimos para un individuo dado).

En cualquier caso, cree primero dos nuevos atributos (type="double") en la tabla de nidos (llámelos 'x1' e 'y1') y rellénelos con la geometría (calcule la geometría x e y en la columna correspondiente). Haga lo mismo con los datos de los puntos de movimiento individuales (llame a las columnas 'x2' e 'y2').

OK, ahora una el conjunto de datos del nido al conjunto de datos del movimiento en el atributo 'individual'. Haga clic con el botón derecho en los datos de movimiento en la tabla de contenidos y seleccione unir.

Tenemos una tabla que ahora es algo así como:

INDIVIDUAL | x1 | x2 | NEST | INDIVIDUAL(2) | x2 | y2 

Crea otro atributo en la tabla de movimientos llamado 'distancia' y rellénalo con la calculadora de campos utilizando la fórmula de distancia entre dos puntos:

GENERIC: SQRT((x2-x1)^2+(y2-y1)^2)

Stab at ArcMap: math.fabs( math.sqrt( math.pow((!x2! - !x1!),2) + math.pow((!y2! - !y1!),2) ) )

Ahora necesitas obtener la MÁXIMA y MEDIA de esos valores de distancia para cada individuo. Hay algunas maneras de hacer esto y sin ArcMAp delante de mí no puedo pensar en la forma más eficiente en este momento (ediciones útiles bienvenida):

-Probablemente haya una herramienta estadística en la caja de herramientas en algún lugar que obtenga el MAX y el MED agrupados por un atributo.

-Puede dividir la tabla por individuo y luego calcular nuevos atributos para MAX y MED, o hacer clic con el botón derecho del ratón en el atributo y ver las estadísticas de resumen.

-Si no hay demasiados individuos diferentes, puede utilizar la selección por atributo para seleccionar cada individuo y, a continuación, realizar un cálculo de campo para MAX y MED (recuerde crear primero los nuevos atributos).

-Parece que la herramienta de resumen estadístico que tiene actualmente en su modelo es lo que necesita para esta parte. ENLACE .

Véase el ejemplo siguiente Worked example in excel

Si el conjunto de datos no es demasiado grande, probablemente habría exportado los datos después de la unión y habría trabajado en Excel.

P.D. asegúrate de que los dos conjuntos de datos están en el mismo sistema de coordenadas cartesianas.

N.B. Ya no tengo ArcMap así que las instrucciones son de memoria - por favor, siéntase libre de editar con la sintaxis ArcMap correcta y las instrucciones.

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