【Alteryx関数シリーズ】空間関数の使い方

目次

Alteryxで使用できる関数の「空間関数」の使い方をご紹介します

 

空間関数は、空間オブジェクトを操作する関数群です。空間ツール等で実装されているものも存在しますが、ここでしか利用できない機能も存在します。

空間カテゴリの関数一覧

やりたいこと 関数名 概要 戻り値の型
空間オブジェクトの面積を取得 ST_Area(object, units) 空間オブジェクトの面積を取得します 数値
空間オブジェクトの境界を取得 ST_Boundary(object) 空間オブジェクトの境界を取得します 空間オブジェクト※
空間オブジェクトの外接する四角形を取得 ST_BoundingRectangle(object, object2,...) 空間オブジェクトの外接する四角形を取得します 空間オブジェクト※
空間オブジェクトの中心点を取得 ST_Centroid(object) 空間オブジェクトの中心点を取得します 空間オブジェクト※
空間オブジェクトの中心点の経度を取得 ST_CentroidX(object) 空間オブジェクトの中心点の経度を取得します 数値
空間オブジェクトの中心点の緯度を取得 ST_CentroidY(object) 空間オブジェクトの中心点の緯度を取得します 数値
空間オブジェクトを結合 ST_Combine(object, object2)  空間オブジェクトを結合します 空間オブジェクト※
object2 に object1 が含まれているか確認 ST_Contains(object1, object2) object2 に object1 が含まれているか確認します(ST_Within関数とは選ぶobjectが逆になります) Bool
object1 が object2 に含まれているか確認 ST_Within(object1, object2) object1 が object2 に含まれているか確認します(ST_Contains関数とは選ぶobjectが逆になります) Bool
object2 から object1 を切り取り ST_Cut(object, object2) object2 から object1 を切り取ります 空間オブジェクト※
指定した空間オブジェクトの交点を取得 ST_Intersection(object, object2,...) 指定した空間オブジェクトの交点を取得します 空間オブジェクト※
空間オブジェクトが交差するか確認 ST_Intersects(object1, object2...) 空間オブジェクトが交差するか確認します Bool
指定した空間オブジェクトの逆交点を取得 ST_InverseIntersection(object1, object2...) 指定した空間オブジェクトの逆交点を取得します 空間オブジェクト※
object1 が object2 に接触するか確認 ST_Touches(object, object2) object1 が object2 に接触するか確認します Bool
object1 が object1 に触れたり、交差しているか確認 ST_TouchesOrIntersects(object1, object2) object1 が object1 に触れたり、交差しているか確認します Bool
オブジェクトの凸包を取得 ST_ConvexHull(object1, object2,...) オブジェクトの凸包を取得します 空間オブジェクト※
ポイントとラインから線分を作成 ST_CreateLine(point1, point2...)  指定されたポイントとラインをシーケンス内で接続して、線分を作成します 空間オブジェクト※
経度と緯度の座標を含む空間オブジェクトを作成 ST_CreatePoint(x, y) 指定された経度と緯度の座標を含む空間オブジェクトを作成します 空間オブジェクト※
ポイントとラインからポリゴンを作成 ST_CreatePolygon(obj, obj2...) 指定したポイントとラインをシーケンスに接続してポリゴンを作成します 空間オブジェクト※
オブジェクト同士の距離を取得 ST_Distance(object1, object2、units) object1 から object2 までの距離を取得します 数値
空間オブジェクトの直線の長さを取得 ST_Length(objec, units) 空間オブジェクトの直線の長さを取得します 数値
空間オブジェクトの最大経度を取得 ST_MaxX(object) 空間オブジェクトの最大経度を取得します 数値
空間オブジェクトの最大緯度を取得 ST_MaxY(object) 空間オブジェクトの最大緯度を取得します 数値
空間オブジェクトの最小経度を取得 ST_MinX(object) 空間オブジェクトの最小経度を取得します 数値
空間オブジェクトの最小緯度を取得 ST_MinY(object) 空間オブジェクトの最小緯度を取得します 数値
空間オブジェクト内の部品の数を取得 ST_NumParts(object) 空間オブジェクト内の部品の数を取得します 数値
空間オブジェクト内のポイント数を取得 ST_NumPoints(object) 空間オブジェクト内のポイント数を取得します 数値
空間オブジェクト型を文字列値に変換 ST_ObjectType(object) 空間オブジェクト型を文字列値に変換します 文字列
空間オブジェクトの次元を取得 ST_Dimension(object) 空間オブジェクトの次元を返します ( オブジェクトがポイントの場合は 0、ラインの場合は 1、ポリゴンの場合は 2を返します) 数値
空間オブジェクトの最初の点を取得 ST_StartPoint(object) 空間オブジェクトの最初の点を取得します 空間オブジェクト※
空間オブジェクトの最後の点を取得 ST_EndPoint(object) 空間オブジェクトの最後の点を取得します 空間オブジェクト※
空間オブジェクトの n 番目の点を取得 ST_PointN(object, n) 空間オブジェクトの n 番目の点を取得します 空間オブジェクト※
空間オブジェクト内のランダムな点を取得 ST_RandomPoint(object) 空間オブジェクト内のランダムな点を取得します 空間オブジェクト※
オブジェクトが提供された DE 9IM 関係を満たすか確認 ST_Relate(object1, object2, Relation) オブジェクトが提供された DE 9IM 関係を満たすか確認します Bool

