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:
- POIS table 内容
[3
- 一般table内容
[4
QGIS 截图:
- 两个形状文件在一起:
[5
- 仅 POIS 形状文件:
[6
- 只有 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
我已经使用 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:
- POIS table 内容
[
- 一般table内容
[
QGIS 截图:
- 两个形状文件在一起:
[
- 仅 POIS 形状文件:
[
- 只有 Gemeinden 形状文件:
[
更新:
我使用命令
从多个多边形中创建了一个多边形 tableCREATE 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 和新创建的 SRIDSELECT 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