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

Posted

技术标签:

【中文标题】如何使用地理位置而不是完整的国家和地区名称获取国家和地区代码【英文标题】:How can I get the country and region code using geolocation instead of full country and region names 【发布时间】:2013-07-17 15:25:46 【问题描述】:

我正在构建一个网站,该网站使用 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 标准代码,应该是您的数据库查找的基础,而不是本地化的国家/地区名称。

【讨论】:

当然,这么蠢……:)……行政区域也是这样吗? @JulienSprock 我无法与行政区域通话。我想这些不会因本地化而改变,但这是你需要测试的。 好的。不管怎么说,还是要谢谢你。刚刚检查了国家代码,并且有效。谢谢。【参考方案2】:

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

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

它在可用时使用 W3C 地理定位,否则使用 MaxMind 的 IP 地理定位数据库。免费版需要在您网站的某处注明出处。

【讨论】:

以上是关于如何使用地理位置而不是完整的国家和地区名称获取国家和地区代码的主要内容,如果未能解决你的问题,请参考以下文章

在 WooCommerce 中显示完整的国家名称而不是国家代码?

当用户在 Google 地图中拒绝位置访问时,如何向用户显示当前国家/地区?

检查IP国家/地区并显示完整的国家名称

在 Woocommerce 3 中获取地理位置的国家和地区

如何使用地理位置获取访问者的位置(即国家/地区)?

如何在 iOS SDK 上通过给定的邮政编码 (ZIP) 获取国家/地区名称