2009-05-28 15 views
15

Dire che ho un servizio API web che accetta un codice postale come parametro, ma ho solo l'accesso a un GPS coordinare (latitudine, longitudine). Come posso cercare dinamicamente il codice postale a cui appartiene la coordinata?Come cercare un codice postale da una coordinata GPS?

Sto facendo questo lavoro su iPhone, quindi spero che ci sia un modo semplice per farlo all'interno delle API di CoreLocation che sto trascurando nella documentazione.

+0

dubito si troverebbero in CoreLocation, ma vale la pena di provare ... sarà interessante vedere se è – hhafez

risposta

6

mi piacerebbe provare il check-out la documentazione per il geocoder inverso nella SDK 3.0, se fossi in te.Non posso dire cosa c'è, ma potresti, ad esempio, scoprire che il geocoding inverso restituisce un placeMark, e quindi se cerchi quel placeMark nell'SDK, potresti scoprire che ha una proprietà di codice postale. Chissà?

+0

Se ci riferiamo a MapKit Framework, tieni presente che utilizza l'API di Google Maps e che richiede di aderire ai TOS di Google. – jottos

0

Questo tipo di ricerca è chiamato "Reverse Geolocalizzazione."

La prima cosa che devi fare è convertire i dati LAT/da CLocation oggetto per gradi ...

nella funzione locationManager (che è chiamata una volta che si riceve un aggiornamento di posizione) ....

Codice:

[lat stringWithFormat:@"%+.6f", myLocation.coordinate.latitude]; 
[lng stringWithFormat:@"%+.6f", myLocation.coordinate.longitude]; 

da lì è inviare le corde lat e GNL ad un webservice back-end come "GeoNames.org" o API di Google Maps ... e si può ottenere l'indirizzo della città o sulla strada più vicina.

0

c'è un database prodotto dal US Census - il database Tiger. Credo che ci sia la possibilità di cercare codice postale dato lat/long.

Scommetto che se hai cercato Tiger zipcode potresti trovare qualcosa. vedi here per esempio. Sembra che ci sia un modulo Perl su CPAN che fa questo, quindi non dovrebbe essere impossibile.

15

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.

+0

Questo solo vi darà la distanza dal più vicino centro di un'area del codice di avviamento postale, non ti dirà in quale codice postale le coordinate sono effettivamente inserite, come richiesto dall'OP. – user4815162342

+0

Ho downvoted questo perché i codici zip vengono aggiunti e rimossi ogni mese. Se si è seriamente interessati all'accuratezza della ricerca di zipcode, è necessario acquistare un abbonamento a dati zipcode e rinfrescare il set di dati ogni pochi mesi. Il tuo processo di controllo qualità dovrebbe in particolare comprendere quali codici zip vengono * rimossi *, poiché potresti voler aggiornare i relativi dati per fare riferimento ai codici postali che sostituiscono quelli rimossi. –

Problemi correlati