2D 環境でポイントを表す非常に単純なテーブルをセットアップしました。Id 列は各ポイントの ID であり、geom 列は空間へのポイントのバイナリ表現です。
テーブルpublic.foo
Column | Type | Modifiers
--------+----------------------+--------------------------------------------
id | integer | not null default nextval('mseq'::regclass)
geom | geometry(Point,2100) |
索引:
"foo_pkey" PRIMARY KEY, btree (id)
"foo_index_gist_geom" gist (geom)
各ポイントから次のポイントまでの距離を見つけるために、このウィンドウ関数を使用しています:
select
id,
st_distance(geom,lag(geom,1) over (order by id asc)) distance
from
foo;
これにより、次の結果が得られます ( st_distance(geom,geom) は、2 つの geom データ型間の距離を示します)。
id | distance
----+------------------
1 |
2 | 27746.1563439608
3 | 57361.8216245281
4 | 34563.3607734946
5 | 23421.2022073633
6 | 41367.8247514439
....
distance(1) -> null since its the first point
distance(2) -> ~28km from point 1 to point 2
distance(3) -> ~57km from point 2 to point 3
and etc..
私の目的は、各ノードの開始から各ポイントから次のポイントまでの累積距離を見つけることです。たとえば、以下のモックテーブルのように:
id | distance | acc
----+------------------+-----
1 | |
2 | 27746.1563439608 | 27746.1563439608
3 | 57361.8216245281 | 85107.97797
4 | 34563.3607734946 | 119671.33874
where acc(1) is null because it is the first node,
acc(2) = acc(1) + dist(2)
acc(3) = acc(2) + dist(3)
and etc..
sum 関数と lag 関数を組み合わせてみましたが、postgresql は Windows 関数をネストできないと言っています。どのように進めればよいか、私は完全に困惑しています。誰でも私を助けることができますか?