15 Stimmen

Wie kann man eine Postleitzahl aus einer GPS-Koordinate ablesen?

Angenommen, ich habe eine Webdienst-API, die eine Postleitzahl als Parameter akzeptiert, aber ich habe nur Zugriff auf eine GPS-Koordinate (Breitengrad, Längengrad). Wie kann ich die Postleitzahl, zu der die Koordinate gehört, dynamisch abrufen?

Ich mache diese Arbeit auf dem iPhone, also gibt es hoffentlich eine einfache Möglichkeit, dies innerhalb der CoreLocation APIs zu tun, die ich in der Dokumentation übersehe.

15voto

nevan king Punkte 110579

Auf dieser Seite finden Sie eine Datenbank (im csv-Format) mit allen Postleitzahlen in den USA sowie deren Längen- und Breitengraden. http://zips.sourceforge.net/

Die Datei ist 500k groß und wird entpackt. Hier sind die ersten paar Zeilen der Daten:

"35004", "AL", " 33.606379", " -86.50249", "Moody", "Alabama"
"35005", "AL", " 33.592585", " -86.95969", "Adamsville", "Alabama"
"35006", "AL", " 33.451714", " -87.23957", "Adger", "Alabama"

Speichern Sie diese Daten in einer lokalen Datenbank. Verwenden Sie die Haversinus-Formel, um Ihre Koordinaten mit denen in der Datenbank zu vergleichen und den nächstgelegenen Punkt zu finden. CoreLocation hat eine Funktion getDistanceFrom, die Sie ebenfalls verwenden können.

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

Auf dieser Seite finden Sie eine Haversine-Funktion in c und Informationen über die Zips-Datenbank.

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

Edita: Hier ist eine großartige Erklärung von Google über die Berechnung von Entfernungen. Sie verwendet MySQL und PHP, aber das SQL für die Suche nach nächstgelegenen Punkten ist auch hier nützlich. Es wäre wahrscheinlich schneller, eine Abfrage mit SQL zu machen, als mit der Funktion getDistanceFrom.

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

Finden Sie die 20 nächstgelegenen Orte in einem Umkreis von 25 Meilen um die Koordinate 37, -122:

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; 

Um nach Kilometern statt nach Meilen zu suchen, ersetzen Sie 3959 durch 6371.

6voto

Jane Sales Punkte 13516

Ich würde an Ihrer Stelle versuchen, die Dokumente für den Reverse-Geocoder im 3.0 SDK zu lesen. Ich kann nicht sagen, was dort steht, aber vielleicht finden Sie heraus, dass der umgekehrte Geocode eine placeMark zurückgibt, und wenn Sie dann diese placeMark im SDK nachschlagen, finden Sie vielleicht heraus, dass sie eine Postleitzahleneigenschaft hat. Wer weiß das schon?

0voto

Robert Harvey Punkte 173098

Diese Art der Suche wird als "Reverse Geolocation" bezeichnet.

Als erstes müssen Sie die lat/lng-Daten des CLocation-Objekts in Grad konvertieren...

in der Funktion locationManager (die aufgerufen wird, sobald Sie eine Standortaktualisierung erhalten) ....

Code:

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

Von dort aus senden Sie die lat- und lng-Strings an einen Backend-Webservice wie "GeoNames.org" oder Google Maps API ... und Sie können die nächstgelegene Stadt oder Straßenadresse erhalten.

0voto

Cheeso Punkte 184210

Es gibt eine von der US-Volkszählung erstellte Datenbank - die Tiger-Datenbank. Ich glaube, es gibt eine Möglichkeit, die Postleitzahl anhand von Längen- und Breitengraden zu ermitteln.

Ich wette, dass Sie bei der Suche nach Postleitzahl Tiger Vielleicht finden Sie etwas. siehe aquí zum Beispiel. Es scheint, dass es ein Perl-Modul auf CPAN gibt, das dies tut, also sollte es nicht unmöglich sein.

0voto

mflaming Punkte 1167

Google bietet einen kostenlosen Reverse-Geocoding-Dienst an. Sie können ihn direkt nutzen oder das Temboo SDK ausprobieren, das einen bequemen Zugang in mehreren Sprachen bietet, einschließlich Objective C (mit Codebeispielen).

Prüfen Sie https://www.temboo.com/library/Library/Google/Geocoding/GeocodeByCoordinates/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X