Questa pagina fornisce un database (in csv) di tutti i codici postali negli Stati Uniti, con la loro latitudine e longitudine. http://zips.sourceforge.net/
Il file è estratto da 500k. Ecco le prime righe di dati:
"35004", "AL", " 33.606379", " -86.50249", "Moody", "Alabama"
"35005", "AL", " 33.592585", " -86.95969", "Adamsville", "Alabama"
"35006", "AL", " 33.451714", " -87.23957", "Adger", "Alabama"
Eseguire il dump di questi dati in un database locale. Usa la formula di Haversine per confrontare le tue coordinate e quelle nel database per trovare il punto più vicino. CoreLocation ha una funzione getDistanceFrom che puoi usare anche tu.
- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
Questa pagina ha una funzione Haversine in C e informazioni sul database cerniere.
http://www.jaimerios.com/?p=39
Edit: Heres una grande spiegazione da parte di Google su calcolo delle distanze. Utilizza MySQL e PHP, ma l'SQL per trovare i punti più vicini è utile anche qui. Probabilmente sarebbe più veloce interrogare usando SQL, piuttosto che la funzione getDistanceFrom.
http://code.google.com/support/bin/answer.py?answer=87134&topic=11364
trovare il più vicino 20 posizioni che si trovano entro un raggio di 25 miglia a 37, -122 coordinate:
SELECT id, (3959 * acos(cos(radians(37))
* cos(radians(lat)) * cos(radians(lng) - radians(-122))
+ sin(radians(37)) * sin(radians(lat))))
AS distance FROM markers HAVING distance < 25
ORDER BY distance LIMIT 0 , 20;
per cercare per chilometri, invece di miglia, sostituire 3959 con 6371.
dubito si troverebbero in CoreLocation, ma vale la pena di provare ... sarà interessante vedere se è – hhafez