найти ближайший lat long к входному lat long Sql server 2008 - PullRequest
3 голосов
/ 06 июля 2011

Привет! В моей базе данных есть облако точек (Sql server 2008 пространственный).Это около 6 миллионов записей.Есть 3 столбца: id, значение, geom.Каков наиболее оптимизированный способ получения «значения» при вводе lat long ??

Я новичок в пространственных запросах в SQL Server 2008. Можно ли привести один простой пример поиска точки в столбце geom, сопоставивили ближайший от входа лат длинный?

Спасибо, Шаунак

1 Ответ

2 голосов
/ 07 июля 2011

Предполагая, что у вас есть таблица 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
...