Sql server 2008 查找与Sql server 2008输入lat long最近的lat long

Sql server 2008 查找与Sql server 2008输入lat long最近的lat long,sql-server-2008,spatial,closest-points,Sql Server 2008,Spatial,Closest Points,您好,我的数据库中有一个点云(Sql server 2008 spatial)。这大约是600万张唱片。共有3列:id、value、geom。 在输入lat long时获取“值”的最优化方法是什么 我不熟悉SQL Server 2008中的空间查询。有人能举一个简单的例子,在geom列中找到与输入lat long匹配或最接近的点吗 谢谢 Shaunak假设您有一个包含以下列的表Wifi:id、placeName、locationCoord(地理): 这里的locationCoord是一种地理类型

您好,我的数据库中有一个点云(Sql server 2008 spatial)。这大约是600万张唱片。共有3列:id、value、geom。 在输入lat long时获取“值”的最优化方法是什么

我不熟悉SQL Server 2008中的空间查询。有人能举一个简单的例子,在geom列中找到与输入lat long匹配或最接近的点吗

谢谢
Shaunak

假设您有一个包含以下列的表Wifi:id、placeName、locationCoord(地理):

这里的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

谢谢DK,虽然我没有使用您描述的查询,但它给了我一个如何进行这项工作的合理想法。谢谢我现在正在优化查询,并且已经开始了另一个线程,你能看一下吗?
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