2011-07-20 11 views
9

Używam geocoder Google dla lat i lon i moje pytanie brzmi, czy istnieje sposób, aby dowiedzieć się kod pocztowy o szerokości i długości geograficznej?Szerokość i długość geograficzna można znaleźć kod pocztowy?

+0

Pamiętaj, że zaakceptowana odpowiedź na to pytanie jest nieaktualna. Istnieje rozwiązanie, które dotyczy aktualnej wersji interfejsu Google Maps API, która najwyraźniej nie zmieniła się od 2013 roku, tutaj: http://stackoverflow.com/a/17933106/4526479 –

Odpowiedz

8

myślę co szukasz jest address_components[] w tablicy results. Być może coś takiego by działało, wystarczy wpisać poniżej, aby mógł zawierać błędy, ale myślę, że dostaniesz pomysł.

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

Zanotuj poniżej odpowiedź na aktualną odpowiedź (podobno API nie zmieniło się w odniesieniu do tej odpowiedzi, ponieważ 2013): http://stackoverflow.com/a/17933106/4526479 –

1

Wydawałoby się więc :

Źródło: Google Maps API Service

Geokodowanie jest procesem przekształcania adresów (takich jak „1600 Amphitheatre Parkway, Mountain View, CA”) do współrzędnych geograficznych (jak szerokość i długość geograficzna -122,083739 37.423021), które można wykorzystać umieścić markery lub stanowisko Mapa. Interfejs API Google Geocoding zapewnia bezpośredni dostęp do geokodera za pośrednictwem żądania HTTP. Dodatkowo, usługa pozwala na wykonanie operacji odwrotnej (zmieniając współrzędne na adresy); proces ten jest znany jako "odwrotne geokodowanie".

Należy również sprawdzić tę dokumentację, która ma jakiś przykładowy kod: Reverse Geocoding

+0

yoda: Konwertuję adres jak to, co pisałeś powyżej, ale moje pytanie jest bardziej "czy istnieje sposób, w jaki mogę uzyskać kod pocztowy na podstawie lat i lon –

8

Oto moje rozwiązanie, które pomija google js i dostaje wyniki jak 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/

myślę, że to nie działa na długo - choć przysięgam, że to w pewnym momencie. Muszę ominąć jakiś tajny uścisk dłoni, który jest częścią google .js. Przeszedłem do 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) 

Oto skompilowany javascript:

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); 
     }); 
    }); 
    } 
}; 

Używaj go tak:

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

wolałby, że nie w coffeescript – Zone6

+0

Dziękuję za nudge @ Zone6, tutaj jest wersja JS – Julian

+0

Dzięki temu pomogło mi, otwarta mapa ulic była waaayyy łatwiejsza uzyskać kod pocztowy, co daje wersja Google – garek007

6

Warto pamiętać, że Google Maps ma nową wersję od ten solultion został przedstawiony.

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

Oto aktualizowane na przykład Google Maps v3.Korzysta z Komponentów Adresu wspomnianych powyżej przez JIssak. Powinienem zauważyć, że nie ma żadnej rezerwy. Jeśli nie uda się znaleźć kodu pocztowego, nie robi nic. To może, ale nie musi być ważne dla twojego skryptu.

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); 
     } 
    }); 
Powiązane problemy