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?
Odpowiedz
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
}
}
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 –
Yahoo PlaceFinder API zapewnia dobrą wat do wyszukiwania danych lokalizacyjnych przez lat/lng:
http://developer.yahoo.com/geo/placefinder/
Oto przykład url które używają:
http://where.yahooapis.com/geocode?q=38.898717,+-77.035974&gflags=R
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
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 –
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); });
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);
}
});
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 –