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

Mil*_*027 7 sql geometry geography point polygon

我不想将我的地理数据转换为几何,只是因此它在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)
Run Code Online (Sandbox Code Playgroud)

以下返回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)
Run Code Online (Sandbox Code Playgroud)

它返回true,有什么我想念的吗?我所知道的是地理是3D平面,几何是平面地图,但是如果点在多边形中,我正在使用地球进行计算.

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

使用Microsoft SQL Server 2012

Dam*_*ver 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)
Run Code Online (Sandbox Code Playgroud)

您必须小心描述多边形的"方向" geography- 考虑定义为赤道周围的圆形的多边形 - 您是打算指定北半球还是南半球?

看到这里:

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

  • 这是一个很好的博客条目,解释了_left-hand_规则:http://danielwertheim.se/2012/12/03/sqlgeography-in-sql-server-2012-polygon-must-start-on-correct-position-no /例如:如果一个点指向该多边形的所有线的_left_,则它将与该多边形进行_intersect_。 (2认同)