如何使用地名服务 api 而不是 html5 位置对象的东西获取国家/地区代码信息

Posted

技术标签:

【中文标题】如何使用地名服务 api 而不是 html5 位置对象的东西获取国家/地区代码信息【英文标题】:How to get country code information using geonames service api not the html5 location object thing 【发布时间】:2013-08-03 19:51:15 【问题描述】:

我正在尝试使用 Geonames Servcie API 获取用户当前位置的国家代码。而且我相信 geonames 服务 API 会返回两个字母的国家代码而不是三个字母的国家代码,我需要三个字母的国家代码。所以为此,我做了两个字母国家代码和三个字母国家代码之间的映射。

下面是我的代码,我的警报框根本不工作。我很确定我错过了什么?

<html>
    <head>
        <title>Visitor's location</title>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script>

    $(document).ready( function() 
        $.getJSON('http://ws.geonames.org/countryCode', 
            lat: position.coords.latitude,
            lng: position.coords.longitude,
            type: 'JSON'
        , function(result) 
            alert('Country: ' + result.countryName + '\n' + 'Code: ' + result.countryCode);
        $('#newURL').attr('href','https://www.google.com&jobid='+result.countryCode);
        );
); 


    </script>   
    </head>
    <body>

    <a id="newURL">URL</a>

    </body>
</html>

我在上面的代码中做错了什么?以下是我在控制台上遇到的错误。

Uncaught ReferenceError: position is not defined

【问题讨论】:

我认为错误很清楚出了什么问题,不是吗? 可能你没有设置位置??? 是的。但我不确定如何在不要求用户启用物理位置的情况下获得这个位置对象。或者有没有其他方法可以解决这个问题? 那么,您的实际问题是如何找出用户当前的位置,而不是如何获取国家代码信息/为什么您的代码不起作用? 我的主要问题是获取用户位置,然后使用地名从中提取国家代码。由于我在问题中提到的错误,我的代码无法正常工作。 【参考方案1】:

使用 HTML5 地理位置你可以做到:

$(document).ready( function() 
    if (navigator.geolocation) 
        navigator.geolocation.getCurrentPosition(function(position) 
            $.getJSON('http://ws.geonames.org/countryCode', 
                lat: position.coords.latitude,
                lng: position.coords.longitude,
                type: 'JSON'
            , function(result) 
                alert('Country: ' + result.countryName + '\n' + 'Code: ' + result.countryCode);
                $('#newURL').attr('href','https://www.google.com&jobid='+result.countryCode);
            );
        );
    
); 

FIDDLE

或者您可以使用服务:

$(document).ready( function() 
    $.getJSON("http://freegeoip.net/json/", function(result)
        alert('Country: ' + result.country_name + '\n' + 'Code: ' + result.country_code);
        $('#newURL').attr('href','https://www.google.com&jobid='+result.country_code);
    );
); 

FIDDLE

【讨论】:

服务部分也不能使用 geonames api 吗? 我不太了解地名,但如果他们提供 IP 查找地理定位服务,您当然可以使用它。如果他们不提供类似的东西,就没有办法获得坐标,大多数给你坐标的服务,就像我上面使用的那样,也会给你国家代码和国家名称,所以没必要看它再来一次?

以上是关于如何使用地名服务 api 而不是 html5 位置对象的东西获取国家/地区代码信息的主要内容,如果未能解决你的问题,请参考以下文章

在openlayers中,如何在输入地名之后,在地图的对应的位置就标记出来呢?该怎么实现?

Google API 返回服务器位置,而不是用户位置

没有 HTML5 API 的地理定位

当 Mac 设置(不是浏览器设置)拒绝位置共享时,HTML5 Geolocation API 悄然失败

按邮政编码查找位置[关闭]

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