您好我的数据库中有一个点云(Sql server 2008 空间)。那是大约 600 万条记录。有 3 列:id、value、geom。在输入 lat long 处获得“价值”的最优化方法是什么?
我是 SQL Server 2008 中空间查询的新手。有人可以发布在 geom 列中查找点、匹配或最接近输入 lat long 的简单示例吗?
谢谢肖纳克
您好我的数据库中有一个点云(Sql server 2008 空间)。那是大约 600 万条记录。有 3 列:id、value、geom。在输入 lat long 处获得“价值”的最优化方法是什么?
我是 SQL Server 2008 中空间查询的新手。有人可以发布在 geom 列中查找点、匹配或最接近输入 lat long 的简单示例吗?
谢谢肖纳克
假设您有一个 Wifi 表,其中包含以下列:id、placeName、locationCoord(地理):
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