【问题标题】:Find polygons to the left and right from the line从线的左侧和右侧查找多边形
【发布时间】:2019-03-20 11:17:50
【问题描述】:

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

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

【问题讨论】:

  • 你能显示完整的查询和查询的EXPLAIN (ANALYZE, BUFFERS) 输出吗?取中间点可能会错过一些多边形。除非线条有方向,否则“左”和“右”不是很随意吗?

标签: postgresql postgis


【解决方案1】:

如果您的表是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)
    )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2018-08-29
    • 1970-01-01
    相关资源
    最近更新 更多