Ta strona zawiera bazę danych (w csv) wszystkich kodów pocztowych w USA, z ich szerokością i długością geograficzną. http://zips.sourceforge.net/
Plik jest rozpakowany 500k. Oto kilka pierwszych linii danych:
"35004", "AL", " 33.606379", " -86.50249", "Moody", "Alabama"
"35005", "AL", " 33.592585", " -86.95969", "Adamsville", "Alabama"
"35006", "AL", " 33.451714", " -87.23957", "Adger", "Alabama"
Zrzuć te dane do lokalnej bazy danych. Użyj wzoru Haversine, aby porównać swoje współrzędne i te w bazie danych, aby znaleźć najbliższy punkt. CoreLocation ma funkcję getDistanceFrom, z której możesz również skorzystać.
- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
Ta strona zawiera funkcję Haversine w c oraz informacje o bazie zip.
http://www.jaimerios.com/?p=39
Edit: Herezje doskonałym wyjaśnienie od Google o obliczaniu odległości. Używa MySQL i PHP, ale użyteczny jest tutaj także SQL do znajdowania najbliższych punktów. Prawdopodobnie szybciej będzie zapytać przy użyciu SQL, niż funkcji getDistanceFrom.
http://code.google.com/support/bin/answer.py?answer=87134&topic=11364
Znajdź najbliższe 20 miejsc, które znajdują się w promieniu 25 mil do 37, -122 współrzędnych:
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;
Aby wyszukać według kilometrów zamiast mil zastąpić 3959 z 6371.
wątpię, by go znaleźć w CoreLocation, ale warto spróbować ... to będzie interesujące zobaczyć, czy jest – hhafez