※出力データ型が空間オブジェクト(ポイント、ライン、ポリゴン)の場合は、空間関数を使用するフォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

 

 

各関数の使い方とサンプル

ST_Area ・・・ 空間オブジェクトの面積を取得します

ST_Area(object, units)

object で指定した空間オブジェクトの面積を、unit で指定した単位で取得します。unit には、平方キロメートル(SqKm)、平方マイル(SqMi)、平方フィート(SqFeet)のいずれかを指定します。戻り値は数値型となります。

Sample

下の例では、object列のそれぞれのポリゴンの面積を平方キロメートル単位で取得しています。

空間情報ツールを使う事でも、同じようにポリゴンの面積を求めることができます。ただし、空間情報ツールでは平方フィート単位での面積は取得はできません。

 

 

ST_Boundary ・・・ 空間オブジェクトの境界を取得します

ST_Boundary (object)

object で指定した空間オブジェクトの境界を、ラインポリゴンとして取得します。戻り値は空間オブジェクトとなります。

Sample

下の例では、object列のそれぞれのポリゴンの境界をラインとして取得しています。ST_Boundary関数を使う際は、フォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

ポリスプリットツール、ポリビルドツールを組み合わせて使うことで、同じようにポリゴンの境界をラインとして取得することができます。

 

 

ST_BoundingRectangle ・・・ 空間オブジェクトの外接する四角形を取得します

ST_BoundingRectangle (object, object2,...)

object で指定した空間オブジェクトの外接する四角形(境界短形)を、ラインオブジェクトとして取得します。

Sample

下の例では、指定した複数列のポリゴンの境界短形を取得しています。ST_BoundingRectangle関数を使う際は、フォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

集計ツールを使う事でも、同じようにポリゴンに外接する四角形を取得できます。対象の空間オブジェクトを 1 列に集め、集計ツールで「SpatialObjBR」を選択することで、複数の空間オブジェクトに外接する四角形を取得することができます。

 

 

ST_Centroid / ST_CentroidX  / ST_CentroidY ・・・ 空間オブジェクトの中心点のポイント、中心点の緯度経度を取得します

ST_Centroid (object)

object で指定した空間オブジェクトの中心点を、ポイントとして取得します。

ST_CentroidX (object)

object で指定した空間オブジェクトの中心点の経度を取得します。戻り値は数値型となります。

ST_CentroidY (object)

object で指定した空間オブジェクトの中心点の緯度を取得します。戻り値は数値型となります。

Sample

下の例では、object列のそれぞれのポリゴンから、中心点のポイント、中心点の緯度経度を取得しています。ST_Centroid関数を使う際は、フォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

