Encontre o lat mais próximo de um long de entrada (SQL Server 2008)

12

Eu tenho uma nuvem de pontos no meu banco de dados (espacial do SQL Server 2008). São cerca de 6 milhões de registros. Existem 3 colunas: id, valor, geom. Qual é a maneira ideal de obter o 'valor' na entrada lat long ??

Eu sou novo em consultas espaciais no SQL Server 2008. Alguém pode postar um exemplo simples de encontrar o ponto na coluna geom, correspondente ou mais próximo da entrada lat muito tempo?

Shaunak
fonte
Você criou um índice espacial ?
21411 Kirk Kuykendall
Eu tentei. Mas existem 6 milhões de registros e a criação de índices falha por diferentes motivos. Agora estou tentando criar uma tabela em branco, adicionar um índice espacial no geom e adicionar dados. isso funciona?
Shaunak
Quais erros você está recebendo? Um índice pode diminuir muito o carregamento, pois, para muitas linhas, acho que adicionar um índice após o carregamento seria muito mais rápido. O desempenho dependerá muito do índice, por isso vale a pena acertar.
Kirk Kuykendall

Respostas:

4

Isso usa Geografia e não Geometria (se os dados forem Lat / Lng, os dados devem ser Tipo de Geografia e não Geometria)

"O tipo de dados geográficos do SQL Server armazena dados elipsoidais (terrenos arredondados), como coordenadas de latitude e longitude do GPS".

Para selecionar os 5 principais registros mais próximos de um ponto de lat / lng (-122.0 37.0) que você pode usar.

SELECT   TOP 5
         geography::STGeomFromText('POINT(-122.0 37.0)', 4326).STDistance(p) 
FROM     markers
WHERE    geography::STGeomFromText('POINT(-122.0 37.0)', 4326).STDistance(p) < 25
ORDER BY geography::STGeomFromText('POINT(-122.0 37.0)', 4326).STDistance(p);
Mapperz
fonte
O que é p? desculpe eu sou um novo isso é bie por que pedir
Shax
DECLARE @p geography
Andrew Hill