Mysql
 sql >> Database >  >> RDS >> Mysql

PHP MySQL ottiene posizioni nel raggio della posizione dell'utente dal GPS

Calcolare la distanza è piuttosto costoso dal punto di vista computazionale, come altri hanno già detto. Anche restituire enormi set di dati non è una buona idea, specialmente considerando che PHP non è eccezionale in termini di prestazioni.

Userei un'euristica, come approssimare la distanza con semplici addizioni e sottrazioni.

Basta cercare nel db gli incidenti all'interno di quell'intervallo (in pratica un quadrato, piuttosto che un cerchio), e poi puoi lavorare su quelli con PHP.

MODIFICA :Ecco un'alternativa; un'approssimazione molto meno costosa dal punto di vista computazionale:

Distanza approssimativa in miglia:

sqrt(x * x + y * y)

where x = 69.1 * (lat2 - lat1) 
and y = 53.0 * (lon2 - lon1) 

Puoi migliorare la precisione di questo calcolo della distanza approssimativa aggiungendo la funzione matematica del coseno:

Migliorata la distanza approssimativa in miglia:

sqrt(x * x + y * y)

where x = 69.1 * (lat2 - lat1) 
and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3) 

Fonte:http://www.meridianworlddata.com/Distance-Calculation.asp

MODIFICA 2 :Ho eseguito una serie di test con set di dati generati casualmente.

  • La differenza di precisione per i 3 algoritmi è minima, soprattutto a brevi distanze
  • L'algoritmo più lento (quello con l'intero gruppo di funzioni trigonometriche) è 4 volte più lento degli altri due.

Sicuramente non ne vale la pena. Basta fare un'approssimazione.

Il codice è qui:http://pastebin.org/424186