Buscar ciudad y estado por código postal Google Geocode Api [cerrado]

82

Básicamente, quiero recuperar una lista de ciudades y estados dentro de un código postal. ¿Es la API de codificación geográfica de Google capaz de hacerlo? Intenté buscar en la documentación pero encontré la información abrumadora.

Cualquier ayuda sería apreciada. Si hay otro método para realizar esta tarea, hágamelo saber.

Gracias

EDITAR: Pude recuperar la ciudad y el estado a través de: http://maps.google.com/maps/geo?output=xml&q=14606 pero ¿hay alguna limitación en contra de eso?

meenxo
fuente
Puede utilizar la API REST de codificación geográfica de HERE Maps . Crea un proyecto y obtén las credenciales REST. Espere 1 hora para que se activen ( al principio me mostró un error de InvalidCredentials ) y luego llame, por ejemplo geocoder.cit.api.here.com/6.2/geocode.json?PostalCode=2400&country=Denmark&app_id={APP_ID}&app_code={APP_CODE}&gen=9(puede proporcionar las partes de la dirección )
aexl

Respuestas:

109

Utilice la API de codificación geográfica

Por ejemplo, para buscar zip 77379 use una solicitud como esta:

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

Jason
fuente
10
¿Quieres decir sensor = falso ?
Rup
19
"Nota: la API de codificación geográfica solo se puede utilizar junto con un mapa de Google; se prohíbe la codificación geográfica de los resultados sin mostrarlos en un mapa".
Andy Ray
2
El sensor @Rup ya no es necesario
Dejell
2
Este es el primer resultado en Google al buscar en Google "api de código postal de la ciudad", y obviamente no es eso :(
DuckPuncher
6
@KevinLeary result_type no se limita al código postal. El codificador geográfico de Google confundirá los códigos postales con los números de direcciones (pruebe con el código postal 89100). En su lugar, el formato a utilizar es maps.googleapis.com/maps/api/geocode/… como se documenta aquí: developers.google.com/maps/documentation/geocoding/…
Mike Kormendy
53

Encontré un par de formas de hacer esto con API basadas en web. Creo que el Servicio Postal de EE. UU. Sería el más preciso, ya que los códigos postales son lo suyo, pero Ziptastic parece mucho más fácil.

Uso de la API HTTP / XML del servicio postal de EE. UU.

De acuerdo con esta página del sitio web del Servicio Postal de EE. UU. Que documenta su API web basada en XML , específicamente la Sección 4.0 (página 22) de este documento PDF , tienen una URL donde puede enviar una solicitud XML que contiene un código postal de 5 dígitos y responda con un documento XML que contenga la ciudad y el estado correspondientes.

De acuerdo con su documentación, esto es lo que enviaría:

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

Y esto es lo que recibirías de vuelta:

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

USPS no requiere que se registre con ellos antes de poder utilizar la API, pero, por lo que pude ver, no hay ningún cargo para el acceso. Por cierto, su API tiene algunas otras características: puede realizar la estandarización de direcciones y la búsqueda de códigos postales, así como todo el conjunto de seguimiento, envío, etiquetas, etc.

Usando la API Ziptastic HTTP / JSON ( ya no es compatible )

Actualización: a partir del 13 de agosto de 2017, Ziptastic ahora es una API paga y se puede encontrar aquí

Este es un servicio bastante nuevo, pero de acuerdo con su documentación, parece que todo lo que necesita hacer es enviar una solicitud GET a http://ziptasticapi.com , así:

GET http://ziptasticapi.com/48867

Y devolverán un objeto JSON en la línea de:

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

De hecho, funciona. Puede probar esto desde una línea de comando haciendo algo como:

curl http://ziptasticapi.com/48867 
Richard Jones
fuente
8
Gran amor por la recomendación de Ziptastic. <3!
ceejayoz
5
El Servicio Postal de los Estados Unidos probablemente denegará su solicitud de acceso a menos que esté utilizando su API para actividades específicamente relacionadas con el envío de correos. Al menos, esa ha sido mi experiencia.
eaj
1
@eaj Eso es cierto: "Las API de validación de direcciones se pueden usar junto con los SERVICIOS DE ENVÍO O CORREO DE USPS SOLAMENTE".
dragan.stepanovic
2
Ziptastic ya no es compatible. No debería usarse más.
vaindil
2
@RationalRabbit: envié una actualización señalando que Ziptastic ahora es una API paga.
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));
}
Nicolás Giszpenc
fuente
Parte de su código me ayudó un poco, muchas gracias :)
Kamlesh
6

Hace un par de meses, tenía el mismo requisito para uno de mis proyectos. Lo busqué un poco y encontré la siguiente solución. Esta no es la única solución, pero encontré una de las más simples .

Utilice el servicio web en http://www.webservicex.net/uszip.asmx .
Específicamente GetInfoByZIP()método.

Podrá realizar consultas por cualquier código postal ( ex: 40220) y tendrá una respuesta como la siguiente ...

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

Espero que esto ayude...

Som Poddar
fuente