从线的左侧和右侧查找多边形

问题描述 投票:1回答:1

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

知道如何加快速度,或者完全不同的方法来确定左边和右边的多边形?

postgresql postgis
1个回答
0
投票

如果你的表是polygonslines,我建议在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)
    )
© www.soinside.com 2019 - 2024. All rights reserved.