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的高级应用(3)--线性参考

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值