2011-07-20 12 views
9

Estoy usando Google geocoder para lat y lon y mi pregunta es, ¿hay alguna manera de averiguar el código postal con latitud y longitud?¿La latitud y la longitud pueden encontrar el código postal?

+0

Tenga en cuenta que la respuesta aceptada a esta pregunta ha caído fuera de fecha. Hay una solución que aborda la versión actual de la API de Google Maps, que aparentemente no ha cambiado desde 2013, aquí: http://stackoverflow.com/a/17933106/4526479 –

Respuesta

8

Creo que lo que busca es la address_components[] en la matriz results. Tal vez algo como esto funcionaría, simplemente escriba lo siguiente para que tenga errores, pero creo que obtendrá la idea.

http://code.google.com/apis/maps/documentation/geocoding/#Results

function (request, response) { 
    geocoder.geocode({ 'address': request.term, 'latLng': centLatLng, 'region': 'US' }, function (results, status) { 
    response($.map(results, function (item) { 
     return { 
     item.address_components.postal_code;//This is what you want to look at 
     } 
} 
+0

? Observa la respuesta a continuación para una respuesta actualizada (aparentemente la API no ha cambiado con respecto a esta respuesta desde 2013): http://stackoverflow.com/a/17933106/4526479 –

1

Parecería por lo :

Fuente: Google Maps API Service

geocodificación es el proceso de conversión de direcciones (como "1600 Amphitheatre Parkway, Mountain View, CA") en coordenadas geográficas (como latitud 37.423021 y longitud -122.083739), que se puede utilizar para colocar marcadores o posición el mapa. La API de geocodificación de Google proporciona una forma directa de acceder a un geocodificador a través de una solicitud HTTP. Además, el servicio le permite realizar la operación inversa (convirtiendo coordenadas en direcciones); este proceso se conoce como "geocodificación inversa".

También debe comprobar fuera de esta documentación que tiene un código de ejemplo: Reverse Geocoding

+0

yoda: estoy convirtiendo la dirección como la que publicaste arriba, pero mi pregunta es más "¿Hay alguna manera de obtener código postal basado en lat y lon –

8

aquí está mi solución que se salta la google js y obtiene resultados como JSON (jQuery & CoffeeScript):

navigator.geolocation.getCurrentPosition (pos) -> 
    coords = pos.coords 
    url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=#{ coords.latitude },#{ coords.longitude }&sensor=true&callback=zipmap" 
    $.ajax({ 
     url: url, 
     dataType: 'json', 
     cache: true, 
    }).success (data) -> 
     for c in data.results[0].address_components 
     if c.types[0] == 'postal_code' 
      alert c.short_name 

https://developers.google.com/maps/documentation/geocoding/

supongo que esto no funcionó por mucho tiempo, aunque juro que sí en un punto. Me falta un apretón de manos secreto que es parte de google .js. Cambié a openstreetmap.org:

getZip = (cb) -> 
    # try to populate zip from geolocation/google geocode api 
    if document.location.protocol == 'http:' && navigator.geolocation? 
    navigator.geolocation.getCurrentPosition (pos) -> 
     coords = pos.coords 
     url = "http://nominatim.openstreetmap.org/reverse?format=json&lat=#{ coords.latitude }&lon=#{ coords.longitude }&addressdetails=1" 
     $.ajax({ 
     url: url, 
     dataType: 'jsonp', 
     jsonp: 'json_callback', 
     cache: true, 
     }).success (data) -> 
     cb(data.address.postcode) 

Aquí está el JavaScript compilado:

getZip = function(cb) { 
    if (document.location.protocol === 'http:' && (navigator.geolocation != null)) { 
    return navigator.geolocation.getCurrentPosition(function(pos) { 
     var coords, url; 
     coords = pos.coords; 
     url = "http://nominatim.openstreetmap.org/reverse?format=json&lat=" + coords.latitude + "&lon=" + coords.longitude + "&addressdetails=1"; 
     return $.ajax({ 
     url: url, 
     dataType: 'jsonp', 
     jsonp: 'json_callback', 
     cache: true 
     }).success(function(data) { 
     return cb(data.address.postcode); 
     }); 
    }); 
    } 
}; 

utilizar de esta manera:

getZip(function(zipcode){ console.log("zip code found:" + zipcode); }); 
+1

habría preferido que no en coffeescript – Zone6

+0

Gracias por el empujón @ Zone6, aquí está la versión de JS. – Julian

+0

Gracias esto me ayudó, el mapa de calles abiertas era más fácil para obtener el código postal, qué ofrece la versión de Google – garek007

6

Es bueno tener en cuenta que Google Maps tiene una nueva versión desde esta solultion fue presentada.

Referencia: https://developers.google.com/maps/documentation/geocoding/?csw=1#ReverseGeocoding

He aquí un ejemplo actualizado para Google Maps v3.Hace uso de los componentes de dirección que menciona JIssak anteriormente. Debo notar que no hay un retroceso. Si no puede encontrar un código postal, no hace nada. Esto puede o no ser importante para su secuencia de comandos.

var latlng = new google.maps.LatLng(p.coords.latitude, p.coords.longitude); 
geocoder = new google.maps.Geocoder(); 

    geocoder.geocode({'latLng': latlng}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      if (results[0]) { 
       for (j = 0; j < results[0].address_components.length; j++) { 
        if (results[0].address_components[j].types[0] == 'postal_code') 
         alert("Zip Code: " + results[0].address_components[j].short_name); 
       } 
      } 
     } else { 
      alert("Geocoder failed due to: " + status); 
     } 
    }); 
Cuestiones relacionadas