Pergunta

Digamos que eu tenha uma tabela de linhas que contêm coordenadas.

Qual seria a melhor maneira de puxar apenas as fileiras das coordenadas que estão no raio de outra coordenada?

Para simplificar minha pergunta, estou dando o seguinte exemplo:

Table like:
Columns: Latitude, Longitude.
Row1:    23.44444  24.55555
Row2:    32.44444  28.22222
Row3:    35.11111  32.12345

Em uma declaração SQL, como faço para obter as linhas de coordenadas que estão no raio do row3, por exemplo?

Foi útil?

Solução

este publicar mostra como fazer isso no SQL Server.

E aqui está como fazer isso no MySQL:

SELECT ((ACOS(SIN($lat * PI() / 180) * SIN(lat * PI() / 180) + 
         COS($lat * PI() / 180) * COS(lat * PI() / 180) * COS(($lon - lon) * 
         PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance 
FROM members 
HAVING distance<='10' ORDER BY distance ASC

Outras dicas

Parece que a fórmula de distância é:

D = 60* 1.1515 * acos (sin(pi*y/180) * sin(pi*Y/180) +
                       cos(pi*y/180) * cos(pi*Y/180) * cos((z-Z) *pi / 180) 
                 )  * 180 / pi)

onde y e z - são pontos de cada linha que você está testando, e y e z - são pontos de linha de exemplo.

Então você poderia fazer uma coisa dessas:

  1. Selecione cada linha na tabela e obtenha seu lon e lat.
  2. Aplique consulta de isto, mudando $lon e $lat para o ponto de formulário de dados 1.

Não sei como fazer isso no acesso. Mas assim é tão lento.

O que você quer dizer com o raio? Você quer passar a distância, digamos 5 milhas e encontrar todas as linhas a 5 km de linha X?

Confira isso se sim http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top