bpl*_*lmp 3 postgresql postgis geospatial
我试图获得不在几个多边形内的所有点:
SELECT pt.geom
FROM points pt, polygons po
WHERE ST_Within(pt.geom, po.geom) = false;
Run Code Online (Sandbox Code Playgroud)
但是不起作用 - 我得到所有的积分.
您看到"所有点"的原因是您有多个点和多个多边形.如果你只有其中一个,它会工作.
实际上有几种方法可以解决这个问题,但这可能是最简单,最快捷的方法.
如果您有主键或唯一键(例如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)
);
Run Code Online (Sandbox Code Playgroud)
请注意,它还将返回任何具有NULL几何的点.
另一种方法是使用EXCEPT:
SELECT pt.*
FROM points pt
EXCEPT SELECT pt.*
FROM points pt, polygons po
WHERE ST_Within(pt.geom, po.geom);
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用ST_Union将所有多边形融合成一个大的几何体,但这种方法要慢得多.
| 归档时间: |
|
| 查看次数: |
1623 次 |
| 最近记录: |