在直线的左侧和右侧查找多边形

时间:2019-03-20 11:17:51

标签: postgresql postgis

我有线表和多边形表。某些线(可能占所有线的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索引)。

有什么想法要加快它的速度吗,或者可能是完全不同的方法来确定左右两侧的多边形?

1 个答案:

答案 0 :(得分:0)

如果您的表是polygonslines,建议您在 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)
    )