我有线表和多边形表。某些线(可能占所有线的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索引)。
有什么想法要加快它的速度吗,或者可能是完全不同的方法来确定左右两侧的多边形?
答案 0 :(得分:0)
如果您的表是polygons
和lines
,建议您在 join 中使用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)
)