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';
?>