Alteryxで空間処理関数のみで利用できる処理について

Alteryx

Alteryxは豊富なツールを使い空間処理を行うことができますが、同じく豊富に用意されている「関数」でも空間処理を行うことができます。今回は、関数のみで提供されている空間機能を見ていきたいと思います。

空間処理関数のみで提供されている機能

以下の関数がツールでは提供されていない関数一覧になります。

  • ST_Boundary・・・空間オブジェクトの境界線を抽出します
  • ST_Dimension・・・空間オブジェクトのトポロジ次元を取得します
  • ST_MD5・・・空間オブジェクトのMD5ハッシュ値を計算します
  • ST_PointN・・・空間オブジェクト内の指定した順番にあるポイントを取得します
  • ST_RandomPoint・・・空間オブジェクト内のランダムなポイントを取得します

ST_Boundary

空間オブジェクトの境界線を抽出する関数ですが、ポリゴンの場合は境界のラインデータ、ラインの場合は始点と終点のポイントデータが得られます。入力がポイントの場合は、Nullが返されます。

ゆえに、ポリゴンの場合はポリゴン分割ツールとポリビルドツールの組み合わせ、ラインの場合は空間情報ツールで代替することができます。

ST_Dimension

空間オブジェクトのポイント、ライン、ポリゴンどのタイプにあたるのか、0、1、2のコードを得られる関数です。

  • 0:ポイント
  • 1:ライン
  • 2:ポリゴン

一つのレコードに複数のタイプが存在する場合は、一番ST_Dimensionで取れる値の大きなものになります(ポイントとラインが含まれていれば1となります)。

なお、空間情報の空間オブジェクト型(ObjType)でもポイント、ライン、ポリゴンの区別は付きます。

ST_MD5

空間オブジェクトのMD5ハッシュ値を計算します

使用法の一例として、ポリゴンやラインはポイントを繋いで作られていますが、内部的にはつなぐ順序が一部の処理で問題になってくるケースがあります。例えば、路線の駅のポイントデータをつなぐとして、始発の駅から繋いだラインデータと終点の駅から繋いだラインデータは、データとしては見た目同じですが、順序は逆になっています。再度駅地点を取り出したい場合に、順序よく始発から取り出せるのかそれとも一度順番を逆転させる必要があるのか、といったときに処理が変わってきます。

この場合、IF文で2つのラインデータを比較すると、Trueが帰ってきますが、MD5ハッシュ値を計算すると異なる値が得られるので、厳密に同じものかどうか、ということを調べる際にST_MD5ハッシュ関数を使うことができます。

以下、IsSameという項目はIF文で2つの空間オブジェクトを比較した結果ですが、MD5ハッシュ値は異なっています。この空間オブジェクトはラインデータですが、A→B、B→Aと接続したそれぞれのラインデータを比較したものとMD5ハッシュ値を取ったものです。

ST_PointN

空間オブジェクト内の指定された位置にあるポイントデータを抽出します。

これは、ポリゴン分割ツールを使うことで代替することが可能です(ただし、ST_PointNとポリゴン分割ツールのSplit_Sequenceの開始番号が異なるので注意して下さい)。

ST_RandomPoint

空間オブジェクト内にランダムなポイントを作成する関数です。デモデータの作成やシミュレーションを行う場合に有用な関数です。ポリゴン内に十分なポイントを作りたいような場合は、行生成ツールであらかじめ数多くのレコードを作成し、関数を使ってポイントを大量に生成することができます。

複雑な形状のポリゴンに対して大量のポイントを作成する場合は、メモリに気をつけましょう(動きはしますが、処理に時間がかかったりします)。ポリゴン形状に対して厳密でなくて良ければ、一般化ツールでデータ容量を削減することもできます。

以下は、三角形のポリゴン内に100個のランダムなポイントを打ったサンプルです。

まとめ

いくつかの関数はツールを組みわせて代替することもできましたが、ST_RandomPoint、ST_MD5だけは代替することができないためご注意ください。

サンプルワークフローダウンロード

コメント

タイトルとURLをコピーしました