Non so se ti puo' interessare ma in un mio sito avevo una tabella contenente un certo numero di citta' del mondo (diverse migliaia) e dovevo trovare le 10 citta' piu' vicine a una certa citta' X.
Le avevo tutte in una tabella MySQL tipo:
- city_id
- city
- city_lat
- city_lng
e facevo il tutto con una "semplice" query che tiene anche conto della curvatura terrestre:
codice:
<?php
$sql = '
SELECT
city,
( 3959 * ACOS( COS( RADIANS('.$cityLat.') ) * COS( RADIANS( city_lat ) ) * COS( RADIANS( city_lng ) - RADIANS('.$cityLng.') ) + SIN( RADIANS('.$cityLat.') ) * SIN( RADIANS( city_lat ) ) ) ) AS distance_mi,
( 6371 * ACOS( COS( RADIANS('.$cityLat.') ) * COS( RADIANS( city_lat ) ) * COS( RADIANS( city_lng ) - RADIANS('.$cityLng.') ) + SIN( RADIANS('.$cityLat.') ) * SIN( RADIANS( city_lat ) ) ) ) AS distance_km
FROM
cities
WHERE
city_id != '.$cityId.'
ORDER BY
distance_km
LIMIT
10';
?>