Utilisation de Transformer pour créer un champ Segments de ligne

Le stage Transformer modifie les valeurs et le formatage des champs. Cette procédure explique comment créer une transformation personnalisée pour générer un champ LineSegment. Le champ LineSegment est ensuite utilisé comme entrée pour une opération Créer une géométrie de polygone via Spatial Calculator.

Ici, l'entrée de Transformer est un champ de type chaîne d'emplacements latitude/longitude sur une ligne au format « x1,y1,x2,y2,x3,y3….; x1,y1,x2,y2,x3,y3….;… ». La sortie est un champ LineSegments de polygones avec des trous.

Pour créer un champ LineSegment , procédez comme suit :

  1. Dans Enterprise Designer, créez un nouveau flux de données et ajoutez un stage Read From File. Double-cliquez pour afficher la boîte de dialogue Options. Dans l'onglet Propriétés du fichier, indiquez le fichier d'entrée contenant les informations d'emplacement, par exemple :
    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. Dans l'onglet Champs, cliquez sur le bouton Détecter le type, le cas échéant, pour déterminer automatiquement les champs. Modifiez le nom de colonne pour l'appeler Lignes.

  3. Ajoutez un stage Transformer au flux de travail. Renommez le stage avec le nom « Prepare LineSegments ». Double-cliquez sur le stage pour ouvrir la boîte de dialogue Options. Cliquez sur Ajouter pour ouvrir la boîte de dialogue Ajouter transformation. Sélectionnez Personnalisé pour afficher la boîte de dialogue Personnalisé.

  4. Dans la boîte de dialogue Personnalisé, procédez comme suit :
    1. Dans la zone de texte Nom de la transformation personnalisée, saisissez Prepare LineSegments list.
    2. Dans la zone de texte Script personnalisé, ajoutez le script Groovy suivant. Le champ Lignes d'entrée est une chaîne de coordonnées longitude-latitude représentant un polygone interne et externe.
      //'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. À droite des champs Sortie, cliquez sur Ajouter pour ouvrir la boîte de dialogue Ajouter un champ personnalisé, puis cliquez sur Ajouter pour ouvrir la boîte de dialogue Ajouter un champ. Dans la zone de texte Nom du champ, saisissez LineSegments (pour correspondre à la sortie du script Groovy personnalisé). Cochez la case Data type is a list type of et sélectionnez Segment dans la liste déroulante.

    4. Cliquez sur OK, puis de nouveau sur OK dans la boîte de dialogue Ajouter un champ personnalisé pour revenir à la boîte de dialogue Ajouter transformation. Au bas de la boîte de dialogue, cliquez sur Ajouter, puis sur Fermer pour revenir à la boîte de dialogue Options. La boîte de dialogue affiche maintenant une liste Préparer les segments de ligne comme transformation personnalisée. Cliquez sur OK pour fermer la boîte de dialogue Options.
  5. Pour utiliser Prepare LineSegments list dans un flux de données, ajoutez un stage Spatial Calculator (renommé avec le nom Create Polygon) et double-cliquez sur le stage pour ouvrir la boîte de dialogue Spatial Calculator Options. Sélectionnez Créer une géométrie de polygone, puis le système de coordonnées, et cliquez sur OK.
  6. Ajoutez un stage Write to Null pour compléter le flux de données. Pour tester le flux de données, ajoutez un Point d'inspection, puis exécutez Inspecter le flux actif.