空間情報ツールを使う事でも、同じように中心点のポイントオブジェクト、中心点の緯度経度を取得することができます。中心点のポイントオブジェクトを取得する場合は空間情報ツールの「中心点:SpatialObj」、中心点の緯度経度を取得する場合は「中心点:XY座標フィールド」にチェックを入れると、ポイントと緯度経度を取得できます。

 

 

ST_Combine (object, object2)  ・・・ 空間オブジェクトを結合します

ST_Combine (object, object2)

object で指定した空間オブジェクトを結合して、1つの大きなポリゴンを取得します。戻り値はポリゴンとなります。

Sample

下の例では、object列 と object2列の2つのポリゴンを結合し、ひとつの大きなポリゴンを取得しています。ST_Combine関数を使う際は、フォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

空間プロセスツールを使う事でも、同じようにポリゴンを統合できます。第一・第二区間フィールドに統合するポリゴン列をそれぞれ選び、アクション項目で「オブジェクトを結合」を選択することで、2つのポリゴンを統合できます。

この他にも、集計ツールを使用して複数のポリゴンを統合する事ができます。ポリゴンを一つの列に集め、集計ツールで「SpatialObjCombine」項目を選択する事でも、複数のポリゴンを結合できます。

 

 

ST_Contains (object1、object2)  ・・・ object1 に object2 が含まれているか確認します

ST_Contains (object1、object2)

object2 で指定した空間オブジェクトが、object1 で指定したポリゴンに含まれている場合は 「1」(True)、それ以外の場合は 「0」(False)を返します。

ST_Within関数とは指定する objectが逆になる点に注意が必要です。

Sample1

下の例では、object列 のポリゴンが object2列のポリゴンに含まれているか確認し、含まれていないため「0」の値が返っています。

Sample2

下の例では、object列 のポリゴンが object2列のポリゴンに含まれているか確認し、含まれているため「1」の値が返っています。

 

 

ST_Within ・・・ object1 が object2 に含まれているか確認します

ST_Within (object1, object2)

object1で指定した空間ポリゴンが、object2 で指定した空間ポリゴンに含まれている場合は「1」(True)、それ以外の場合は「0」(False)を返します。

ST_Contains関数とは指定する object が逆になる点に注意が必要です。

Sample1

下の例では、object は object2 と交差している(含まれていない)ため、「0」の値が返っています。

Sample1

下の例では、object は object2 に含まれているため、「1」の値が返っています。

 

 

ST_Cut (object1、object2) ・・・ object2 から object1 を切り取ります

ST_Cut (object1、object2)

object2 で指定したポリゴンから、 object1 で指定したポリゴンを切り取ります。

Sample

下の例では、object2 列のポリゴンから、 object 列のポリゴンを切り取っています。ST_Cut関数を使う際は、フォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

空間プロセスツールを使う事でも、同じようにポリゴンを切り取ることができます。「第一空間フィールド」「第二空間フィールド」項目でそれぞれのポリゴン列を選択し、アクションで「第一から第二をカット」を選択すると、ST_Cut関数と同じようにポリゴンの切り取りができます。

 

 

ST_Intersection ・・・ 指定した空間オブジェクトの交差を取得します

ST_Intersection (object1、object2,...)

object で指定した空間オブジェクトの交差を取得します。

Sample

下の例では、object 列と object2列のポリゴンから交差部分のポリゴンを取得しています。ST_Intersection関数を使う際は、フォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

空間プロセスツールを使う事でも、同じようにポリゴンの交差部分を取得することができます。「第一空間フィールド」「第二空間フィールド」項目でそれぞれのポリゴン列を選択し、アクションで「交差オブジェクトを作成」を選択すると、ST_Intersection関数と同じようにポリゴンの切り取りができます。

ST_Intersects ・・・ 空間オブジェクトが交差するか確認します

ST_Intersects (object1、object2...)

object1、object2 で指定したポリゴンが交差している場合は「1」(True)、それ以外の場合は「0」(False)を返します。

Sample1

