如何使用地理位置而不是完整的国家和地区名称来获取国家和地区代码

时间:2013-07-17 15:25:47

标签: javascript html5 geolocation

我正在构建一个在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地理定位吗?或者我应该使用完全不同的方法?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您应该使用国家/地区的short_name值,这是两位数的国家/地区代码。这些是ISO标准代码,应该是数据库查找的基础,而不是本地化的国家/地区名称。

答案 1 :(得分:1)

另一个具有行政区域ISO代码的选项是MaxMind的GeoIP2 JavaScript API:

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

它在可用时使用W3C地理位置,否则返回MaxMind的IP地理位置数据库。免费版本需要在您网站的某个位置归档。