我不想将我的地理数据转换为几何图形,因此它在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
答案 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:
在椭圆体系中,多边形没有意义,或者没有方向的含糊不清。例如,赤道周围的环是否描述了北半球或南半球?如果我们使用地理数据类型来存储空间实例,我们必须指定环的方向并准确描述实例的位置。椭球系统中多边形的内部由左手定则定义。