下の例では、object 列と object2列のポリゴンが交差しているため、「1」の値が返っています。

Sample2

下の例では、object 列と object2列のポリゴンが交差していないため「0」の値が返っています。

 

ST_InverseIntersection ・・・ 指定した空間オブジェクトの逆交点を取得します

ST_InverseIntersection (object1、object2...)

object1、object2 で指定したポリゴンの逆交差を、ポリゴンとして取得します。

Sample1

下の例では、object 列と object2列のポリゴンの逆交差を取得しています。ST_InverseIntersection関数を使う際は、フォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

空間プロセスツールを使う事でも、同じように逆交差を取得できます。「第一空間フールド」「第二空間フィールド」項目でそれぞれのポリゴン列を選択し、アクションで「逆交差ポリゴンを作成する」を選択すると、ST_Cut関数と同じようにポリゴンの切り取りができます。

 

 

ST_Touches ・・・ object1 が object2 に接しているか確認します

ST_Touches (object1, object2)

object1で指定した空間オブジェクトが、object2 で指定した空間ポリゴンに接しているか確認します。空間オブジェクトが接している場合は「1」(True)の値、接していない場合は「0」(False)の値が返ります。

Sample1

下の例では、object と object2 のポリゴンが交差している(接していない)ため、「0」の値が返っています。

Sample2

下の例では、object と object2 のポリゴンが接しているため、「1」の値が返っています。

ST_TouchesOrIntersects ・・・ object1 が object1 と接している、または交差しているか確認します

ST_TouchesOrIntersects (object1, object2)

object1で指定した空間ポリゴンが、object2 で指定した空間ポリゴンに接している、または交差していることを確認します。接しているか交差している場合は「1」(True)、それ以外の場合は「0」(False)が返ります。

Sample1

下の例では、object とobject2 が交差しているため、「1」の値が返っています。

Sample2

下の例では、object とobject2 が接しているため、「1」の値が返っています。

Sample1

下の例では、object とobject2 が交差も接してもいないため、「0」の値が返っています。

 

 

 

ST_ConvexHull (object1, ,...) ・・・ オブジェクトの凸包を取得します

ST_ConvexHull (object1, ,...)

object で指定した空間オブジェクトの凸包ポリゴンを取得します。

Sample

下の例では、object列 と object2列の2つのポリゴンの凸包ポリゴンを取得しています。ST_ConvexHull関数を使う際は、フォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

集計ツールを使う事でも、同じように凸包ポリゴンを取得できます。凸ポリゴンを取得したいポリゴンを一つの列に集め、集計ツールで「SpatialObjConbexHull」項目を選択することで、ポリゴンの凸包ポリゴンを取得できます。

 

 

ST_CreateLine (point1, point2...) ・・・ 指定されたポイントとラインをシーケンス内で接続して、線分を作成します

ST_CreateLine (point1, point2...)

point で指定したポイントオブジェクトとラインをシーケンス内で接続して、線分を作成します。object1、object2 ... で選んだ順番で接続してラインを作成していくため、オブジェクトを選ぶ順番には注意が必要です。

Sample

下の例では、object列 と object2列の2つのポリゴンの凸包ポリゴンを取得しています。ST_ConvexHull関数を使う際は、フォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

( )内で選んだオブジェクト順にポイント・ラインが接続されています。(point1 → point2 → pointe3 → line1)

ポリビルドツールでも似た機能がありますが、ST_CreateLine関数とは違い、ポイントからラインを作成する事しかできないので注意が必要です。(「ソースフィールド」項目で選択した列にポイント以外のオブジェクトが存在する場合、エラーで止まります。)

ポイントからラインを作成する場合は、下のようにポイントオブジェクトを一つの列に集めて作成します。

 

 

ST_CreatePoint (x, y) ・・・ 指定された経度と緯度の座標のポイントを作成します

ST_CreatePoint (x, y)

x で経度、y で緯度を指定し、指定した座標のポイントオブジェクトを作成します

Sample

下の例では、x、y 列の値からポイントを作成しています。ST_CreatePoint関数を使う際は、フォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

