87 Stimmen

Nachschlagen von Stadt und Bundesland nach Postleitzahl Google Geocode Api

Ich möchte grundsätzlich eine Liste von Stadt und Staat innerhalb einer Postleitzahl abrufen. Ist die Geocode API von Google dazu in der Lage? Ich habe versucht, in die Dokumentation zu schauen, aber die Informationen sind überwältigend.

Für jede Hilfe wären wir dankbar. Wenn es eine andere Methode zur Bewältigung dieser Aufgabe gibt, lassen Sie es mich bitte wissen.

Gracias

EDIT: Es ist mir gelungen, die Stadt und das Bundesland abzurufen: http://maps.google.com/maps/geo?output=xml&q=14606 aber gibt es dagegen eine Einschränkung?

117voto

Jason Punkte 78121

Verwenden Sie die GeoCoding-API

Um zum Beispiel die Postleitzahl 77379 abzufragen, verwenden Sie eine Anfrage wie diese:

https://maps.googleapis.com/maps/api/geocode/json?address=77379&sensor=true&key=YOUR_GOOGLE_PLATFORM_API_KEY

56voto

Richard Jones Punkte 4630

Ich habe mehrere Möglichkeiten gefunden, dies mit webbasierten APIs zu tun. Ich denke, die US-Postdienst wäre am genauesten, da Postleitzahlen ihr Ding sind, aber Ziptastisch sieht viel einfacher aus.

Verwendung der US Postal Service HTTP/XML API

Nach diesem Seite auf der Website des US Postal Service, die ihre XML-basierte Web-API dokumentiert insbesondere Abschnitt 4.0 (Seite 22) von dieses PDF-Dokument Sie haben eine URL, an die Sie eine XML-Anfrage mit einer 5-stelligen Postleitzahl senden können, und sie werden mit einem XML-Dokument antworten, das die entsprechende Stadt und den Staat enthält.

Nach den Unterlagen des Unternehmens müssten Sie Folgendes senden:

http://SERVERNAME/ShippingAPITest.dll?API=CityStateLookup&XML=<CityStateLookupRequest%20USERID="xxxxxxx"><ZipCode ID= "0"><Zip5>90210</Zip5></ZipCode></CityStateLookupRequest>

Und hier ist, was Sie zurückbekommen würden:

<?xml version="1.0"?> 
<CityStateLookupResponse> 
    <ZipCode ID="0"> 
        <Zip5>90210</Zip5> 
        <City>BEVERLY HILLS</City> 
        <State>CA</State> 
    </ZipCode> 
</CityStateLookupResponse>

USPS tut verlangen, dass man sich bei ihnen registriert, bevor man die API nutzen kann, aber soweit ich das beurteilen kann, ist der Zugang kostenlos. Die API bietet übrigens noch einige andere Funktionen: Sie können Adressstandardisierung und Postleitzahlensuche sowie die gesamte Palette von Sendungsverfolgung, Versand, Etiketten usw. nutzen.

Die Verwendung der Ziptastic HTTP/JSON API ( nicht mehr unterstützt )

Update: Seit dem 13. August 2017 ist Ziptastic nun eine kostenpflichtige API und kann gefunden werden aquí

Es handelt sich um einen ziemlich neuen Dienst, aber nach der Dokumentation sieht es so aus, als müssten Sie nur eine GET-Anfrage an http://ziptasticapi.com , etwa so:

GET http://ziptasticapi.com/48867

Und sie geben ein JSON-Objekt zurück, das in etwa so aussieht:

{"country": "US", "state": "MI", "city": "OWOSSO"}

In der Tat, es funktioniert. Sie können dies von einer Befehlszeile aus testen, indem Sie etwas wie folgt tun:

curl http://ziptasticapi.com/48867

18voto

Nicolas Giszpenc Punkte 611
function getCityState($zip, $blnUSA = true) {
    $url = "http://maps.googleapis.com/maps/api/geocode/json?address=" . $zip . "&sensor=true";

    $address_info = file_get_contents($url);
    $json = json_decode($address_info);
    $city = "";
    $state = "";
    $country = "";
    if (count($json->results) > 0) {
        //break up the components
        $arrComponents = $json->results[0]->address_components;

        foreach($arrComponents as $index=>$component) {
            $type = $component->types[0];

            if ($city == "" && ($type == "sublocality_level_1" || $type == "locality") ) {
                $city = trim($component->short_name);
            }
            if ($state == "" && $type=="administrative_area_level_1") {
                $state = trim($component->short_name);
            }
            if ($country == "" && $type=="country") {
                $country = trim($component->short_name);

                if ($blnUSA && $country!="US") {
                    $city = "";
                    $state = "";
                    break;
                }
            }
            if ($city != "" && $state != "" && $country != "") {
                //we're done
                break;
            }
        }
    }
    $arrReturn = array("city"=>$city, "state"=>$state, "country"=>$country);

    die(json_encode($arrReturn));
}

6voto

Som Poddar Punkte 1358

Vor ein paar Monaten hatte ich die gleiche Anforderung für eines meiner Projekte. Ich suchte ein wenig danach und fand die folgende Lösung heraus. Dies ist nicht die nur Lösung, aber ich fand sie zu einer der Einfacher ein.

Verwenden Sie den Webservice unter http://www.webservicex.net/uszip.asmx .
Speziell GetInfoByZIP() Methode.

Sie können nach jeder Postleitzahl abfragen ( ex: 40220 ) und Sie erhalten eine Antwort wie folgt...

<?xml version="1.0" encoding="UTF-8"?>
 <NewDataSet>
  <Table>
   <CITY>Louisville</CITY> 
   <STATE>KY</STATE> 
   <ZIP>40220</ZIP> 
   <AREA_CODE>502</AREA_CODE> 
   <TIME_ZONE>E</TIME_ZONE> 
  </Table> 
</NewDataSet>

Ich hoffe, das hilft...

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