Wyszukaj miasto i stan wg Zip Google Geocode Api [zamknięte]

83

Zasadniczo chcę pobrać listę miast i województw w kodzie pocztowym. Czy Google Geocode API jest w stanie to zrobić? Próbowałem zajrzeć do dokumentacji, ale informacje były przytłaczające.

Każda pomoc będzie mile widziana. Jeśli istnieje inna metoda wykonania tego zadania, proszę o informację.

Dzięki

EDYCJA: udało mi się pobrać miasto i stan przez: http://maps.google.com/maps/geo?output=xml&q=14606, ale czy są jakieś ograniczenia?

meenxo
źródło
Możesz skorzystać z interfejsu API REST HERE Maps Geocoding . Utwórz projekt i uzyskaj poświadczenia REST. Poczekaj godzinę, aż zostaną uruchomione (najpierw pokazał mi błąd InvalidCredentials ), a następnie zadzwoń np. geocoder.cit.api.here.com/6.2/geocode.json?PostalCode=2400&country=Denmark&app_id={APP_ID}&app_code={APP_CODE}&gen=9(Możesz podać części adresu )
aexl

Odpowiedzi:

111

Użyj interfejsu API GeoCoding

Na przykład, aby wyszukać kod pocztowy 77379, użyj żądania takiego:

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

Jason
źródło
10
Masz na myśli czujnik = fałsz ?
Rup
19
„Uwaga: interfejs API geokodowania może być używany tylko w połączeniu z mapą Google; wyniki geokodowania bez wyświetlania ich na mapie są zabronione”.
Andy Ray
2
@ Czujnik Rup nie jest już wymagany
Dejell
2
To jest pierwsze trafienie w Google podczas wyszukiwania w googlach „city zip code api”, a to oczywiście nie tak :(
DuckPuncher,
6
@KevinLeary result_type nie ogranicza się do kodu pocztowego. Geokoder Google pomyli kody pocztowe z numerami adresów (spróbuj kod pocztowy 89100). Zamiast tego format, którego należy użyć, to maps.googleapis.com/maps/api/geocode/ ... jak udokumentowano tutaj: developers.google.com/maps/documentation/geocoding/ ...
Mike Kormendy
54

Znalazłem kilka sposobów, aby to zrobić za pomocą internetowych interfejsów API. Myślę, że najdokładniejsza byłaby poczta amerykańska , ponieważ kody pocztowe to ich sprawa, ale Ziptastic wygląda znacznie łatwiej.

Korzystanie z interfejsu API HTTP / XML usługi poczty USA

Zgodnie z tą stroną w witrynie US Postal Service, która dokumentuje ich internetowy interfejs API oparty na XML , a konkretnie w sekcji 4.0 (strona 22) tego dokumentu PDF , mają adres URL, pod który można wysłać żądanie XML zawierające 5-cyfrowy kod pocztowy, a oni odpowiedz, przesyłając dokument XML zawierający odpowiednie miasto i stan.

Zgodnie z ich dokumentacją, oto, co prześlesz:

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

A oto, co otrzymasz z powrotem:

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

USPS nie wymagają rejestracji z nimi, zanim będzie można użyć API, ale, o ile mogę powiedzieć, nie ma opłat za dostęp. Nawiasem mówiąc, ich API ma kilka innych funkcji: możesz zrobić standaryzację adresu i wyszukiwanie kodu pocztowego, a także cały zestaw śledzenia, wysyłki, etykiet itp.

Korzystanie z Ziptastic HTTP / JSON API ( nie jest już obsługiwane )

Aktualizacja: od 13 sierpnia 2017 Ziptastic jest teraz płatnym interfejsem API i można go znaleźć tutaj

To całkiem nowa usługa, ale zgodnie z ich dokumentacją wygląda na to, że wszystko, co musisz zrobić, to wysłać żądanie GET na adres http://ziptasticapi.com , na przykład:

GET http://ziptasticapi.com/48867

I zwrócą obiekt JSON w następujący sposób:

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

Rzeczywiście, to działa. Możesz to przetestować z wiersza poleceń, wykonując coś takiego:

curl http://ziptasticapi.com/48867 
Richard Jones
źródło
8
Wielka miłość do rekomendacji Ziptastic. <3!
ceejayoz
5
US Postal Service prawdopodobnie odrzuci Twoją prośbę o dostęp, chyba że używasz ich API do działań związanych z pocztą. Przynajmniej takie było moje doświadczenie.
eaj
1
@eaj To prawda: „API sprawdzania poprawności adresu może być używane TYLKO w połączeniu z USPS SHIPPING LUB MAILING SERVICES”.
dragan.stepanovic
2
Ziptastic nie jest już obsługiwany. Nie należy go już używać.
vaindil
2
@RationalRabbit: Przesłałem aktualizację z informacją, że Ziptastic jest teraz płatnym interfejsem API.
Richard Jones
15
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
źródło
Część twojego kodu trochę mi pomogła, wielkie dzięki :)
Kamlesh
6

kilka miesięcy temu miałem te same wymagania w przypadku jednego z moich projektów. Szukałem go trochę i znalazłem następujące rozwiązanie. Nie jest to jedyne rozwiązanie, ale znalazłem je jako jedno z prostszych .

Skorzystaj z usługi internetowej pod adresem http://www.webservicex.net/uszip.asmx .
Konkretnie GetInfoByZIP()metoda.

Będziesz mógł zapytać za pomocą dowolnego kodu pocztowego ( ex: 40220), a otrzymasz odpowiedź zwrotną w następujący sposób ...

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

Mam nadzieję że to pomoże...

Som Poddar
źródło