我有线条表和多边形表。有些线(可能是所有线的1%)位于多边形之间的边界上(大多数线只位于一个多边形内)。
如何有效地确定给定线的“左边”和“右边”的多边形?
这是我当前的实验:在左边和右边1米处生成平行线(ST_OffsetCurve),在结果中取第一个几何体,因为它可能是多线串(ST_GeometryN),取这些线的中间点(ST_LineInterpolatePoint),并查询包含这些线的多边形积分(ST_Contains)。
... WHERE ST_Contains(polygon.geom, ST_Transform(ST_LineInterpolatePoint(ST_GeometryN(ST_OffsetCurve(ST_Transform(line.geom,3857), -1),1), 0.5), 4326)
它工作,但它非常慢(当然,几何上有GIST索引)。
知道如何加快速度,或者完全不同的方法来确定左边和右边的多边形?
如果你的表是polygons
和lines
,我建议在ST_Intersects
的连接中过滤:
SELECT *
FROM polygones p INNER JOIN lines l ON ST_Intersects(p.geom, l.geom)
WHERE
ST_Contains(
polygon.geom,
ST_Transform(
ST_LineInterpolatePoint(
ST_GeometryN(
ST_OffsetCurve(
ST_Transform(line.geom,3857)
, -1)
, 1)
, 0.5)
, 4326)
)