POSTGIS "ST_Contains" returns 空查询

POSTGIS "ST_Contains" returns a empty query

我已经使用 QGIS 将两个形状文件导入到 pgAdmin 4 (PostgreSQL) 中,我使用 PostGIS 扩展来访问空间命令。

我想检查 Gemeinden(多面体)中包含的所有 POIS(点)table。为此,我使用了空间命令 "ST_Contains"([postgis.net 有关该命令的文档])1。与点实际上在多边形中的事实相反,返回的查询是空的(参见 QGIS 和输出截图)。可能是什么问题?任何帮助,将不胜感激。提前致谢!

输出-pgAdmin

我使用的命令:

SELECT * FROM public."POIS" AS pois INNER JOIN public."Gemeinden" AS gem
ON (1 = 1)
WHERE ST_Contains(gem.geom, pois.geom) = true;

我的tables:

  1. POIS table 内容

[3

  1. 一般table内容

[4

QGIS 截图:

  1. 两个形状文件在一起:

[5

  1. 仅 POIS 形状文件:

[6

  1. 只有 Gemeinden 形状文件:

[7

更新:

我使用命令

从多个多边形中创建了一个多边形 table
CREATE TABLE polygon_table AS 
SELECT id, public."Gemeinden".kg_nr, public."Gemeinden".kg, (ST_DUMP(geom)).geom::geometry(Polygon,4326) AS geom FROM public."Gemeinden";

之后,我使用 :

更新了 POIS table 和新创建的 SRID
SELECT UpdateGeometrySRID('polygon_table','geom',4326);

SELECT UpdateGeometrySRID('POIS','geom',4326);

可悲的是,

SELECT pois.* FROM public."POIS" AS pois JOIN public."polygon_table" AS 
gem
ON ST_intersects(gem.geom, pois.geom);

仍然是returns一个空查询。

有什么想法吗?提前致谢!

首先确保两者的 SRID table 必须相同。如果不相同,则空间查询将不起作用。 其次将多边形转换为单个多边形。关注 link 可能会有所帮助

PostGIS - convert multipolygon to single polygon

最后,如果您只想获取与多边形相交的 POIS,那么以下查询就足够了

SELECT pois.* FROM public."POIS" AS pois JOIN public."Gemeinden" AS gem
ON  ST_intersects(gem.geom, pois.geom);

我已经通过返回 QGIS 并将之前导入的两个形状文件保存为相同的 SRID 解决了这个问题。显然,我在数据库中转换 SRID 的代码不起作用。

Right click on the shape-file

Selecting the SRID

注意:为了保险起见,我已经对两个形状文件都这样做了。

另一个可能影响结果的因素是在从 QGIS 导入数据库时​​选择了 "convert to single polygon" 框。

The box that I ticked for both shape-files while importing

PS: 我用的是德语版的QGIS