ST_StayPoint は、軌跡内のすべての滞在ポイント (移動オブジェクトが定義された空間半径内に最小滞在時間留まった場所) を検出します。
2 つのバリアントが利用可能です:
| 関数 | 使用シーン |
|---|---|
ST_StayPoint | 各滞在ポイントを開始時刻と終了時刻とともに返します。軌跡に同じエリアでの複数回の往復移動が含まれる場合は、クラスター化されたバリアントを使用します。 |
ST_stayPointSpatialClustered | 軌跡に同じエリアでの複数回の往復移動が含まれています。空間的に重複する滞在ポイントをマージし、各場所での合計滞在時間を返します。 |
構文
SETOF trstaypoint ST_StayPoint(trajectory traj, interval resample_int, float dr, interval dt, float thres);
TABLE(point geometry, length interval) ST_stayPointSpatialClustered(trajectory traj, interval resample_int, float dr, interval dt, float thres, float merger)パラメーター
| パラメーター | 説明 |
|---|---|
traj | 軌跡オブジェクト。 |
resample_int | リサンプリング間隔。リサンプリングにより、軌跡に沿ったサンプリングポイントの間隔が均等になります。間隔を短くすると、滞在ポイントの検出精度は向上しますが、計算時間が増加します。リサンプリングをスキップするには、この値を '100000 day' のような大きな値に設定します。詳細については、「ST_Resample」をご参照ください。 |
dr | 空間半径のしきい値。サンプリングポイントがこの距離内にある場合、候補となる滞在ポイントの「周辺」にあると見なされます。単位は軌跡の空間参照系識別子 (SRID) に依存します。SRID 0 はユークリッド距離の単位を使用し、SRID 4326 はメートルを使用します。 |
dt | 時間ウィンドウのしきい値。サンプリングポイントの時間差がこの間隔内にある場合、候補となる滞在ポイントの「周辺」にあると見なされます。この値は、1 回の滞在で想定される時間よりもわずかに長く設定します。 |
thres | 候補ポイントが滞在ポイントとして認定されるために、その「周辺」に存在しなければならないサンプリングポイントの最小数。サンプリングポイントは、距離が dr 未満で、時間差が dt 未満の場合に候補ポイントの「周辺」にあると見なされます。連続する複数のポイントが条件を満たす場合、最も多くのサンプリングポイントに囲まれたポイントが最終的な滞在ポイントとして選択されます。 |
merger | (ST_stayPointSpatialClustered のみ) マージ距離のしきい値。異なる時間に検出された 2 つの滞在ポイント間の距離がこの値未満の場合、それらは 1 つにマージされます。 |
戻り値
ST_StayPoint は trstaypoint 値のセットを返します。trstaypoint は、次の列を持つ複合型です:
| 列 | 型 | 説明 |
|---|---|---|
point | geometry | 滞在ポイントの位置。 |
startt | timestamp | 滞在が開始する時刻。滞在の一部として識別された最初のサンプリングポイントに基づきます。 |
endt | timestamp | 滞在が終了する時刻。滞在の一部として識別された最後のサンプリングポイントに基づきます。 |
ST_stayPointSpatialClustered は、次の列を持つテーブルを返します:
| 列 | 型 | 説明 |
|---|---|---|
point | geometry | マージされた滞在クラスターの位置。 |
length | interval | このクラスターにマージされたすべての滞在の合計滞在時間。 |
説明
軌跡内のポイントは、少なくとも thres 個のサンプリングポイントがそのポイントから dr の距離内かつ dt の時間内に存在する場合に、滞在ポイントとして認定されます。
`thres` の計算:最小滞在時間をリサンプリング間隔で割り、1 を加えます。例えば、5 分のリサンプリング間隔で 30 分以上の滞在を検出する場合:
thres = (30 min / 5 min) + 1 = 7これらのパラメーターで、dr を 250 m、dt を 40 分 (最小滞在時間の 30 分よりわずかに長い) に設定します。この例では、500 m のゾーン内の滞在を検出します。
軌跡に同じエリアでの複数回の往復移動が含まれる場合は、ST_stayPointSpatialClustered を使用して、空間的に類似した滞在ポイントを集約します。この関数は、滞在場所の総数 (行数として) と各場所での合計滞在時間を返します。
滞在ポイントは通常、駐車場、ガソリンスタンド、頻繁に訪れる場所など、移動オブジェクトが停止または滞在した意味のある場所に対応します。
例
1回の通過の軌跡における滞在ポイントの検出
SELECT ST_AsText((ST_StayPoint(traj, '12 hour', 3, '3 day', 3)).point),
(ST_StayPoint(traj, '12 hour', 3, '3 day', 3)).*
FROM (
SELECT ST_MakeTrajectory(
'STPOINT'::leaftype,
'LINESTRING(1 1, 2 2, 3 3, 10 10, 11 11, 12 12, 13 13, 3 3, 2 2, 2 2, 3 3, 8 8,10 10,9 9,8 8)',
'2000-01-01',
'2000-01-01'::timestamp + '1 day'::interval * (ST_NPoints('LINESTRING(1 1, 2 2, 3 3, 10 10, 11 11, 12 12, 13 13, 3 3, 2 2, 2 2, 3 3, 8 8,10 10,9 9,8 8)') - 1),
'{}'
) AS traj
) tj;クエリは、4 つの滞在ポイントをその位置 (人間が読める WKT 形式、ST_AsText を使用) と時間範囲とともに返します:
st_astext | point | startt | endt
----------------+--------------------------------------------+---------------------+---------------------
POINT(1 1) | 0101000000000000000000F03F000000000000F03F | 2000-01-01 00:00:00 | 2000-01-03 00:00:00
POINT(11 11) | 010100000000000000000026400000000000002640 | 2000-01-04 00:00:00 | 2000-01-07 00:00:00
POINT(3 3) | 010100000000000000000008400000000000000840 | 2000-01-08 00:00:00 | 2000-01-11 00:00:00
POINT(9.5 9.5) | 010100000000000000000023400000000000002340 | 2000-01-12 00:00:00 | 2000-01-15 00:00:00point列は座標をバイナリ WKB 形式で格納します。上記のクエリで示されているように、ST_AsText()を使用して、人間が読める WKT 形式の座標に変換してください。
複数回の往復移動にわたる滞在ポイントの集約
SELECT ST_AsText((ST_stayPointSpatialClustered(traj, '12 hour', 3, '3 day', 3, 3)).point),
(ST_stayPointSpatialClustered(traj, '12 hour', 3, '3 day', 3, 3)).*
FROM (
SELECT ST_MakeTrajectory(
'STPOINT'::leaftype,
'LINESTRING(1 1, 2 2, 3 3, 10 10, 11 11, 12 12, 13 13, 3 3, 2 2, 2 2, 3 3, 8 8,10 10,9 9,8 8)',
'2000-01-01',
'2000-01-01'::timestamp + '1 day'::interval * (ST_NPoints('LINESTRING(1 1, 2 2, 3 3, 10 10, 11 11, 12 12, 13 13, 3 3, 2 2, 2 2, 3 3, 8 8,10 10,9 9,8 8)') - 1),
'{}'
) AS traj
) tj;同じ軌跡でも、マージ距離を 3 (最後のパラメーター) に設定した ST_stayPointSpatialClustered を使用すると、2 つのマージされた滞在クラスターが生成されます:
st_astext | point | length
--------------------+--------------------------------------------+--------
POINT(10.25 10.25) | 010100000000000000008024400000000000802440 | 6 days
POINT(2 2) | 010100000000000000000000400000000000000040 | 5 days前の例の 4 つの個別の滞在ポイントは、空間的な近接性に基づいて 2 つのクラスターに統合されます。length 列は、各場所での累積された合計滞在時間を示します。