我正在使用 Postgis 来:
- 计算沿线的累积距离(以米为单位)
- 将累积距离存储在“m”中
我有一张表,这条线上有一个点,每一行都有纬度和经度坐标。所有行的“m”值为 0。
下面的代码很好地让我知道了第一个点和下一个点之间的距离。
SELECT a.geom
FLOOR(
ST_Distance(ST_Transform(a.geom, 3857), ST_Transform(b.geom, 3857)) * cosd(42.3521))
AS dist
FROM line a
LEFT JOIN line b
ON a.id = b.id + 1
但是,它并没有加起来,也没有更新“m”值。
我尝试了以下的一组排列,但它们都没有存储前一行的“m”值的累积总和,再加上这一点与前一点之间距离的计算。
WITH next AS (
SELECT
ST_Distance(ST_Transform(a.geom, 3857), ST_Transform(b.geom, 3857)) * cosd(42.3521)
AS dist,
a.id AS rowid,
FROM line a
JOIN line b
ON a.id = b.id + 1
)
UPDATE line a
SET m = FLOOR(next.m + next.dist)
FROM next
WHERE a.id = next.rowid
RETURNING a.m, next.dist;
或者
update line a
set m = FLOOR(a.m + prev.dist)
from (select
l.*,
ST_Distance(ST_Transform(
lag(geom) over (order by l.id asc)
, 3857), ST_Transform(geom, 3857)) * cosd(42.3521) as dist
from line l
) AS prev
where prev.id = a.id - 1
returning prev.m, prev.dist, a.m
有任何想法吗?