如何使用HTML5地理位置查找用户所在的国家/地区?

Cur*_*urt 30 javascript html5 geolocation

我熟悉HTML5地理位置,用于返回用户位置的粗略坐标.

但是,如何返回其坐标所在国家/地区的名称?

hip*_*ail 36

如果你只是想要这个国家,这里使用的方法ws.geonames.org比使用谷歌要简单得多:

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(result.countryName);
        });
    });
}?
Run Code Online (Sandbox Code Playgroud)

通常我会说使用谷歌服务意味着更高的可靠性,但最近有很多谷歌服务退役,看看其他一些解决方案可能是个好主意.


顺便说一句,我使用我能找到的所有免费地理编码服务做了一些实验.一旦其中一个人找到可接受的结果,它就会返回国家和服务的名称.

随意通过JSFiddle玩它:通过多个地理定位webapis延迟查找国家代码

  • ws.geonames.org 现在似乎已经死了 (6认同)

sla*_*dau 29

    var geocoder = new google.maps.Geocoder();
    geocoder.geocode({'latLng': <YOURLATLNGRESPONSEFROMGEO>}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                if (results[0]) {
                    var loc = getCountry(results);
                }
            }
        });

    function getCountry(results)
    {
        for (var i = 0; i < results[0].address_components.length; i++)
        {
        var shortname = results[0].address_components[i].short_name;
        var longname = results[0].address_components[i].long_name;
        var type = results[0].address_components[i].types;
        if (type.indexOf("country") != -1)
        {
            if (!isNullOrWhitespace(shortname))
            {
                return shortname;
            }
            else
            {
                return longname;
            }
        }
    }

}

function isNullOrWhitespace(text) {
    if (text == null) {
        return true;
    }
    return text.replace(/\s/gi, '').length < 1;
}
Run Code Online (Sandbox Code Playgroud)

这是我用的:)