鉴于这种情况:
- 我们在全球有 1,000,000 个点,由经度和纬度指定;
- 我们有一个基于点 pc(由经度和纬度指定)和半径 rc 的圆 c
- 我们想要有效地确定哪些点在圆中
我正在使用 C# 和存储在 SQL Server 2008 中的位置进行开发。
所以在我看来,我有以下 3 个选项:
将位置存储为经度纬度浮点数并在 C# 中执行计算。
将位置存储为地理数据类型并在 SQL Server 2008 中执行计算,如下所示:
CREATE TABLE UserLocations [UserId] [bigint] NOT NULL, [CurrentLocation] [geography] NOT NULL ALTER PROCEDURE sp_GetCurrentUsersInRange @userPoint geography, @RangeInMeters int AS BEGIN select UserId from UserLocations where @userPoint.STDistance(CurrentLocation) <= @RangeInMeters and UserId <> @userId END
缺点:在 LinqToSQL 和 LinqToEntities 中使用地理数据存在问题。
优点:对大数据使用 dbms 处理能力,以及使用 SQL Server 空间索引。
3.使用一些网络服务,如谷歌的地理定位和计算服务。到目前为止,我还没有找到这样的网络服务。
你认为哪个效率最高?请证明你的回答。
谢谢