通过地理位置获取用户的状态

时间:2011-06-12 07:12:59

标签: html5 geolocation location

获得美国用户状态的最有效方法是什么? HTML5地理位置是一个选项而不需要涉及谷歌地图吗?

6 个答案:

答案 0 :(得分:12)

以下是JavaScript和JSON中的几个示例(在jQuery的帮助下)使用IP查找方法(在IPinfoDB的帮助下)和Geolocation API方法(与Google Maps APIYQL)的帮助。

在这两个示例中,我正在检索区域和国家/地区,但您可以选择多个值。请注意,这些示例不会进行任何错误处理,因此为了简洁起见,我们会对其进行编辑,否则请参阅the full demo

JavaScript中的IP查找

这种方法很好,因为它易于实施,并且在国家层面上相当准确,但对于任何更具体的内容,准确度会大幅下降。

// API key excluded for brevity, see full demo.
var apiurl = 'http://api.ipinfodb.com/v3/ip-city';
$.getJSON(apiurl+'/format=json&callback=?',
    function(data){
        $("h3#location").html(data.regionName + ", " + data.countryName);
    }
);

地理位置API

虽然绝不是完美的,但这种方法准确无误。系统会提示用户共享可能会降低使用率的地理位置详细信息。

navigator.geolocation.getCurrentPosition(function(pos){
    $.getJSON(apiurl+'/format=json&callback=?',
        function(data){
            var regionName = data[...]AdministrativeAreaName;
            var countryName = data[...]CountryName;
            $("h3#location").html(regionName + ", " + countryName);
        }
    );
});

在那里你会看到我通过Google Maps API v3使用YQL,以便可以进行JSON回调。

完整演示:http://jsfiddle.net/ZjXXh

答案 1 :(得分:2)

如果网站需要确切的位置来显示本地数据,餐馆,商店等,新的浏览器地理定位功能非常好。但是,如果您在笔记本电脑上运行它,它将尝试根据无线网络估算位置附近可用,所以它可能只有几公里,这意味着它可以获得的最准确的是城镇级别。

对于网站开发人员,如果您依赖于此,您必须首先知道,用户必须接受为您的网站提供位置。大多数人看不到,其他人忽略了该消息,以及当用户使用不支持此功能的Internet Explorer或旧浏览器时,或者如果他没有打开计算机上的Wi-Fi,您会执行的操作。认为在大多数情况下你会得到一个大约2公里的位置,那么在大多数情况下你会考虑城镇级的准确性,这不过是知识产权所能给你的地理位置。

IP地理定位的优势是: *您不必担心用户拥有过时的浏览器 *您不必担心用户会害怕共享其位置的请求。他不知道这个位置不是他的确切位置,而是近似的位置。 *用户不会收到通知您正在使用他的计算机来跟踪位置的通知。 *它适用于没有Wi-Fi的计算机。

我认为实现这一目标的理想方法是将两个系统都安装到位。询问用户该位置,但如果浏览器已过时或用户未提供该位置,则切换到从IP获取位置。要从IP获取位置,您可以在此处使用IPGP API:http://www.ipgp.net/developer-tools/

答案 2 :(得分:1)

我不确定它是否更有效,但另一种选择是通过IP定位。它虽然可能不正确,但只是大致的位置。

答案 3 :(得分:1)

假设您已经从Geolocation回调中获得了经度和纬度,您需要的是反向地理编码。 (地理编码意味着按地址查找纬度和经度,因此反向地理编码的作用很明显。)

Google的地理编码(以及反向地理编码)服务是免费的。您可以在此处阅读API: http://code.google.com/apis/maps/documentation/geocoding/#ReverseGeocoding

请务必在使用之前申请Google Maps API密钥。

答案 4 :(得分:0)

是的,与gmaps相比,地理位置是最有效的方式,如果你真的坐下来比较速度和开销(对于你/你的服务器我的意思),因为浏览器会给你。 Gmaps需要有关其API的知识才能使用它。但地理定位更容易。文章here清楚地描述了地理定位。以下是从该网站获取的一段非常简单的代码

navigator.geolocation.getCurrentPosition(show_map);
function show_map(position) {
  var latitude = position.coords.latitude;
  var longitude = position.coords.longitude;
  // let's show a map or do something interesting!
}

答案 5 :(得分:0)

使用第三方API,例如ipdata.co

  

这个答案使用了'测试' API密钥非常有限,仅用于测试几个调用。 Signup用于您自己的免费API密钥,每天最多可获得1500个请求以进行开发。

$.get("https://api.ipdata.co/74.125.230.195?api-key=test", function(data, status){
    console.log(data.region);
});