web-dev-qa-db-fra.com

Recherche Ville et Etat par Zip Google Geocode Api

Je veux fondamentalement récupérer une liste de ville et d'état dans un code postal. L'API Geocode de Google est-il capable de le faire? J'ai essayé de regarder dans la documentation mais j'ai trouvé l'information écrasante.

Toute aide serait appréciée. S'il existe une autre méthode pour accomplir cette tâche, veuillez me le faire savoir.

Merci

EDIT: J'ai pu récupérer la ville et l'état via: http://maps.google.com/maps/geo?output=xml&q=14606 mais existe-t-il une limite à cela?

74
meenxo

Utilisez le API GeoCoding

Par exemple, pour rechercher le zip 77379, utilisez une requête comme celle-ci:

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

103
Jason

J'ai trouvé plusieurs façons de procéder avec des API Web. Je pense que le S Postal Service serait le plus précis, car les codes postaux sont ce qu’ils recherchent, mais Ziptastic semble beaucoup plus facile.

Utilisation de l'API HTTP/XML du service postal américain

Selon cette page sur le site Web du US Postal Service qui documente son API Web basée sur XML , en particulier la section 4.0 (page 22) de this PDF document , ils ont une URL où vous pouvez envoyer une demande XML contenant un code postal à 5 ​​chiffres et ils répondent avec un document XML contenant la ville et l'état correspondants.

Selon leur documentation, voici ce que vous enverriez:

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

Et voici ce que vous recevrez en retour:

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

USPS fait vous devez vous enregistrer auprès d'eux avant de pouvoir utiliser l'API, mais pour autant que je sache, l'accès est gratuit. A propos, leur API a d'autres fonctionnalités: vous pouvez faire la normalisation d'adresses et la recherche de code postal, ainsi que toute la suite de suivi, d'expédition, d'étiquettes, etc.

Utilisation de l'API HTTP/JSON de Ziptastic ( n'est plus pris en charge )

Mise à jour: à compter du 13 août 2017, Ziptastic est désormais une API payante et peut être trouvée ici

C'est un nouveau service, mais selon leur documentation, il semble que tout ce que vous avez à faire est d'envoyer une demande GET à http://ziptasticapi.com , comme suit:

GET http://ziptasticapi.com/48867

Et ils renverront un objet JSON du type:

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

En effet, ça marche. Vous pouvez tester cela à partir d'une ligne de commande en faisant quelque chose comme:

curl http://ziptasticapi.com/48867 
49
Richard Jones
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));
}
13

il y a quelques mois, j'avais les mêmes exigences pour l'un de mes projets. J'ai cherché un peu et trouvé la solution suivante. Ce n'est pas la seulement solution mais je l'ai trouvée dans l'un des plus simple = un.

Utilisez le service Web à l'adresse http://www.webservicex.net/uszip.asmx .
Spécifiquement GetInfoByZIP() méthode.

Vous pourrez interroger par n'importe quel code postal (ex: 40220) et vous aurez une réponse comme suit ...

<?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>

J'espère que cela t'aides...

6
Som Poddar