postgresql SQL:多边形外部的点的结果

mrphzbgm  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(126)

我有一个SQL语句,它根据地址搜索创建一个点,并根据点所在的位置返回一个值。如果它位于具有特定属性值的多边形的一部分内,它将返回相应的结果(参见下面的CASE语句)。

SELECT
CASE
        WHEN p.column1 IS NOT NULL AND p.column2 = 'Yes' THEN 'Response_A'
        WHEN p.column1 IS NOT NULL AND p.column2 = 'No' THEN 'Response_B'
        WHEN p.column1 IS NOT NULL AND p.column2 IS NULL THEN 'Response_C'
        ELSE 'Outside Polygon'
    END AS Status,
    p.column1,
    p.column2,
    p.geometry
FROM
    my.table AS p
WHERE ST_Intersects(ST_SetSRID(ST_MakePoint(LONGITUDE, LATITUDE), 4326),
    ST_Transform(p.geometry, 4326))

字符串
然而,我的问题在于点不在多边形内。(我知道经度和纬度在一个多边形内)我按预期返回一个结果,并具有预期的响应。但是如果我插入任何多边形的值,表是空的,它什么也不返回。我认为ELSE语句会解释这一点,但是好像不起作用。我很感激任何建议,因为我完全被难倒了。
我寻找的结果是,如果长/纬度不在一个多边形,那么它应该返回'外部'。
我尝试了以下方法来修复:

  • 将ST_Intersects替换为ST_Within;产生相同的问题
  • 添加另一个CASE语句;
WHEN NOT ST_Within(ST_SetSRID(ST_MakePoint(LONGITUDE, LATITUDE}), 4326), p.geometry) THEN 'Outside Polygon'


但这似乎没有什么效果

  • 我还尝试在表本身添加一个左连接,但我无法让它工作。

我寻找的结果是,如果长/纬度不在一个多边形,那么它应该返回'外部'。

wb1gzix0

wb1gzix01#

WHERE子句阻止多边形外部的任何点。ST_Intersects如果两个几何相交则返回true。ST_Within如果几何A在几何B内则返回TRUE。您需要调整或删除WHERE子句以包含多边形外部的点。

相关问题