найти ближайшую долгую долгую к входному латинскому длинному серверу Sql 2008

Привет, у меня есть облако точек в моей базе данных (пространственный сервер Sql 2008). Это около 6 миллионов записей. Есть 3 столбца: id, value, geom. Каков наиболее оптимизированный способ получения "значения" при вводе широты и долготы?

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

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


person Shaunak    schedule 06.07.2011    source источник


Ответы (1)


Предполагая, что у вас есть таблица 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
person Dharmendar Kumar 'DK'    schedule 06.07.2011
comment
Спасибо DK, хотя я не использовал описанный вами запрос как есть, но он дал мне четкое представление о том, как это сделать. Спасибо. Сейчас я работаю над оптимизацией запроса и начал еще одну беседу, не могли бы вы взглянуть на нее? stackoverflow.com/questions/6654875/ - person Shaunak; 11.07.2011