[英]Storing results of if a point is in a polygon in SQL
我需要确定 PointTable 中的几何点是否位于存储在 PolygonTable 中的多边形内。 这两个表通过 Id 链接。 我需要查询来检查两个表中 Id 相等的每个 xy 点。 我想将结果(如果点在多边形中)存储在表中,几何点位于新列 IsInBox1 和 IsInBox2 下。 我认为我需要使用的 function 是 STContains。 我已将这两个表说明为 PolygonTable 和 PointTable。 我使用多边形一词来表示实际的多边形数据,并使用字母 xy 来表示点数据。
多边形表
ID | 盒子1 | 方框2 |
---|---|---|
1 | 多边形 | 多边形 |
2 | 多边形 | 多边形 |
点表
ID | 行 ID | XY |
---|---|---|
1 | 1 | xy |
1 | 2 | xy |
1 | 3 | xy |
2 | 1 | xy |
2 | 2 | xy |
这应该是查询后的结果。
点表
ID | 行 ID | XY | 收件箱1 | 收件箱2 |
---|---|---|---|---|
1 | 1 | xy | 1 | 1 |
1 | 2 | xy | 1 | 0 |
1 | 3 | xy | 0 | 1 |
2 | 1 | xy | 0 | 1 |
2 | 2 | xy | 1 | 0 |
这是我尝试过的一些代码。 我正在使用 SQL 服务器。 谢谢。
SELECT Id, Box1, Box2
FROM PolygonTable
WHERE Box1.STContains(Select XY From PointTable)
) = 1 AS IsInBox1;
我想你想要这样的东西:
SELECT
PointTable.Id,
PointTable.RowId,
PointTable.XY,
PolygonTable.Box1.STContains(PointTable.XY),
PolygonTable.Box2.STContains(PointTable.XY)
FROM PolygonTable
INNER JOIN PointTable ON PointTable.Id=PolygonTable.Id
这是假设您要根据 Id 列匹配 2 个表。
在这种情况下,STContains 像 time 一样传递一个点并返回一个位 - true/false - is in/is not it。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.