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
这有效:
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- 考虑定义为赤道周围的圆形的多边形 - 您是打算指定北半球还是南半球?
看到这里:
在椭圆体系中,多边形没有意义,或者没有方向的含糊不清.例如,赤道周围的环是否描述了北半球或南半球?如果我们使用地理数据类型来存储空间实例,我们必须指定环的方向并准确描述实例的位置.椭球系统中多边形的内部由左手定则定义.