ポイント作成ツールを使う事でも、同じようにポイントを取得できます。

 

 

ST_CreatePolygon (object1、object2...) ・・・ 指定したポイントとラインをシーケンスに接続してポリゴンを作成します

ST_CreatePolygon (object1、object2...)

指定したポイントとラインをシーケンスに接続してポリゴンを作成します。object1、object2 ... で選んだ順番で接続していくので、ポリゴンが自己交差を起こさない順番でポイント・ラインを指定する必要があります。

Sample

下の例では、x、y 列の値からポイントを作成しています。ST_CreatePolygon関数を使う際は、フォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

 

 

ST_Distance (object1, object2, units) ・・・ object1 から object2 までの距離を取得します

ST_Distance (object1, object2, units)

object1、object2 で指定した空間オブジェクト間の距離を、unit で指定した単位で取得します。unit には、キロメートル("Km")、マイル("Mi")、フィート("Feet")のいずれかを指定します。

object1(ソース空間オブジェクト) には、ポイントを指定する必要があります。object2(行き先空間オブジェクト)には、ポイント、ライン、ポリゴン、どれでも指定することができます。

Sample

距離ツールを使っても、同じようにオブジェクト間の距離を算出できます。

 

 

ST_Length ・・・ 空間オブジェクトの直線の長さを取得します

ST_Length (object, units)

object1、object2 間の直線の距離を、units で指定した単位で取得します。unit には、キロメートル("Km")、またはマイル("Mi")のどちらかを指定します。

Sample

下の例では、object 列のポリゴンの(周りの)長さを、キロメートル単位で取得しています。

空間情報ツールを使う事でも、同じように区間オブジェクトの長さを取得できます。「長さ(キロメートル)」「長さ(マイル)」を選択すると、選択した単位の長さを取得できます。

 

 

 

ST_MaxX / ST_MaxY / ST_MinX / ST_MinY ・・・ 空間オブジェクトの最大、最小の緯度経度を取得します

ST_MaxX (object)

object で指定した空間ポリゴンの最大経度を数値で取得します。

ST_MaxY (object)

object で指定した空間ポリゴンの最大緯度を数値で取得します。

ST_MinX (object)

object で指定した空間ポリゴンの最小経度を数値で取得します。

ST_MinY (object)

object で指定した空間ポリゴンの最大経度を数値で取得します。

Sample

下の例では、object 列のポリゴンの最大・最小の緯度経度をそれぞれ取得しています。

空間情報ツールを使う事でも、同じように空間オブジェクトの最大・最小の緯度経度を取得できます。「境界短:XY座標フィールド」を選択すると、オブジェクトの最大・最小の緯度経度が数値で取得できます。(下の例では、より分かりやすくするために「境界短径:ポリゴン」にもチェックを入れてポリゴンに外接する四角形(境界短形)も出力しています。境界短形の4隅の点が、最大・最小の緯度経度です。)

 

 

ST_NumParts ・・・ 空間オブジェクト内の部品の数を取得します

ST_NumParts(object)

object で指定した空間ポリゴンの部品数を数値で取得します。

Sample

下の例では、object 列の空間オブジェクトの部品数を取得しています。(object は3つのポリゴンから、object2 は2つのポリゴンからできています。)

ポリスプリットツールとツールを組み合わせる事でも、同じように空間オブジェクトのパーツ数を取得できます。「空間フィールド」項目で対象の空間オブジェクト列、「以下に分割する」項目で「地域」を選択し、部品毎にバラバラにしてから、元のオブジェクトごとのラベルでグループ化してカウントすると、空間オブジェクトごとのパーツ数を取得できます。

ST_NumPoints ・・・ 空間オブジェクト内のポイント数を取得します

ST_NumPoints (object)

object で指定した空間ポリゴンのポイント数を数値で取得します。

Sample

下の例では、object 列の空間オブジェクトのポイント数を取得しています。(object は48個のポイントから、object2 は34個のポイントからできています。)

ST_ObjectType ・・・ 空間オブジェクト型を文字列値で取得します

