gpt4 book ai didi

postgresql - POSTGIS "ST_Contains"返回空查询

转载 作者:行者123 更新时间:2023-11-29 14:15:58 26 4
gpt4 key购买 nike

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

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

输出-pgAdmin enter image description here

我使用的命令:

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

我的表:

  1. POIS 表内容

[ POIS 3

  1. 表格内容

[ Gemeinden 4

QGIS 截图:

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

[ enter image description here 5

  1. 仅 POIS 形状文件:

[ enter image description here 6

  1. 仅 Gemeinden 形状文件:

[ enter image description here 7

更新:

我使用命令从多边形创建了一个多边形表

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 表和新创建的表的 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);

仍然返回一个空查询。

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

最佳答案

首先确保两个表的SRID必须相同。如果不相同,则空间查询将不起作用。其次将多边形转换为单个多边形。以下链接可能有帮助

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);

关于postgresql - POSTGIS "ST_Contains"返回空查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48010568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com