Domanda

Di 'Ho un servizio API web che accetta un codice postale come parametro, ma ho solo l'accesso a un GPS coordinare (latitudine, longitudine). Come si può cercare dinamicamente il codice postale che la coordinata appartiene?

che sto facendo questo lavoro su iPhone, quindi speriamo che ci sia un modo semplice per farlo entro le API CoreLocation che sto che si affacciano nella documentazione.

È stato utile?

Soluzione

mi piacerebbe provare il check-out la documentazione per il geocoder inverso nella SDK 3.0, se fossi in te. Non posso dire quello che c'è, ma si potrebbe, ad esempio, scoprire che la geocodifica inversa restituisce un segnaposto, e poi se guardi in alto che segnaposto nel SDK, si potrebbe scoprire che ha una proprietà Cap. Chi lo sa?

Altri suggerimenti

Questa pagina fornisce una base di dati (in formato CSV) di tutti i codici di avviamento postale degli Stati Uniti, con la loro latitudine e longitudine. http://zips.sourceforge.net/

Il file è 500K spacchettato. 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"

Dump questi dati in un database locale. Utilizzare la formula Haversine per confrontare le vostre coordinate e quelli nel database per trovare il punto più vicino. CoreLocation ha una getDistanceFrom funzione che si potrebbe usare anche.

- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location

Questa pagina ha una funzione Haversine in C e informazioni sul database cerniere.

http://www.jaimerios.com/?p=39

Modifica Heres una grande spiegazione da parte di Google su calcolo delle distanze. Esso utilizza MySQL e PHP, ma l'SQL per la ricerca di punti più vicini è utile anche qui. È probabilmente più veloce per eseguire query utilizzando SQL, piuttosto che la funzione getDistanceFrom.

http://code.google.com/support/ bin / answer.py? answer = 87.134 & topic = 11364

trovare il più vicino 20 posizioni che si trovano entro un raggio di 25 miglia a 37, -122 coordinata:

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.

Questo tipo di ricerca si chiama "Reverse Geolocalizzazione".

La prima cosa che devi fare è convertire i dati di GNL / lat da oggetto CLocation 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ì si inviano 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.

Non è un database prodotto dal US Census - il database Tiger. Credo che ci sia una possibilità di ricercare codice postale dato lat / long.

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

Google offre un servizio di reverse-geocoding gratuito. Si può usare direttamente, o provare la Temboo SDK, che offre un comodo accesso in più lingue, tra cui Objective C (con esempi di codice).

https://www.temboo.com/library/Library / Google / Geocoding / GeocodeByCoordinates /

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top