2011-07-20 72 views
9

我使用谷歌地理編碼爲經緯度和我的問題是,有沒有辦法可以找到經緯度的郵政編碼?緯度和經度可以找到郵政編碼?

+0

請注意,此問題的接受答案已經過時。有一個解決方案可以解決當前版本的Google Maps API,它自2013年起顯然沒有改變,在這裏:http://stackoverflow.com/a/17933106/4526479 –

回答

8

我想你正在尋找的是results數組中的address_components[]。也許這樣的事情會起作用,只需要輸入下面的內容,這樣可能會有錯誤,但我認爲你會明白。

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

請注意下面的答案以獲得最新的答案(顯然API自這個答案以來沒有改變2013):http://stackoverflow.com/a/17933106/4526479 –

1

看起來是這樣:

來源:Google Maps API Service

解析是將地址(如「1600 劇場百匯,山景,CA」)轉換爲地理座標 (如緯度37.423021和經度-122.083739),您可以使用 放置標記或位置的過程地圖。 Google地理編碼API 提供了一種通過HTTP請求訪問地理編碼器的直接方式。 此外,該服務允許您執行逆向操作 (將座標轉換爲地址);這個過程被稱爲 「反向地理編碼」。

你也應該看看這個文檔其中有一些示例代碼: Reverse Geocoding

+0

yoda:我將地址轉換爲你張貼在上面,但我的問題是更多「是否有一種方法,我可以得到基於經緯度的郵政編碼 –

8

這裏是我的解決方案,它跳過谷歌js和得到的結果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/

我想這沒有工作很長一段時間 - 儘管我發誓一點。我必須錯過一些祕密握手,這是Google .js的一部分。我切換到使用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) 

以下是編譯的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); 
     }); 
    }); 
    } 
}; 

使用方法如下:

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

本來不會喜歡coffeescript – Zone6

+0

謝謝你的微動@ Zone6,這裏是JS版本。 – Julian

+0

感謝這幫了我,開放的街道地圖waaayyy更容易獲取郵政編碼,Google的版本 – garek007

6

這是很好的注意,谷歌地圖有新版本時,因爲介紹了這一解決方案。

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

下面是谷歌地圖3.0版更新的例子。它使用JIssak上面提到的地址組件。我應該注意到沒有倒退。如果它找不到郵政編碼,它什麼也不做。這對您的腳本來說可能很重要,也可能不重要。

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); 
     } 
    }); 
相關問題