Utilización de Transformer para crear un campo de segmentos de línea

La etapa Transformer modifica los valores y el formato de los campos. Este procedimiento describe cómo crear una transformación personalizada para crear un campo LineSegment. Posteriormente, LineSegment se usa como la entrada para la operación Crear geometría de polígono mediante Spatial Calculator.

Aquí la entrada de Transformer es un campo de cadena de locaciones de latitud/longitud en una fila en el formato 'x1,y1,x2,y2,x3,y3….; x1,y1,x2,y2,x3,y3….;…’. La salida será un campo LineSegments para los polígonos con orificios.

Para crear un campo LineSegment:

  1. En Enterprise Designer, cree un nuevo flujo de datos y agregue la etapa Read From File. Haga doble clic para mostrar el diálogo Opciones. En la ficha propiedades del archivo, especifique el archivo de entrada que contiene la información de ubicación, por ejemplo:
    0.0,0.0,0.0,10.0,10.0,10.0,10.0,0.0,0.0,0.0;2.0,2.0,2.0,8.0,8.0,8.0,8.0,2.0,2.0,2.0
  2. En la ficha Campos, haga clic en Detectar tipo, si es necesario, para determinar automáticamente los campos. Modifique el nombre de la columna que se va a denominar líneas.

  3. Agregue una etapa Transformer al flujo de trabajo. Cambie el nombre a "Preparar LineSegments". Haga doble clic en la etapa para abrir el diálogo Opciones. Haga clic en Agregar para abrir el cuadro de diálogo Agregar transformación. Elija Personalizar para mostrar el cuadro de diálogo Personalizar.

  4. El cuadro de diálogo personalizado realice lo siguiente:
    1. En el cuadro de texto Nombre de transformación personalizada, escriba Preparar lista LineSegments.
    2. En el cuadro de texto Secuencia de comandos personalizada, agregue la siguiente secuencia de comandos Groovy. El campo de líneas de entrada es una cadena de coordenadas de latitud y longitud, que representa un polígono interior y exterior.
      //'lines' field is '0.0,0.0,0.0,10.0,10.0,10.0,10.0,0.0,0.0,0.0;2.0,2.0,2.0,8.0,8.0,8.0,8.0,2.0,2.0,2.0'
      String pointsString = data['lines']
      String[] lineStrings = pointsString.split(";");
      
      def LineSegments = []
      def polygon = [:]
      def point = [:]
      for (int n = 0; n < lineStrings.length; n++) {
            String[] coords = lineStrings[n].split(",");
            def line = []
            for (int i = 0; i < coords.length; i=i+2) {
                  point = [ 'Longitude': coords[i], 'Latitude': coords[i+1]] 
                  line.add(point)
            }
            polygon.put(String.valueOf, line)
      }
      
      LineSegments = [polygon]
      
      data['LineSegments'] = LineSegments
      
    3. A la derecha de los campos de salida, haga clic en Agregar para abrir el diálogo Agregar campo personalizado y, luego, en Agregar para abrir el diálogo Agregar campo. En el cuadro de texto Nombre de campo, escriba LineSegments (para hacer coincidir los datos de salida indicados en la secuencia de comandos Groovy personalizada). Compruebe que la casilla de verificación Tipo de datos es un tipo de lista de y seleccione Segmento en la lista desplegable.

    4. Haga clic en Aceptar y, luego, en Aceptar nuevamente, en el diálogo Agregar campo personalizado, para volver al diálogo Agregar transformación. En la parte inferior del diálogo, haga clic en Agregar y, luego, en Cerrar para volver al diálogo Opciones. El diálogo ahora muestra Preparar lista LineSegments como la transformación personalizada. Haga clic en Aceptar para salir del cuadro de diálogo Opciones.
  5. Para usar Preparar lista LineSegments en un flujo de datos, agregue una etapa Spatial Calculator (con el nombre cambiado a Crear polígono) y haga doble clic en la etapa para abrir el diálogo Opciones de Spatial Calculator. Seleccione Crear geometría de polígono, luego seleccione el sistema de coordenadas y haga clic en Aceptar.
  6. Agregue una etapa Write to Null para completar el flujo de datos. Para probar el flujo de datos, agregue un Punto de inspección y ejecute Inspeccionar flujo actual.