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)
そのため、右と左はゼロより大きくゼロより小さいです。