我正在开发一个使用 SQL Server 2008 数据库的应用程序。在这个数据库中,我有一个名为 Session 的表,它有两个字段 Longitude 和 latitude,它们指示用户的位置。在另一个名为 Zone 的表上,我有一个几何类型的 area 属性。如何检查用户的经纬度坐标是否属于某个几何?
谢谢
我正在开发一个使用 SQL Server 2008 数据库的应用程序。在这个数据库中,我有一个名为 Session 的表,它有两个字段 Longitude 和 latitude,它们指示用户的位置。在另一个名为 Zone 的表上,我有一个几何类型的 area 属性。如何检查用户的经纬度坐标是否属于某个几何?
谢谢
你有一个几何,它在欧几里得几何中存储了一个形状,你想把地球上的一个点与它关联起来,用纬度和经度表示,看看它是否在里面。由于 SQL 存储数据的方式,这不起作用。您可能需要使用地理数据类型来检查这一点 - 纬度和经度是球体上的点(实际上是大地测量数据,因为地球不是一个球体。)
有关它们为何不同的更多信息,请参阅microsoft 的此说明。还有这个关于stackoverflow的答案:GEOMETRY and GEOGRAPHY difference SQL Server 2008
要将数据从几何转换为地理,请尝试: Geography::STGeomFromText(cast(GeomCol as varchar(max)), 4326)
然后你可以使用STIntersects
微软在此处记录的方法。