Determinar se um círculo de lat de comprimento e um círculo sobre uma esfera sobreposição

StackOverflow https://stackoverflow.com/questions/610496

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?

Foi útil?

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

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