内部多边形中的SQL Geography点在ST​​Intersect上未返回true(但使用Geometry返回true)

时间:2013-12-18 08:51:13

标签: sql geometry polygon point geography

我不想将我的地理数据转换为几何图形,因此它在STIntersect中返回true。

以下是SQL中的代码:

DECLARE @point GEOGRAPHY = GEOGRAPHY::Point(1, 1, 4326)
DECLARE @polygon GEOGRAPHY = GEOGRAPHY::STGeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))', 4326)

SELECT @polygon.STIntersects(@point), @point.STIntersects(@polygon)

以下内容返回false(0),但是如果我使用:

DECLARE @point GEOMETRY = GEOMETRY::Point(1, 1, 4326)
DECLARE @polygon GEOMETRY = GEOMETRY::STGeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))', 4326)

SELECT @polygon.STIntersects(@point), @point.STIntersects(@polygon)

它返回true,是否有我遗漏的东西?我所知道的是地理是3D平面,几何是平面地图,但是如果点在多边形中,我正在使用地球进行计算。

PS:它与STContains,STWithin,STOverlaps不兼容

使用Microsoft SQL Server 2012

1 个答案:

答案 0 :(得分:9)

这有效:

DECLARE @point GEOGRAPHY = GEOGRAPHY::Point(1, 1, 4326)
DECLARE @polygon GEOGRAPHY = GEOGRAPHY::STGeomFromText('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))', 4326)

SELECT @polygon.STIntersects(@point), @point.STIntersects(@polygon)

你需要注意描述geography多边形的“方向” - 考虑一个定义为赤道周围圆形的多边形 - 你打算指定北半球还是南半球?

请参阅here

  

在椭圆体系中,多边形没有意义,或者没有方向的含糊不清。例如,赤道周围的环是否描述了北半球或南半球?如果我们使用地理数据类型来存储空间实例,我们必须指定环的方向并准确描述实例的位置。椭球系统中多边形的内部由左手定则定义。