Lookup City and State von Zip Google Geocode Api [geschlossen]

81

Grundsätzlich möchte ich eine Liste von Städten und Bundesländern innerhalb einer Postleitzahl abrufen. Ist die Geocode-API von Google dazu in der Lage? Ich habe versucht, in die Dokumentation zu schauen, fand aber die Informationen überwältigend.

Jede Hilfe wäre dankbar. Wenn es eine andere Methode gibt, um eine solche Aufgabe zu erfüllen, lassen Sie es mich bitte wissen.

Vielen Dank

BEARBEITEN: Ich konnte die Stadt und das Bundesland abrufen über: http://maps.google.com/maps/geo?output=xml&q=14606, aber gibt es eine Einschränkung dagegen?

meenxo
quelle
Sie können die HERE Maps Geocoding REST API verwenden . Erstellen Sie ein Projekt und erhalten Sie die REST-Anmeldeinformationen. Warten Sie 1 Stunde, bis sie live gehen (zeigte mir zuerst einen InvalidCredentials- Fehler) und rufen geocoder.cit.api.here.com/6.2/geocode.json?PostalCode=2400&country=Denmark&app_id={APP_ID}&app_code={APP_CODE}&gen=9Sie dann zB an (Sie können die Adressenteile
angeben

Antworten:

108

Verwenden Sie die GeoCoding-API

Verwenden Sie zum Nachschlagen von zip 77379 beispielsweise eine Anfrage wie die folgende:

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

Jason
quelle
10
Du meinst Sensor = falsch ?
Rup
18
"Hinweis: Die Geokodierungs-API darf nur in Verbindung mit einer Google-Karte verwendet werden. Geokodierungsergebnisse ohne Anzeige auf einer Karte sind verboten."
Andy Ray
2
@ Rup Sensor ist nicht mehr erforderlich
Dejell
2
Dies ist der erste Treffer bei Google, wenn "Stadt Postleitzahl API"
gegoogelt wird
6
@ KevinLeary result_type beschränkt sich nicht auf die Postleitzahl. Der Geocoder von Google verwechselt Postleitzahlen mit Straßenadressen (versuchen Sie es mit Postleitzahl 89100). Stattdessen ist das zu verwendende Format maps.googleapis.com/maps/api/geocode/…, wie hier dokumentiert: developer.google.com/maps/documentation/geocoding/…
Mike Kormendy
52

Ich habe einige Möglichkeiten gefunden, dies mit webbasierten APIs zu tun. Ich denke, der US-Postdienst wäre der genaueste, da Postleitzahlen ihre Sache sind, aber Ziptastic sieht viel einfacher aus.

Verwendung der HTTP / XML-API des US-Postdienstes

Laut dieser Seite auf der US Postal Service-Website, die ihre XML-basierte Web-API dokumentiert , insbesondere Abschnitt 4.0 (Seite 22) dieses PDF-Dokuments , haben sie eine URL, über die Sie eine XML-Anfrage mit einer 5-stelligen Postleitzahl senden können Antworten Sie mit einem XML-Dokument, das die entsprechende Stadt und das entsprechende Bundesland enthält.

Laut ihrer Dokumentation würden Sie Folgendes senden:

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

Und Folgendes würden Sie zurückerhalten:

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

USPS nicht verlangen , dass Sie mit ihnen registrieren , bevor Sie die API verwenden können, aber, soweit ich das beurteilen kann, gibt es keine Gebühr für den Zugang ist. Die API verfügt übrigens über einige weitere Funktionen: Sie können die Adressstandardisierung und die Postleitzahlensuche sowie die gesamte Suite aus Tracking, Versand, Etiketten usw. durchführen.

Verwenden der Ziptastic HTTP / JSON-API ( nicht mehr unterstützt )

Update: Ab dem 13. August 2017 ist Ziptastic eine kostenpflichtige API und kann hier gefunden werden

Dies ist ein ziemlich neuer Dienst, aber laut Dokumentation müssen Sie lediglich eine GET-Anfrage an http://ziptasticapi.com senden , wie folgt :

GET http://ziptasticapi.com/48867

Und sie geben ein JSON-Objekt zurück, wie folgt:

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

In der Tat funktioniert es. Sie können dies über eine Befehlszeile testen, indem Sie Folgendes tun:

curl http://ziptasticapi.com/48867 
Richard Jones
quelle
8
Große Liebe für die Ziptastic Empfehlung. <3!
Ceejayoz
5
Der US-Postdienst wird Ihre Anfrage nach Zugriff wahrscheinlich ablehnen, es sei denn, Sie verwenden die API für Aktivitäten, die speziell mit dem Versand zusammenhängen. Zumindest war das meine Erfahrung.
eaj
1
@eaj Das stimmt: "Die Adressvalidierungs-APIs können NUR in Verbindung mit USPS-VERSAND- ODER MAILING-DIENSTLEISTUNGEN verwendet werden."
Dragan.stepanovic
2
Ziptastic wird nicht mehr unterstützt. Es sollte nicht mehr verwendet werden.
Vaindil
2
@RationalRabbit: Ich habe ein Update eingereicht, in dem festgestellt wurde, dass Ziptastic jetzt eine kostenpflichtige API ist.
Richard Jones
14
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));
}
Nicolas Giszpenc
quelle
Ein Teil Ihres Codes hat mir ein wenig geholfen. Vielen Dank :)
Kamlesh
6

Vor ein paar Monaten hatte ich die gleichen Anforderungen für eines meiner Projekte. Ich habe ein bisschen danach gesucht und die folgende Lösung gefunden. Dies ist nicht die einzige Lösung, aber ich fand sie zu einer der einfacheren .

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

Sie können nach jeder Postleitzahl ( ex: 40220) abfragen und 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>

Hoffe das hilft...

Som Poddar
quelle