sql - 如何知道该点位于 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。
任何人都可以帮助我在这里做错了吗?提前致谢。
解决方案
假设这area
不是另一个几何:
为了只过滤给定多边形内的记录,您必须ST_Contains
在WHERE
子句中调用。
考虑以下数据样本
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_Contains
在WHERE
子句中会“丢弃”结果集中的非重叠多边形:
SELECT id FROM tmp
WHERE ST_Contains(geom,'SRID=4326;POINT(-4.46 54.27)');
id
----
1
推荐阅读
- angular - Angular 表单验证器
- ios - 如何只允许单个 UIViewController 与 Xcode 倒置旋转?
- xcode - Xcode 13缺少产品文件夹,Finder菜单中的“显示构建文件夹”在哪里
- python - 在函数内部过滤熊猫数据框并返回过滤后的数据框
- azure - Databricks DBFS 文件浏览器未显示某些 DBFS 根位置
- javascript - 根据条件在MongoDB中分组
- autohotkey - Ctrl+单击以简单单击资源管理器 - AHK
- drone - 无人机管道中的条件值
- spring - 如何使用 RabbitMQ 仲裁队列进行数据复制
- apache-pulsar - 使用 java 程序创建租户时出错