【发布时间】: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