2013-07-17 34 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地理定位数据库,否则。免费版本需要在您的网站上的某处进行归属。

相关问题