Transformer ステージは、フィールドの値と書式を変更します。ここでは、カスタム トランスフォームを作成してセグメント ポイント リストを作成する手順を説明します。セグメント ポイント リストは、Spatial Calculator を使うライン ジオメトリの作成に入力として使用されます。
ここで Transformer に入力するのは、緯度/経度による場所を表す文字列フィールドで、その形式は 'x1,y1,x2,y2,x3,y3….’ です。出力は、 フィールドです。このフィールドは、穴が開いていないポリゴンの フィールドの作成にも使用できます。
フィールドを作成するには
-
Enterprise Designer で、新しいデータフローを作成し、Read From File ステージを追加します。ダブルクリックして [オプション] ダイアログを開きます。[ファイル プロパティ] タブで、場所に関する情報が含まれる入力ファイルを以下のように指定します。
-73.0,40.5,-73.0,40.7,-72.0,41.3,-73.0,40.5
-
[フィールド] タブで、必要であれば [タイプの検出] をクリックしてフィールドを自動で確認します。列の名前を "points" に変更します。
-
Transformer ステージをワークフローに追加します。ステージの名前を "Prepare Segments Point list" に変更します。このステージをダブルクリックして [オプション] ダイアログを開きます。[追加] をクリックして、[トランスフォームの追加] ダイアログ ボックスを開きます。[カスタム] を選択して [カスタム] ダイアログ ボックスを表示します。
-
[カスタム] ダイアログ ボックスで、以下の操作を行います。
-
[Custom Transform 名] テキスト ボックスに、"Prepare Segment Points list" と入力します。
-
[カスタム スクリプト] テキスト ボックスに、以下の Groovy スクリプトを追加します。入力の points フィールドは、緯度/経度座標の文字列です。
//'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
-
[出力] フィールドの右にある [追加] をクリックして [カスタム フィールドの追加] ダイアログを開いてから、[追加] をクリックして [フィールドの追加] ダイアログを開きます。[フィールド名] テキスト ボックスで、"SegmentPoints" と入力します (これはカスタム Groovy スクリプトに指定された出力と一致します)。[データ タイプのリスト タイプ] をオンにし、[セグメント] をドロップダウン リストから選択します。
-
[OK] をクリックし、 [カスタム フィールドの追加] ダイアログでもう一度 [OK] をクリックして [トランスフォームの追加] ダイアログに戻ります。ダイアログの最下部で [追加] をクリックし、[閉じる] をクリックして [オプション] ダイアログに戻ります。このダイアログでは、"Prepare Segment Points list" がカスタム トランスフォームとして表示されます。[OK] をクリックして [オプション] ダイアログを閉じます。
-
Prepare Segment Points list をデータフローで使用するために、Spatial Calculator ステージを追加し、名前を Create Line に変更します。このステージをダブルクリックして [Spatial Calculator オプション] ダイアログを開きます。[ライン ジオメトリの作成] を選択してから、座標系を選択し、[OK] をクリックします。
-
Write to Null ステージを追加してデータフローを完成します。データフローをテストするために、インスペクション ポイントを追加し、 を実行します。