Tengo muchos objetos de línea. Algunos de ellos son más pequeños que algunos criterios.
Me gustaría unir todas las líneas o segmentos de línea más pequeños que son más pequeños que las 1 meter
líneas más grandes, manteniendo los atributos de la línea más grande.
¿Algún consejo?
Traté de usar el primer probador para verificar la longitud de los objetos de línea (si es más pequeño que 1 m), y luego la salida pasada va a LineJoiner. Pero en realidad no sucede nada, y las líneas que provienen del puerto de salida de LineJoiner no tienen atributos como líneas antes (como deberían tener). Tal vez me complique demasiado, pero pensé que sería una tarea fácil.
Respuestas:
Puede usar
LineJoiner
transformador con parámetroList Name
. Pero necesita hacer un procesamiento de datos adicional:LengthCalculator
para calcular longitudes.Sorter
para ordenar sus líneas por longitud (ordenación numérica, descendente).LineJoiner
para unir líneas. Los más grandes primero (gracias al paso 2). Especifique el parámetroList Name
deLineJoiner
- algún nombre para el nuevo atributo de lista.ListIndexer
con el índice de lista 0: para obtener los atributos de la primera característica unida (la más grande) de la lista.Así es como se verá:
EDITAR1:
Para poder unir solo <1m características a las más grandes, necesitamos adicionalmente usar:
Tester
transformador después de LengthCalculator con prueba:_length < 1
SpatialFilter
(pruebas para realizar el parámetroTOUCHES
:) después de Probador para filtrar solo las funciones que tocan funciones <1m. Luego realice la unión de línea en ellos junto con <1m de características. Funciones que no tocan <1 m, directo a la salida (o procesamiento adicional).Modelo:
EDIT2:
Si tiene una línea <1m que toca dos grandes, entonces todas se unirán. Si tal caso (<1m la función toca dos o más grandes) es posible en sus datos, entonces debe agregar algún procesamiento de tales casos. Echa un vistazo a los parámetros
Merge Attributes
yAttribute Prefix
del transformadorSpatialFilter
. Al usar estos parámetros, debería poder detectar tales casos y luego hacer un filtrado adicional.EDITAR3:
Resolvamos el caso cuando tenga dos líneas grandes tocando una pequeña (<1m). Necesitamos tomar solo una de las grandes líneas para participar en la unión con la pequeña.
Para poder realizar dicho filtrado, debemos marcar estas dos características grandes con alguna identificación de la pequeña que están tocando. Como se indica en EDIT2, se puede hacer en
SpatialFilter
transformador utilizando parámetrosMerge Attributes
yAttribute Prefix
.Luego use el transformador
DuplicateRemover
para filtrar tales características duplicadas (dos grandes) y tome solo una de ellas.Sugerencia: intente utilizar el
Inspector
transformador durante la creación de su modelo y vea resultados intermedios en cualquier caso que no le resulte claro. De esta manera, comprenderá mejor cómo funciona cada uno de los transformadores. ¡Experimenta con tus datos! :)fuente
Sorter
hacer cumplir las características con más longitud yendo primeroLineJoiner
y luego sus atributos estarán con el índice "0" en la lista (ver parámetroList Name
) y luego podemos moverlos a los atributos principales de la característica (ListIndexer
). De lo contrario, puede obtener un resultado donde los atributos de las características pequeñas "dominarán". No puede ver ninguna diferencia en caso de que las características grandes vayan primero, pero no voy a relatarlo.