【问题标题】:How to know that point lies within geom(Multipolygon) in postgresql如何知道该点位于 postgresql 中的 geom(Multipolygon) 内
【发布时间】:2021-02-22 10:03:43
【问题描述】:

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

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

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

谁能帮助我在这里做错了什么?提前致谢。

【问题讨论】:

  • 我们需要知道多边形。
  • 它是几何格式。我将如何分享geom?
  • 原样,EWKB 或 EWKT。

标签: sql postgresql gis postgis


【解决方案1】:

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

要仅过滤给定多边形内的记录,您必须在 WHERE 子句中调用 ST_Contains

考虑以下数据样本

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 2020-03-09
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多