SQL Server - 使用空间数据 在现代应用程序中,空间数据的使用变得越来越普遍。SQL Server是一种强大的关系数据库管理系统,它提供了处理和存储空间数据的功能。 SQL Server具备一套丰富的空间数据类型和函数,可用于处理空间数据。其中最常用的是Geometry和Geography类型。Geometry类型适用于二维平面坐标系,而Geography类型则适用于地理坐标系。 通过将空间数据存储为数据库中的特殊类型列,您可以在SQL Server中轻松管理和查询空间数据。您可以创建索引、执行空间分析操作并运行空间查询以满足各种需求。 SQL Server还提供了强大的空间索引技术,使得对大量空间数据进行高效查询成为可能。通过使用空间索引,您可以加快空间查询的速度,并优化空间数据的处理性能。 除了基本的空间数据功能外,SQL Server还提供了许多其他功能,如空间数据导入导出、空间数据可视化等。这些功能使得在SQL Server中处理和分析空间数据变得更加方便和灵活。 总之,使用SQL Server可以轻松地处理和查询空间数据,无论是在开发Web应用程序、GIS系统还是其他与空间相关的应用场景中。它提供了丰富的功能和性能优势,使得处理空间数据变得更加高效和便捷。

我正在使用SQL Server 2008 R2进行实时位置感知服务。该服务主要接收用户的位置数据(纬度/经度),并返回用户周围的位置。 每个用户每秒钟发送一次数据。对于每个报告的位置,都会查询其他用户的位置,并返回有关他们的数据。 我使用纬度/经度作为浮点字段,并运行一个标量函数来找到最近的用户。 我猜这种方法可能不是最好的。我知道SQL Server中有空间数据结构,但不确定它们是否好用。我应该使用它们吗?如果是的话,什么是最佳方法? 为了使此操作尽可能快速和可扩展,我应该采取什么方法? 也许NoSQL对于空间数据更好? 附言:我说的是在任何给定时间都有数千到数万个用户。

是的,你应该使用它们。如果没有特殊的空间索引,通过函数运行针对成千上万个用户和数百万个位置的查询将会非常慢。 - ypercubeᵀᴹ
谢谢。但是有没有更好的方法?有没有什么能够更好地解决这个问题的办法? - roman
1个回答

是的,你应该使用空间索引,但你也应该考虑到简单可搜索性问题的限制。

空间索引适用于在特定区域内查找位置,但不适用于确定最短距离。

所以...当尝试找到最近的物品时,从一个小距离开始,在该区域内查找物品。类似这样:

select id
from dbo.locations
where location.STIntersects(@point.STBuffer(@somedistance)) = 1;
...然后慢慢增加@somedistance的值,直到找到你想要的内容。这将使搜索能够快速排除不感兴趣的位置。