Pregunta

Estoy creando una aplicación con la capacidad de búsqueda de proximidad geográfica utilizando PHP como lenguaje de scripting del servidor y MySQL como Databse.

Considera una situación:

Donde tenemos cierto conjunto de objetos que tienen posiciones de latitud y longitud asociadas con objetos respectivos. Al especificar detalles de ubicación como país y / o ciudad junto con el rango / radio en KM, estamos obteniendo objetos que se encuentran dentro de ese radio / rango utilizando la consulta de MySQL, por ejemplo:

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

Los cálculos anteriores darán los objetos que están dentro del área de 10 KM desde el punto del centro de la ciudad / país en la tierra.

Ahora supongamos que tengo un objeto (con latitud y longitud) que no se encuentra en esta área de 10 KM, pero por ejemplo a 15 KM del punto del centro de la ciudad / país en la tierra. Este objeto tiene un rango de servicio de 10 KM (dando servicio a un área de hasta 10 KM).

Ahora la pregunta es si estoy buscando los objetos dentro del rango de 10 KM desde el punto del centro de país / ciudad, entonces el objeto (15 KM aparte del punto del centro de país / ciudad) que tiene un rango de servicio de 10 KM también debe incluirse en la búsqueda .

¿Cómo puedo hacerlo posible? Tengo lat / centro de ciudad / lat, coordenadas largas, rango / radio (en el que tenemos que encontrar los objetos) y objeto que tiene un radio de entrega (por ejemplo, 10 KM) y sus coordenadas correspondientes.

¿Puedes guiarme en cómo hacer eso usando PHP, MySQL?

¿Fue útil?

Solución

Usar las extensiones espaciales de MySQL http://dev.mysql.com/doc/refman/ 5.1 / es / spatial-extensions.html

Por otro lado, si solo quiere identificar otros círculos que se intersecan con uno dado, serían todos estos, para los cuales la distancia entre los centros del círculo es menor que la suma del radio. En otras palabras, suponiendo que su punto y rango originales estén dados por el triple ( x 0 , y 0 , r0 ), necesita todos ( x n , y n , r n ) para los cuales

v((x0 - xn ) ² + ( y 0 - yn ) ²) = r0 + r n

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top