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


Rispondi quotando