3 votos

¿Comprender el comportamiento de la calculadora de campo de ArcGIS con las geometrías?

En Obtención de las propiedades del siguiente registro mediante la herramienta de cálculo de campos en ModelBuilder el PO pide sugerencias sobre el cálculo de las distancias entre pares de puntos en una clase de características.

He pensado en una solución alternativa utilizando la calculadora de campo con una lógica muy básica:

  • para el primer registro memorizar la geometría del punto del campo Shape en la variable global pG y devuelve la distancia negativa
  • para otros registros calcular la distancia entre la forma actual y una en la memoria, asignar pG \= Forma actual, distancia de retorno.

Expresión:

i=0
def FirstOrOthers(shp):
 global pG,i
 if i==0:  i, dist, pG = 1, -1, shp
 else: dist, pG=shp.distanceTo(pG),shp
 return dist
#------
FirstOrOthers( !Shape! )

Salida mostrada en el campo DISTANCIA:

enter image description here

Cuando cambié ligeramente la expresión, para memorizar el primer punto de la geometría del punto:

i=0
def FirstOrOthers(shp):
 global pG,i
 if i==0:  i, dist, pG = 1, -1, shp.firstPoint
 else: dist, pG=shp.distanceTo(pG),shp.firstPoint
 return dist
#------
FirstOrOthers( !Shape! )

Funcionó como se esperaba:

enter image description here

Significa que la calculadora de campo se niega a calcular la distancia entre 2 geometrías de puntos, pero lo hace para la geometría de puntos y un punto. Esto es arriesgado, porque el punto no tiene una referencia espacial definida. Por eso en los scripts siempre uso geometrías de 2 puntos para calcular la distancia entre 2 puntos.

¿Alguna idea sobre el comportamiento de la calculadora de campo de impar?

He hecho la prueba con ArcGIS Desktop 10.3.

1voto

FelixIP Puntos 4035

Siga experimentando con la expresión:

i=0
def FirstOrOthers(shp):
 global pG,i
 if i==0:  i, pG = 1, shp; result=-1
 else:  result= pG.firstPoint.X; pG = shp
 return result
#---------
FirstOrOthers(!Shape!)

demuestra problemas con el almacenamiento de la geometría de los puntos en la memoria. Tenga en cuenta que la coordenada X devuelta es la coordenada de actual geometría en lugar de (¡como se pretende!) una almacenado en la memoria:

enter image description here

Esto es lo más raro que he visto en años de codificación.

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