Esta página proporciona una base de datos (en csv) de todos los códigos postales de los EE. UU., Con su latitud y longitud. http://zips.sourceforge.net/
El archivo está 500k desempacado. Aquí están las primeras líneas de datos:
"35004", "AL", " 33.606379", " -86.50249", "Moody", "Alabama"
"35005", "AL", " 33.592585", " -86.95969", "Adamsville", "Alabama"
"35006", "AL", " 33.451714", " -87.23957", "Adger", "Alabama"
Vuelque esta información en una base de datos local. Use la fórmula de Haversine para comparar sus coordenadas y las de la base de datos para encontrar el punto más cercano. CoreLocation tiene una función getDistanceFrom que también puede usar.
- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
Esta página tiene una función Haversine en c e información sobre la base de datos de cremalleras.
http://www.jaimerios.com/?p=39
Editar: Heres una gran explicación de Google sobre el cálculo de distancias. Utiliza MySQL y PHP, pero el SQL para encontrar los puntos más cercanos también es útil aquí. Probablemente sea más rápido realizar consultas usando SQL, en lugar de la función getDistanceFrom.
http://code.google.com/support/bin/answer.py?answer=87134&topic=11364
Encuentra los 20 lugares más cercanos que se encuentran dentro de un radio de 25 millas al 37, -122 coordenadas:
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;
Para buscar por kilómetros en lugar de millas, reemplace 3959 con 6371.
dudo que encontrarlo en CoreLocation, pero vale la pena intentarlo ... será interesante ver si es – hhafez