ST_ObjectType(object)

object で指定した空間ポリゴンのオブジェクト型がポイントオブジェクトの場合は「Point」、ラインオブジェクトの場合は「Line」、ポリゴンオブジェクトの場合は「Polygon」を返します。

Sample

下の例では、それぞれのオブジェクトタイプが取得されました。

 

 

 

ST_Dimension (object) ・・・ 空間オブジェクトの次元を確認します

ST_Dimension (object)

object で指定した空間オブジェクトがポイントの場合は 0、ラインの場合は 1、ポリゴンの場合は 2を返します。

Sample

下の例では、object 列の空間オブジェクトがポリゴンの場合は「2」、ラインの場合は「1」、ポイントの場合は「0」が返っています。

 

ST_StartPoint ・・・ 空間オブジェクトの最初の点を取得します

ST_StartPoint (object)

object で指定した空間ポリゴンの最初のポイントを取得します。

Sample

下の例では、object 列のラインオブジェクトから、最初のポイントを取得しています。ST_StartPoint関数を使う際は、フォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

 

 

ST_EndPoint  ・・・ 空間オブジェクトの最後の点を取得します

ST_EndPoint (object)

object で指定した空間オブジェクトの最後の点を、ポイントオブジェクトとして取得します

Sample

下の例では、object 列のラインの最後のポイントを取得しています。ST_EndPoint関数を使う際は、フォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

 

 

ST_PointN ・・・ 空間オブジェクトの n 番目の点を取得します

ST_PointN (object, n)

object で指定した空間ポリゴンのn 番目の点を取得します。

 

Sample

下の例では、object 列の空間オブジェクトの 2 番目のポイントを取得しています。空間オブジェクトがポイントである object3 には、2番目のポイントは存在しないため Null が返っています。ST_PointN関数を使う際は、フォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

 

 

 

ST_RandomPoint ・・・ 空間オブジェクト内のランダムな点を取得します

ST_RandomPoint (object)

object で指定した空間ポリゴンのランダムな点を取得します。取得されるポイントは実行する度に変わります。

 

Sample

下の例では、object 列の中からランダムにポイントを取得しています。実行する度に、ポイントの位置はそれぞれ変化します。ST_RandomPoint関数を使う際は、フォーミュラツールの出力データ型を「SpatialObj」型にする必要があります。

 

 

ST_Relate ・・・ オブジェクトが提供された DE-9IM 関係を満たすか確認します

ST_Relate (object1, object2, relation)

object1 、object2 でそれぞれ空間オブジェクトを選択し、relation でDE-9IMに基づいた空間述語(Spatial Predicate)を指定します。指定した空間述語に一致する場合は「1」(True)、それ以外の場合は「0」(False) の値が返ります。

ST_Relate関数を使わなくても、大抵のことは他の空間関数や空間ツールを組み合わせて行うことができます。しかし、ST_Relate関数を使うと、より複雑な空間オブジェクトの指定をひとつの関数で行う事ができます。

補足

relation で指定するDE-9IMに基づいた空間述語(Spatial Predicate)は、F、T、*(アスタリスク)を使った 9字で構成されます。

詳しくは こちらのページ のSpatial predicates(空間述語)の項目を参照してください。

 

Sample

下の例では、2つの等しいポリゴン object と object2 に対して、 ST_Relate関数を使用しています。relation の空間述語で「*T*T*****」を指定し、2つのポリゴンが等しい場合は 0 の値、それ以外の場合は 1 の値が返るように指定しています。

 

 

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

Formula_Function_Spatial 

※Alteryx Designer 2019.1.6.58192時点の情報です

Alteryxの導入はぜひKCMEで!

セルフサービスデータ分析ツール「Alteryx」は4週間無償トライアルが可能です。

製品に対する操作方法、技術的な質問などは導入前・導入後に関わらずメールにてお答えします。また、Alteryxを用いた環境構築、開発、ヘルプデスク対応、ハンズオン、トレーニング、ワークフロー作成なども承りますので、お気軽にご相談ください。

おすすめの記事