我已经使用QGIS将两个形状文件导入到pgAdmin 4(PostgreSQL)中,我使用PostGIS扩展来访问空间命令。
我想检查Gemeinden(多面)表中包含的所有POIS(点)。为了实现这一点,我使用空间命令" ST_Contains" ([关于命令的postgis.net文档])1。与点实际上在多边形中的事实相反,返回的查询为空(请参阅QGIS和输出屏幕截图)。可能是什么问题?任何帮助,将不胜感激。提前谢谢!
我使用的命令:
SELECT * FROM public."POIS" AS pois INNER JOIN public."Gemeinden" AS gem
ON (1 = 1)
WHERE ST_Contains(gem.geom, pois.geom) = true;
我的桌子:
[ 3
[ 4
QGIS截图:
[ 5
[ 6
[ 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的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);
仍会返回一个空查询。
有什么想法吗?提前谢谢!
答案 0 :(得分:3)
首先确保两个表的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);
答案 1 :(得分:0)
我已经通过返回QGIS并将之前导入的形状文件保存为相同的SRID来解决问题。显然,我在数据库中转换SRID的代码不起作用。
注意:我已经为两个shape文件做了这个,只是为了确定。
可能影响结果的另一个因素是从QGIS导入数据库时选择“转换为单个多边形”框。
The box that I ticked for both shape-files while importing
PS:我使用德语版的QGIS