Verwenden des Transformers zum Erstellen eines Segmentpunktfeldes

Im Transformer-Schritt werden Feldwerte und Formatierung geändert. In dieser Prozedur wird beschrieben, wie eine benutzerdefinierte Transformation zur Erstellung einer Segmentpunktliste erstellt wird. Die Segmentpunktliste wird dann als Eingabe für einen Vorgang zum Erstellen einer Liniengeometrie mit dem Spatial Calculator verwendet.

Hier stellt ein Zeichenfolgenfeld mit Breitengrad/Längengrad-Standorten in einer Zeile die Eingabe für den Transformer dar (x1,y1,x2,y2,x3,y3...). Ein SegmentPoints-Feld stellt die Ausgabe dar. Damit kann auch ein LineSegments-Feld für Polygone ohne Löcher erstellt werden.

So erstellen Sie ein SegmentPoints-Feld:

  1. Erstellen Sie im Enterprise Designer einen neuen Datenfluss und fügen Sie einen „Read from File“-Schritt hinzu. Machen Sie einen Doppelklick, um das Dialogfeld „Optionen“ zu öffnen. Geben Sie auf der Registerkarte „Dateieigenschaften“ die Eingabedatei mit den Standortinformationen an. Beispiel:
    -73.0,40.5,-73.0,40.7,-72.0,41.3,-73.0,40.5
  2. Klicken Sie bei Bedarf auf der Registerkarte „Felder“ auf Typ erkennen, um die Felder automatisch zu bestimmen. Ändern Sie den Spaltennamen in „Punkte“ um.
  3. Fügen Sie einen Transformer-Schritt zum Workflow hinzu. Benennen Sie den Schritt in „Segmentpunktliste vorbereiten“ um. Doppelklicken Sie auf den Schritt, um das Dialogfeld „Optionen“ zu öffnen. Klicken Sie auf Hinzufügen, um das Dialogfeld „Transformation hinzufügen“ zu öffnen. Wählen Sie Benutzerdefiniert aus, um das Dialogfeld „Benutzerdefiniert“ anzuzeigen.
  4. Gehen Sie im Dialogfeld „Benutzerdefiniert“ wie folgt vor:
    1. Geben Sie im Textfeld „Name der benutzerdefinierten Transformation“ Segmentpunktliste vorbereiten ein.
    2. Fügen Sie im Textfeld „Benutzerdefiniertes Skript“ folgendes Groovy-Skript hinzu. Das Eingabefeld „Punkte“ ist eine Zeichenfolge mit Koordinaten für Längengrad und Breitengrad.
      //'points' field is '-73.0,40.5,-73.0,40.7,-72.0,41.3,-73.0,40.5'
      String pointsString = data['points']
      String[] coords = pointsString.split(",");
      def SegmentPoints = []
      def point = [:]
      for (int i = 0; i < coords.length; i=i+2) {
            point = [ 'Longitude': coords[i], 'Latitude': coords[i+1]] 
            SegmentPoints.add(point)
      }
      
      data['SegmentPoints'] = SegmentPoints
      
    3. Klicken Sie rechts neben den Ausgabefeldern auf Hinzufügen, um das Dialogfeld „Benutzerdefiniertes Feld hinzufügen“ zu öffnen, und klicken Sie anschließend auf Hinzufügen, um das Dialogfeld „Feld hinzufügen“ zu öffnen. Geben Sie im Textfeld „Feldname“ SegmentPoints ein (für den Vergleich mit der im benutzerdefinierten Groovy-Skript angegebenen Ausgabe). Aktivieren Sie das Kontrollkästchen Der Datentyp ist der Listentyp und wählen Sie Segment aus der Dropdown-Liste aus.
    4. Klicken Sie auf OK und klicken Sie anschließend im Dialogfeld „Benutzerdefiniertes Feld hinzufügen“ erneut auf OK, um zum Dialogfeld „Transformation hinzufügen“ zurückzukehren. Klicken Sie im unteren Bereich des Dialogfeldes auf Hinzufügen und klicken Sie anschließend auf Schließen, um zum Dialogfeld „Optionen“ zurückzukehren. Im Dialogfeld wird jetzt die Liste „Segmentpunkte vorbereiten“ als benutzerdefinierte Transformation aufgeführt. Klicken Sie auf OK, um das Dialogfeld „Optionen“ zu verlassen.
  5. Fügen Sie einen „Spatial Calculator“-Schritt hinzu (umbenannt in „Linie erstellen“), um die Liste „Segmentpunkte vorbereiten“ in einem Datenfluss zu verwenden. Doppelklicken Sie auf den Schritt, um das Dialogfeld „Spatial Calculator-Optionen“ zu öffnen. Wählen Sie Liniengeometrie erstellen und anschließend das Koordinatensystem aus und klicken Sie auf OK.
  6. Fügen Sie einen „Write to Null“-Schritt hinzu, um den Datenfluss abzuschließen. Fügen Sie zum Testen des Datenflusses einen Überprüfungspunkt hinzu und führen Sie anschließend Aktuellen Fluss überprüfen aus.