postgresql - Postgis – 与 ST_Within 相反

标签 postgresql geospatial postgis

我正在尝试获取不在几个多边形内的所有点:

SELECT pt.geom 
FROM points pt, polygons po
WHERE ST_Within(pt.geom, po.geom) = false;

但没有用——我得到了所有的分数。

最佳答案

您看到“所有点”的原因是您有不止一个点和不止一个多边形。如果您只有其中之一,它就可以工作。

其实有几种方法可以解决这个问题,但这可能是最简单、最快的。

如果您有主键或唯一键(例如 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 将所有多边形融合成一个大几何体,但这种方法会慢得多。

关于postgresql - Postgis – 与 ST_Within 相反,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35977772/

相关文章:

python - Python 中的 scipy kmeans 和 kmeans2 聚类问题

indexing - 使用 Redis 和 Sinatra 为 Facebook 应用程序建立地理空间索引

ruby-on-rails - 保存前如何在 Rails 中使用 ST_GeoHash 和 ST_MakePoint postgis 函数?

postgresql - 我可以通过 libpq 将时间发送到 postgres 吗?

sql - 是否可以在左侧部分始终为空的地方编写右外连接?

geospatial - 根据 MemSQL 中插入的值自动计算 GEOGRAPHY 多边形

ruby-on-rails - PostGIS POLYGON() 需要多少参数?

postgresql - pg admin III 中没有 postgis shapefile 导入/导出管理器选项

ruby - 在 postgres heroku 中创建表

postgresql - pg_dump 并加载带有 UUID 列的表 PostgreSQL