Latitude e longitude podem encontrar o código postal?
estou a usar o Google geocoder para o lat e o lon e a minha pergunta é, há alguma maneira de descobrir o zipcode com latitude e longitude?
5 answers
Acho que o que estás à procura é o address_components[]
na matriz results
. Talvez algo como este funcionaria, apenas digitando o abaixo para que pudesse ter erros nele, mas eu acho que você vai ter a idéia.
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
}
}
Referência: https://developers.google.com/maps/documentation/geocoding/?csw=1#ReverseGeocoding
Aqui está um exemplo atualizado para o Google Maps v3. Ele faz uso dos componentes de endereço que JIssak menciona acima. Devo notar que não há recuo. Se não encontrar um código postal, não faz nada. Isto pode ou não ser importante para o seu script.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);
}
});
[Solução Não funcional removida para a solução do google - ver a solução de @hblackorby.]
Aqui está uma versão que usa openstreetmap.org, muito mais simples que o API - coffeescript do google, em seguida javascript: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)
Aqui está o 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);
});
});
}
};
Usa-o assim:
getZip(function(zipcode){ console.log("zip code found:" + zipcode); });
A API do localizador do Yahoo fornece um bom wat para procurar os dados de localização por lat/GNL:
Http://developer.yahoo.com/geo/placefinder/
Aqui está um url de exemplo que eles usam:
Http://where.yahooapis.com/geocode?q=38.898717,+-77.035974&gflags=R
Fonte: Serviço de API do Google Maps
Geocodificação é o processo de conversão de endereços (como " 1600 Amphitheatre Parkway, Mountain View, CA") em Coordenadas geográficas (como a latitude 37.423021 e longitude-122.083739), que você pode usar para colocar marcadores ou posicionar o mapa. A API do Google Geocoding fornece uma maneira direta de acessar um geocoder através de um pedido HTTP. Além disso, o serviço permite-lhe executar o Operação de conversão (transformando coordenadas em endereços); este processo é conhecido como "reverse geocoding."
Você também deve verificar esta documentação que tem algum código de amostra: Geocodificação Reversa