Determinar se um círculo de lat de comprimento e um círculo sobre uma esfera sobreposição
-
03-07-2019 - |
Pergunta
Estou criando um aplicativo com Geo Proximidade Pesquisa capacidade utilizando PHP como linguagem de script do servidor e MySQL como Databse.
Considere uma situação:
Onde temos determinado conjunto de objectos com posições de latitude e longitude assosciated com os respectivos objectos. Sobre a especificação de detalhes de localização, como país e / ou cidade, juntamente com gama / raio em KM estamos recebendo objetos que estão mentindo withing que raio / intervalo usando consulta MySQL por exemplo:
SELECT [columns]
FROM [column]
WHERE 1=1
AND 3963.191 *
ACOS(
(SIN(PI() * [latitude] / 180) * SIN(PI() * [column].latitude / 180)) +
(COS(PI() * [latitude] /180) * cos(PI() * [column].latitude / 180) * COS(PI() * [column].longitude / 180 - PI() * [longitude] / 180)) )
<= 10
cálculos acima dará os objetos que estão dentro KM área de 10 a partir do ponto central país / cidade na Terra.
Agora, suponha que eu tenho um objeto (com a latitude e longitude), que não está nesta KM área de 10, mas, por exemplo, a 15 km do ponto central país / cidade na terra. Este objeto tem uma gama de serviço de 10 KM (dando serviço até 10 KM área).
Agora, a questão é se eu estou olhando para os objetos dentro do intervalo de 10 km do país / cidade ponto central, em seguida, o objeto (15 KM além de / cidade ponto central do país) tendo gama de serviço de 10 KM também devem ser incluídos na pesquisa .
Como posso torná-lo possível? Tenho centro país / cidade lat, coordenadas longos, Gama / raio (em que temos de descobrir objetos) e raio objeto tendo parto (para e.g.10 KM) e suas coordenadas correspondentes.
Você pode me orientar como fazer isso usando PHP, MySQL?
Solução
Use MySQL extensões espaciais http://dev.mysql.com/doc/refman/ 5.1 / en / espaço-extensions.html
Por outro lado, se você quiser apenas para identificar outros círculos que se cruzam com dado um, eles seriam todos estes, para os quais a distância entre os centros do círculo é menor, então soma do raio. Em outras palavras, assumindo que o seu ponto original e gama é dada por triplo ( x 0 , y 0 , r 0 ), você precisa de todos ( x n , y n , r n ) para os quais
v (( x 0 - x n ) ² + ( y 0 - y n ) ²) = r 0 + r n