Determinar se uma coordenada está no raio de outro
-
19-09-2019 - |
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?
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:
- Selecione cada linha na tabela e obtenha seu
lon
elat
. - 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