2 votos

¿Cómo calcular la distancia máxima entre rasgos?

Me gustaría calcular el máximo distancia entre características de polilínea. Tengo una polilínea base con muchas otras polilíneas tocando o cerca de la polilínea base como se muestra en la imagen. La distancia que me gustaría calcular es desde la polilínea base (roja) a las otras polilíneas (azules). Como estoy buscando la distancia máxima, sería la distancia perpendicular desde los "picos" de las polilíneas azules a la polilínea roja.

Calculate Max Distance

Estoy utilizando FME para este proceso y parece que no puedo encontrar nada que calcula máximo distancias. Pensé en cortar las líneas azules a los puntos utilizando el transformador "Chopper" y el cálculo de la distancia a la característica de base y luego agrupar por algún ID y encontrar el máximo dentro de ese grupo. Entonces, posiblemente, poner ese valor de nuevo en un atributo de la línea unchopped. Sin embargo, no estoy muy seguro de cómo hacer todo eso.

¿Voy por buen camino? ¿Alguien puede aconsejarme otro método? ¿O cómo puedo aplicar mi método?

Gracias.

2voto

Michael Barker Puntos 8234

Suponiendo que estemos hablando de una cadena lineal. Desglose la característica X en puntos y calcule el punto más cercano al punto de la característica base.

Count (add id) Chopper A -> NeighborFinder -> Sort (group by id and sort by _distance ) ahora puede crear orginal linestring o dividir "línea" después de contador y el uso FeatureMerge después de calcular el valor más alto.

El truco es utilizar NeighborFinder

2voto

Erik Öjebo Puntos 6937

Buscador de vecinos transformador

enter image description here

"El NeighborFinder tiene un modo especial "sólo candidatos" para cuando los datos entrantes están todos en un grupo, en lugar de dos grupos (base/candidato).

Este modo se activa simplemente realizando una conexión sólo al puerto CANDIDATE, e ignorando el puerto BASE. Entonces todos los CANDIDATOS se compararán con todos los demás CANDIDATOS, pero no se compararán consigo mismos".

enter image description here

Fuente y más información:

http://fmepedia.safe.com/articles/Samples_and_Demos/Passing-attributes-between-features-in-close-proximity

Documentación sobre transformadores

http://fmepedia.safe.com/articles/Documentation_del/FME-Transformers

2voto

MobileCushion Puntos 217

Estoy de acuerdo en que el NeighborFinder es el transformador que hay que utilizar. En tu diagrama yo haría que la característica Base fuera la BASE en el NeighborFinder. Las características A y B las dividiría con el Chopper como se describe.

La clave es introducir un nombre para una Lista de Candidatos Probados. Esto listará todos los puntos con su distancia desde la base. A partir de ahí puede utilizar un ListRangeExtractor para encontrar la distancia máxima (y mínima).

Es muy sencillo y tendría el siguiente aspecto:

enter image description here

La complicación es que hay múltiples características que probar, pero se necesita una base para cada una de ellas.

Una solución sería crear un transformador personalizado con un bucle, por lo que el bucle a través de cada "característica" de la misma base. Alternativamente - más simple pero menos eficiente - utilizar un transformador Cloner para crear una base para cada característica. Asegúrese de que existe un número de identificación para cada par base/característica y utilícelo como grupo en el NeighborFinder.

¿Tiene sentido? Si los volúmenes de datos no son grandes, me decantaría por el método Cloner por ser más fácil de implementar.

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