假设point的类型为点,road的类型为线。
求某一线段的整个长度用st_length就可以,如:select st_length(geom) from road where id=6。
postgis求线段某一部分的长度。
假设某一point就在某一road的起点与终点之间且挨着该road,现在想计算该point到该road的起点、终点的长度,若直接用road的起点、终点的坐标和singal的坐标来计算的话,若该road为曲线则误差会比较大,找了好久今天终于找到了如下方法:
利用ST_LineLocatePoint计算某一point(如果point不在这个road上,就取road上离这个point最近的点)到某一road的起点的长度与该road整个长度的百分比,返回的值介于0-1之间。
具体如下:
with p as(select geom pointGeom from point where id=2),
r as(select geom roadGeom,st_length(geom) roadLength from road where id=6),
fraction as(select ST_LineLocatePoint(roadGeom,pointGeom) f from p,r)
select roadLength*f toStartPoint,roadLength*(1-f) toEndPoint from r,fraction
参考: