PostGIS计算线段中间的某一点到该线段起点或终点的距离

假设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

PostGIS计算线段中间的某一点到该线段起点或终点的距离_第1张图片

 

参考:

基于PostGIS的高级应用(3)--线性参考

PostGIS 2.2.0dev(最新版)手册中文完整版

你可能感兴趣的:(程序/工具使用,PostGIS,线段某一部分的长度)