找到最接近lat的输入lat long Sql server 2008

时间:2011-07-06 17:51:49

标签: sql-server-2008 spatial closest-points

嗨,我的数据库中有一个点云(Sql server 2008 spatial)。那是大约600万条记录。共有3列:id,value,geom。 什么是在输入纬度上获得“值”的最优化方法?

我是SQL Server 2008中空间查询的新手。有人可以发布一个简单的例子来查找geom列中的点,匹配或最接近输入lat吗?

由于 Shaunak

1 个答案:

答案 0 :(得分:2)

假设您有一个包含列的表Wifi:id,placeName,locationCoord(geography):

CREATE TABLE [dbo].[WiFi](
[id] [int] IDENTITY(1,1) NOT NULL,
[placeName] [varchar](500) NULL,
[locationCoord] [geography] NULL,
CONSTRAINT [PK_WiFi] PRIMARY KEY CLUSTERED ([id] ASC))

这里的locationCoord是一个地理类型。让我们说输入是纬度和经度作为varchar数据类型。您可以使用以下内容获取最近的点/位置:

declare @longitude varchar(50) = '-77.26939916610718', @latitude varchar(50) = '39.168516439779914'

declare @ms_at geography, @locationString nvarchar(1000)

set @locationString = 'SELECT @ms_at = geography::STGeomFromText(''POINT(' + @longitude + ' ' + @latitude + ')'', 4326)'

exec sp_executesql @locationString, N'@ms_at geography OUT', @ms_at OUT

select nearPoints.placeName, nearPoints.locationCoord.STDistance(@ms_at) as distance 
,RANK() OVER (ORDER BY nearPoints.locationCoord.STDistance(@ms_at)) AS 'Rank'
from
(
select r.id, r.placeName, r.locationCoord 
from WiFi r 
where r.locationCoord.STIntersects(@ms_at.STBuffer(10000)) = 1
) nearPoints