2013-07-17 38 views
2

我正在構建一個網站,該網站使用HTML5中的地理位置來提供特定於用戶所在地區的服務。以下是我一直在做的事情:我使用這個SO question中的Javascript獲取國家和行政區域名稱。然後我搜索數據庫中的國家和地區名稱,它會返回我可以顯示的特定於位置的數據。如何使用地理位置而不是完整的國家和地區名稱獲取國家和地區代碼

下面是腳本:

<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script> 
<script> 
    var region = ""; 
    var country = ""; 
    function getLocation() 
    { 
     if (navigator.geolocation) 
      { 
       navigator.geolocation.getCurrentPosition(showPosition,noGeolocation); 
      } else { 
       ... 
      } 
    } 
    function showPosition(position) 
    { 
     var geocoder = new google.maps.Geocoder(); 
     var latlong = new google.maps.LatLng(position.coords.latitude,position.coords.longitude); 
     geocoder.geocode({'latLng': latlong}, function(results, status) { 
       if (status == google.maps.GeocoderStatus.OK) { 
        if (results[0]) { 
        for (var i = 0; i < results[0].address_components.length; i++) 
        { 
         var longname = results[0].address_components[i].long_name; 
         var type = results[0].address_components[i].types; 
         if (type.indexOf("administrative_area_level_1") != -1) 
         { 
          region = longname; 
         } 
         if (type.indexOf("country") != -1) 
         { 
          country = longname; 
         } 
         } 
       } 
     }); 
    } 
    function noGeolocation() 
    { 
     ... 
    } 

    getLocation(); 
</script> 

這個腳本工作正常。我沒有問題,直到我用一個操作系統和瀏覽器設置爲不同的語言。劇本然後以該語言返回國家和地區名稱。當然,我無法在數據庫中找到任何匹配項。

所以,問題是:有沒有一種方法可以從谷歌反向地理位置獲取語言無關的國家和地區代碼?或者有沒有一種方法可以始終使用英語?我最好使用IP地理位置嗎?還是應該使用完全不同的方法?

感謝您的幫助。

回答

1

您應該使用該國家的short_name值,該國家是兩位數的國家/地區代碼。這些是ISO標準代碼,應該是數據庫查詢的基礎,而不是本地化的國家/地區名稱。

+0

當然,這麼愚蠢...... :) ......這對行政區域來說也是如此嗎? –

+0

@JulienSpronck我不能和行政區域說話。我會想象這些不會因本地化而改變,但這是你需要測試的東西。 –

+0

好的。不管怎麼說,還是要謝謝你。只是檢查了國家代碼和那個工程。謝謝。 –

1

另一種選擇,它具有ISO代碼爲行政區域,是的MaxMind的GeoIP2的JavaScript API:

http://dev.maxmind.com/geoip/geoip2/javascript/

它採用W3C地理位置可用時,倒在的MaxMind的IP地理定位數據庫,否則。免費版本需要在您的網站上的某處進行歸屬。

相關問題