Domanda

Sto creando un'applicazione con funzionalità di Geo Proximity Search utilizzando PHP come linguaggio di scripting del server e MySQL come Databse.

Prendi in considerazione una situazione:

Dove abbiamo un certo insieme di oggetti che hanno posizioni di latitudine e longitudine associate ai rispettivi oggetti. Nello specificare i dettagli della posizione come paese e / o città insieme a raggio / raggio in KM stiamo ottenendo oggetti che giacciono all'interno di quel raggio / raggio usando ad esempio la query MySQL:

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

I calcoli sopra riportati forniranno gli oggetti che si trovano all'interno dell'area di 10 KM dal punto paese / centro città sulla terra.

Ora supponiamo che io abbia un oggetto (con latitudine e longitudine) che non si trova in questa area di 10 KM, ma ad esempio a 15 KM dal punto paese / centro città sulla terra. Questo oggetto ha un raggio di servizio di 10 KM (fornendo un servizio fino a 10 KM di area).

Ora la domanda è se sto cercando gli oggetti nel raggio di 10 KM dal punto di paese / centro città quindi l'oggetto (a 15 KM dal punto paese / centro città) con raggio di servizio di 10 KM dovrebbe essere incluso anche nella ricerca .

Come posso renderlo possibile? Ho lat paese / centro città, coordinate lunghe, intervallo / raggio (in cui dobbiamo trovare oggetti) e oggetti con raggio di consegna (ad esempio 10 KM) e le coordinate corrispondenti.

Puoi guidarmi su come farlo usando PHP, MySQL?

È stato utile?

Soluzione

Usa le estensioni spaziali MySQL http://dev.mysql.com/doc/refman/ 5.1 / it / spazio-extensions.html

D'altra parte, se vuoi solo identificare altri cerchi che si intersecano con uno dato, sarebbero tutti questi, per i quali la distanza tra i centri del cerchio è inferiore alla somma del raggio. In altre parole, supponendo che il punto e l'intervallo originali siano indicati da triple ( x 0 , y 0 , r0 ), hai bisogno di tutto ( x n , y n , r n ) per cui

√((x0 - xn ) & # 178; + (< em> y 0 - yn ) & # 178;) & # 8804; r0 + rn

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top