Answers:
select (ST_Azimuth(h.vec) - ST_Azimuth(h.seg))
from (
select
ST_MakeLine(cp.p, point.geom) vec,
ST_MakeLine(cp.p,
ST_LineInterpolatePoint(
line.geom,
ST_LineLocatePoint(line.geom, cp.p) * 1.01)
) seg
from (
select
ST_ClosestPoint(line.geom, point.geom)
) p as cp
) as h
因此,其想法是计算最接近的线段与从最接近的点到您的点的向量之间的角度。
得到一条线上的最近点
select ST_ClosestPoint(line.geom, point.geom)
从最接近的点创建矢量
ST_MakeLine(cp.p, point.geom) vec
在您的行中创建一个向量
ST_MakeLine(
--original point
cp.p,
--find a point next to the closest point on line
ST_LineInterpolatePoint(line.geom,
ST_LineLocatePoint(line.geom, cp.p) * 1.01)) seg
得到方向之间的差异
ST_Azimuth(h.vec) - ST_Azimuth(h.seg)
因此左右将大于零且小于零。
ST_Azimuth(h.vec)
-是伪代码。h.vec
并且h.seg
是线条,因此准确地说,应该像是ST_Azimuth(ST_StartPoint(h.vec), ST_EndPoint(h.vec))