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 meterlí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
LineJoinertransformador con parámetroList Name. Pero necesita hacer un procesamiento de datos adicional:LengthCalculatorpara calcular longitudes.Sorterpara ordenar sus líneas por longitud (ordenación numérica, descendente).LineJoinerpara unir líneas. Los más grandes primero (gracias al paso 2). Especifique el parámetroList NamedeLineJoiner- algún nombre para el nuevo atributo de lista.ListIndexercon 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:
Testertransformador después de LengthCalculator con prueba:_length < 1SpatialFilter(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 AttributesyAttribute Prefixdel 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
SpatialFiltertransformador utilizando parámetrosMerge AttributesyAttribute Prefix.Luego use el transformador
DuplicateRemoverpara filtrar tales características duplicadas (dos grandes) y tome solo una de ellas.Sugerencia: intente utilizar el
Inspectortransformador 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
Sorterhacer cumplir las características con más longitud yendo primeroLineJoinery 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.