获取用户地理位置信息

因为项目中要用到Google地图,这两天就研究了下Google地图Api,使用Google地图首选需要地理定位,如何检测用户位置呢?有这样几种方法:

1.一些较新版本的浏览器正开始支持 W3C Geolocation 标准。此标准是 HTML5 的一部分,以后很可能会成为真正的标准。所有希望执行地理定位的应用程序都应当支持此标准。(需要用户在浏览器中设计共享地理位置)

2.某些带 Google Gears 的浏览器可以使用 Google Gears Geolocation API。(如要引用http://code.google.com/apis/gears/gears_init.js)

3.用 IP 地址来检测用户的位置,然后从数据库获取对应位置的经纬度。(这种方式不是很好的哟)

先介绍下Geolocation

Geolocation是W3C 中新添加API 规范,Geoloaction API的作用就是通过浏览器获取用户的地理位置。我们可以使用navigator.geolocation来简单的获取用户的地理位置信息。

Geolocation在JavaScript的navigator 对象中,我们可以通过 navigator.geolocation 来使用它。不支持 geolocation 的浏览器并不包含这一对象,那么可以通过下面的代码来做能力检测,对不同的浏览器做不同的处理。

if (navigator.geolocation) {
        alert( ' 浏览器支持 geolocation ' );
}else{
        alert( ' 浏览器不支持 geolocation ' );
}

在访问 geolocation 对象时,即调用 geolocation 下面的方法时,浏览器会弹出提示,询问用户是否许可网站提供的位置服务,只有在得到用户许可过后,服务才会继续,否则将被停止,在稍后你将会了解到,我们能够捕获到用户拒绝服务的动作。

navigator.geolocation对象有以下三种方法:

  1. 获取当前地理位置:navigator.geolocation.getCurrentPosition(success_callback_function, error_callback_function, position_options)
  2. 持续获取地理位置:navigator.geolocation.watchPosition(success_callback_function, error_callback_function, position_options)
  3. 清除持续获取地理位置事件:navigator.geolocation.clearWatch(watch_position_id)

其中success_callback_function为成功之后处理的函数,error_callback_function为失败之后返回的处理函数,参数position_options是配置项。

position_options由JSON格式传入:

    1. enableHighAccuracy:true/false,它将告诉浏览器是否启用高精度设备,所谓的高精度设备包含但不局限于前面所提到的 GPS 和 WIFI,值为 true 的时候,浏览器会尝试启用这些设备,默认指为 true,在这种情况下,浏览器会尽可能地进行更为精确的查询,简单地说,如果用户有可用的 GPS 设备,会返回 GPS 设备的查询结果,IP 是最后的选择,对于移动设备来说,网络接入点(基站)或许成为另一个选择,对此我还没有完全了解,但根据测试,即时没有任何额外功能的手机,也能够得到更为精确的查询结果。
    2. maximumAge:单位毫秒,告诉设备缓存时间,主要用于设备的省电或者节省带宽方面。
    3. timeout:单位毫秒,超时事件,获取位置信息时超出设定的这个时长,将会触发错误,捕获错误的函数将被调用,并且错误码指向TIMEOUT。

获取经纬度代码:(需要引用http://code.google.com/apis/gears/gears_init.js)

function InitLatLng() {
var initialLocation = new google.maps.LatLng(32.07, 118.78);//默认经纬度

if (navigator.geolocation) // W3C Geolocation 标准
{
navigator.geolocation.getCurrentPosition(
function(position){initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude); },
function() { initialLocation = GetUserLatLngByIp(); }
);
}
else if (google.gears) // Google Gears
{
var geo = google.gears.factory.create('beta.geolocation');
geo.getCurrentPosition(
function(position) { initialLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); },
function() { initialLocation = GetUserLatLngByIp(); }
);
}
else // Ip
{
initialLocation=GetUserLatLngByIp();
}
return initialLocation;
}

//通过Ip获取经纬度
function GetUserLatLngByIp() {
var initialLocation = new google.maps.LatLng(32.07, 118.78); //默认经纬度
//在些添加根据Ip获取对应市区经纬度逻辑
return initialLocation;
}


 

作者:JetWu
出处:http://jetwu.cnblogs.com/
本博原创文章版权归博客园和本人共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出作者名称和原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/jetwu/archive/2011/10/27/2226092.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值