提问人:I_suck_at_sql 提问时间:11/17/2023 更新时间:11/17/2023 访问量:22
SQL:多边形外点的结果
SQL: Result for Points Outside Polygons
问:
我有一个 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 语句会解释这一点,但它似乎不起作用。 我将不胜感激任何建议,因为我完全被难住了。
我正在寻找的结果是,如果 long/lat 不在多边形中,那么它应该返回“多边形外”。
我尝试了以下方法来修复:
- 将ST_Intersects替换为ST_Within;产生同样的问题
- 添加另一个 CASE 语句;
WHEN NOT ST_Within(ST_SetSRID(ST_MakePoint(LONGITUDE, LATITUDE}), 4326), p.geometry) THEN 'Outside Polygon'
但这似乎没有效果,
- 我还尝试将左联接添加到表本身,但我无法让它工作。
我正在寻找的结果是,如果 long/lat 不在多边形中,那么它应该返回“多边形外”。
答:
1赞
Bart McEndree
11/17/2023
#1
您的 WHERE 子句阻止了多边形之外的任何点。 ST_Intersects 如果两个几何图形相交,则返回 true。 ST_Within 如果几何图形 A 位于几何图形 B 内,则返回 TRUE。 您需要调整或删除 WHERE 子句以包含多边形外部的点。
评论
0赞
I_suck_at_sql
11/18/2023
感谢您伸出援手!如果我理解正确的话,这意味着如果我去掉 INTERSECTS 子句,它会起作用吗?
0赞
Bart McEndree
11/18/2023
在开发 SQL 语句时,我通常先尝试不使用 WHERE 子句。相反,我指定 SELECT Top 10 * FROM my.table...。然后,我查看结果并选择所需的列。SELECT Top 10 'Example Status' as Status, Column1, Column2, geometry FROM my.table.通过 WHERE 子句确定要排除的行是最后一步。完成后,我删除了前 10 名部分。
0赞
Bart McEndree
11/18/2023
@I_suck_at_sql如果此答案解决了您的问题,请考虑通过单击复选标记来接受它。这表明您已经找到了解决方案并为您提供了一些声誉。
0赞
Ian Turton
11/18/2023
如果你把交集放到案例陈述中,它会起作用
0赞
I_suck_at_sql
11/20/2023
@IanTurton这就是我今天的询问!谢谢。
评论