2011-07-20 39 views
9

Tôi đang sử dụng trình mã hóa địa lý của Google cho lat và lon và câu hỏi của tôi là, có cách nào bạn có thể tìm ra mã zip với vĩ độ và kinh độ không?Vĩ độ và kinh độ có thể tìm mã zip?

+0

Lưu ý rằng câu trả lời được chấp nhận cho câu hỏi này đã lỗi thời. Có một giải pháp giải quyết phiên bản hiện tại của API Google Maps, có vẻ như đã không thay đổi kể từ năm 2013, tại đây: http://stackoverflow.com/a/17933106/4526479 –

Trả lời

8

Tôi nghĩ rằng những gì bạn đang tìm kiếm là address_components[] trong mảng results. Có lẽ một cái gì đó như thế này sẽ làm việc, chỉ cần gõ dưới đây để nó có thể có lỗi trong nó, nhưng tôi nghĩ rằng bạn sẽ có được ý tưởng.

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

Lưu ý câu trả lời dưới đây cho câu trả lời cập nhật (dường như API không thay đổi liên quan đến câu trả lời này kể từ khi 2013): http://stackoverflow.com/a/17933106/4526479 –

1

Có vẻ như quá :

Nguồn: Google Maps API Service

Geocoding là quá trình chuyển đổi địa chỉ (như "1600 Amphitheatre Parkway, Mountain View, CA") vào tọa độ địa lý (như vĩ độ và kinh độ 37,423021 -122,083739), mà bạn có thể sử dụng để đặt cột mốc hoặc vị trí bản đô. API mã hóa địa lý của Google cung cấp cách trực tiếp để truy cập trình mã hóa địa lý qua yêu cầu HTTP. Ngoài ra, dịch vụ cho phép bạn thực hiện thao tác trò chuyện (chuyển tọa độ thành địa chỉ); quá trình này được gọi là "mã hóa địa lý đảo ngược".

Bạn cũng nên kiểm tra tài liệu này trong đó có một số mẫu mã: Reverse Geocoding

+0

yoda: tôi đang chuyển đổi địa chỉ giống như bạn đã đăng ở trên, nhưng câu hỏi của tôi là nhiều hơn "có cách nào tôi có thể nhận mã zip dựa trên lat và lon không. –

8

Đây là giải pháp của tôi mà bỏ qua google js và nhận được kết quả như 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/

Tôi đoán này đã không làm việc từ lâu - mặc dù tôi thề rằng nó đã làm ở một thời điểm. Tôi phải bỏ lỡ một số cái bắt tay bí mật là một phần của google .js. Tôi chuyển sang 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) 

Đây là javascript biên soạn:

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

Sử dụng nó như thế này:

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

sẽ có ưu tiên không có trong coffeescript – Zone6

+0

Cảm ơn bạn đã di chuyển @ Zone6, đây là phiên bản JS. – Julian

+0

Cảm ơn điều này đã giúp tôi, mở bản đồ đường phố là waaayyy dễ dàng hơn để nhận mã zip, những gì cung cấp cho phiên bản của Google – garek007

6

Đó là tốt để lưu ý rằng Google Maps có một phiên bản mới kể từ solultion này đã được trình bày.

Tham chiếu: https://developers.google.com/maps/documentation/geocoding/?csw=1#ReverseGeocoding

Đây là ví dụ được cập nhật cho Google Maps v3.Nó sử dụng các thành phần địa chỉ mà JIssak đề cập ở trên. Tôi nên lưu ý rằng không có dự phòng. Nếu không tìm thấy mã zip, nó sẽ không làm gì cả. Điều này có thể hoặc có thể không quan trọng đối với tập lệnh của bạn.

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); 
     } 
    }); 
Các vấn đề liên quan