【发布时间】:2016-06-28 21:57:25
【问题描述】:
我正在尝试获取不在几个多边形内的所有点:
SELECT pt.geom
FROM points pt, polygons po
WHERE ST_Within(pt.geom, po.geom) = false;
但不起作用——我得到了所有的分数。
【问题讨论】:
标签: postgresql geospatial postgis
我正在尝试获取不在几个多边形内的所有点:
SELECT pt.geom
FROM points pt, polygons po
WHERE ST_Within(pt.geom, po.geom) = false;
但不起作用——我得到了所有的分数。
【问题讨论】:
标签: postgresql geospatial postgis
你看到“所有点”的原因是你有不止一个点和不止一个多边形。如果你只有其中一个,它会起作用。
实际上有几种方法可以解决这个问题,但这可能是最简单和最快的。
如果您有主键或唯一键(例如 gid):
SELECT pt.*
FROM points pt
WHERE pt.gid NOT IN (
SELECT pt.gid FROM points pt, polygons po
WHERE ST_Within(pt.geom, po.geom)
);
请注意,它还将返回任何几何形状为 NULL 的点。
另一种方法是使用EXCEPT:
SELECT pt.*
FROM points pt
EXCEPT SELECT pt.*
FROM points pt, polygons po
WHERE ST_Within(pt.geom, po.geom);
还有一种方法是使用 ST_Union 将所有多边形融合成一个大几何体,但这种方法会慢得多。
【讨论】:
SELECT pt.geom
FROM points pt, polygons po
WHERE ST_Within(pt.geom, po.geom)
【讨论】: