8 votos

FME - Calcular la distancia de un punto a lo largo de una línea

He creado un espacio de trabajo de FME que introduce una tubería así como otras características lineales que la atraviesan (vías fluviales, carreteras, ferrocarriles, vallas, otras tuberías, etc). La salida es un archivo de puntos que contiene el tipo de cruce. Lo que me gustaría hacer es calcular la distancia a lo largo de la tubería desde el inicio de la misma para cada cruce. Así, a medida que se viaja a lo largo de la tubería, el atributo de distancia aumentará.

Estoy pensando que tendré que utilizar alguna de las herramientas de referencia lineal como MeasureGenerator, MeasureExtractor, o algo así, pero no estoy seguro de cómo hacerlo.

¿Alguien tiene una idea de cómo hacer esto?

5voto

Simon Nickerson Puntos 17147

Creo que se puede utilizar LengthToPointCalculator transformador. Pero hay que hacer algunos preparativos adicionales:

  1. Extraer las coordenadas de los puntos a los atributos con CoordinateExtractor .
  2. Fusionar la característica de la línea con los puntos ( FeatureMerger ). Debe recibir una característica para cada punto con geometría de línea y coordenadas del punto original en los atributos. Utilice GeometryExtractor / GeometryReplacer .

El modelo será similar a:

enter image description here

Puede descargar mi modelo de prueba con datos aquí: ejemplo .

3voto

MobileCushion Puntos 217

Entonces, ¿quieres encontrar la distancia a lo largo de la tubería en la que se produce la intersección?

Si utiliza el MeasureGenerator antes de Si hace la intersección, el proceso de intersección hará que se cree una nueva medida en el punto de intersección. Luego podría convertirlo en un punto (si es necesario) utilizando un Chopper.

La parte de la intersección puede realizarse mediante el transformador LineOnLineOverlayer o el Intersector, por ejemplo.

enter image description here

1voto

mblsha Puntos 305

El MeasureGenerator asignará un valor de medida a los vértices a lo largo de la línea, por lo que puede que no consiga lo que necesita, o requerirá un poco más de procesamiento después del transformador MeasureGenerator para obtener el valor de distancia asignado al punto.

Para conseguir lo que quieres puedes utilizar el ShortestPathFinder. La idea es que si obtienes el punto de inicio de la tubería y luego calculas el camino más corto a cada punto de intersección a lo largo de la tubería, entonces eso te dará los segmentos de la línea para cada intersección - entonces puedes simplemente usar LengthCalculator para obtener la distancia para cada segmento. El flujo de trabajo aproximado que yo adoptaría es:

  1. Utilice CoordinateExtractor para obtener la X y la Y de la primera coordenada (0) de la tubería
  2. Utilice el 2DPointReplacer para convertir las coordenadas extraídas en un punto
  3. Utilice el ShortestPathFinder y ponga la característica de la tubería en el puerto LINE, el punto de inicio generado de la tubería en el puerto SOURCE, y los puntos de intersección en el puerto DESTINATION
  4. Utilice LengthCalculator en las características de salida PATH para obtener la distancia
  5. Unir el atributo de distancia del PATH al punto de intersección original utilizando el FeatureMerger (tendrá que asegurarse de tener alguna forma de ID única en sus puntos de intersección)

Esto debería llevarte a donde tienes que estar, este es el enfoque que utilicé en una tarea similar. Un enfoque alternativo sería mirar el transformador PointOnLineOverlayer.

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