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?



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);

O que é p? desculpe eu sou um novo isso é bie por que pedir
Shax

DECLARE @p geography
Andrew Hill
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.