首页 > 解决方案 > 如何知道该点位于 postgresql 中的 geom(Multipolygon) 内

问题描述

如何知道该点是否位于多边形内。我已经编写了查询,但不知何故它现在正在通过我给出的点在多边形内

SELECT area, id
st_contains(geom, ST_GeomFromText('POINT(-497680.2968362156 7868611.618275354)', 27700))  
FROM soil_shp
where area = 'some_area'

PS:我没有收到任何错误。只是返回假。虽然它应该在一个 id 中返回 true。

任何人都可以帮助我在这里做错了吗?提前致谢。

标签: sqlpostgresqlgispostgis

解决方案


假设这area不是另一个几何:

为了只过滤给定多边形内的记录,您必须ST_ContainsWHERE子句中调用。

考虑以下数据样本

CREATE TEMPORARY TABLE tmp (
  id INT,
  geom GEOMETRY(POLYGON,4326)
);

INSERT INTO tmp VALUES 
  (1,'SRID=4326;POLYGON((-4.52 54.29,-4.40 54.29,-4.40 54.25,-4.52 54.25,-4.52 54.29))'),
  (2,'SRID=4326;POLYGON((-4.71 54.11,-4.63 54.11,-4.63 54.09,-4.71 54.09,-4.71 54.11))');

在此处输入图像描述

注意:上方多边形内部的点对应于上图中的点SRID=4326;POINT(-4.46 54.27),仅用于说明目的。

放置ST_ContainsWHERE子句中会“丢弃”结果集中的非重叠多边形:

SELECT id FROM tmp
WHERE ST_Contains(geom,'SRID=4326;POINT(-4.46 54.27)');

 id 
----
  1

推荐阅读