我正在对 MS SQL 进行空间查询,并且正在检查给定点是否在区域内。我有一个包含该点的区域的查询,但查询返回 0(假):
declare @area geography;
declare @point geography;
set @area = geography::STGeomFromText('POLYGON((87.3924 76.73386,-61.67004 76.73386,-61.67004 27.12494,87.3924 27.12494,87.3924 76.73386))', 4326);
set @point = geography::STGeomFromText('POINT(-2.7933 56.3412)', 4326);
select @area.STIntersects(@point);
select @point.STIntersects(@area);
对于这两个SELECT
语句,返回值都是 0,这意味着它们不相交。奇怪的是,当我将区域缩小一点时,查询返回 1
我知道多边形的顺序很重要,如果我在另一个方向指定它,它确实返回 1。我的问题是:
- 我怎么知道指定它们的顺序?(我只有北、东、南和西值,可能跨越赤道)
- 为什么稍微小一点的区域(在相同方向)会返回匹配项?
这些是这些 WKT 的视觉表示:
编辑:这是三个不同大小的多边形(从最大到最小):
1. POLYGON((-171.173863132129 82.6444755487971,-109.298863132129 82.6444755487971,-109.298863132129 -2.35770630179323,-171.173863132129 -2.35770630179323,-171.173863132129 82.6444755487971))
2. POLYGON((77.2050431178711 76.1254124064562,-71.8574568821289 76.1254124064562,-71.8574568821289 37.7996777961385,77.2050431178711 37.7996777961385,77.2050431178711 76.1254124064562))
3. POLYGON((38.8847306178711 68.43690689125,-35.6465193821289 68.43690689125,-35.6465193821289 48.1758722609095,38.8847306178711 48.1758722609095,38.8847306178711 68.43690689125))
这里奇怪的是第一个多边形匹配英国的所有点。第二个查询在英国没有匹配,第三个只匹配北部的几个点。
如果您将查询可视化,您会看到第二个和第三个包括完整的英国,而第一个完全关闭可视化工具:http ://thisissammysaccount.github.io/VisualizeWellKnownText/
所以我想,问题真的是,我如何将谷歌地图边界映射到空间查询。(基本上我想显示获取当前视口中的所有位置)