位置信息来源
Ip定位(一般精确到城市级)
GPS定位(需要硬件设备支持)
Wi-Fi定位(适合大城市,农村等无接入点地区效果不好)
手机定位
自定义定位:通过编程计算出用户的位置外,也可以应许用户自定义其位置,应用程序可能应许用户输入他们的地址,邮政编码等详细信息,应用程序根据这些信息提供位置感知服务
通过全局属性navigator.geolocation可以访问地理定位功能,它返回一个Geolocation对象,
Geolocation对象
名称 | 说明 | 返回 |
getCurrentPosition(callback,errorCallback,options) | 获取当前位置 | Void |
watchPosition(callback,error,options) | 开始监控当前位置 | 数值(id) |
clearWatch(id) | 停止监控当前位置 | void |
navigator.geolocation.getCurrentPosition(onSuccess,onError,options);
//成功时
function onSuccess(position){
//返回用户位置
//经度
var longitude =position.coords.longitude;
//纬度
var latitude = position.coords.latitude;
//使用百度地图API(或者使用腾讯地图也可以)
//创建地图实例
var map =new BMap.Map("container");
//创建一个坐标
var point =new BMap.Point(longitude,latitude);
//地图初始化,设置中心点坐标和地图级别
map.centerAndZoom(point,15);
}
//失败时
function onError(error){
switch(error.code){
case 1:
alert("位置服务被拒绝");
break;
case 2:
alert("暂时获取不到位置信息");
break;
case 3:
alert("获取信息超时");
break;
case 4:
alert("未知错误");
break;
}
}
在本例中调用了getCurrentPosition,有成功和失败时的回调函数,并且成功时返回一个position对象,失败时返回一个PositionError对象
position对象
名称 | 说明 | 返回 |
coords | 返回当前位置的坐标 | Coordinates |
timestamp | 返回获取坐标信息的时间 | 字符串 |
我们真正感兴趣的是Coordinates对象,它由Position.coords属性返回,
Coordinates对象
名称 | 说明 | 返回 |
latitude | 返回纬度 | 数值(十进制) |
longitude | 返回经度 | 数值(十进制) |
altitude | 返回海拔高度 | 数值(米) |
accuracy | 返回坐标经度 | 数值(米) |
altitudeAccuracy | 返回海拔精度 | 数值(米) |
heading | 返回行进方向 | 数值(度) |
Speed | 返回行进速度 | 数值(米/秒) |
PositionError对象
名称 | 说明 | 返回 |
code | 返回代表错误类型的代码 | 有如下数值 1用户未授权使用地理定位功能 2不能确定位置 3请求位置的尝试已超时 |
message | 返回描述错误的字符串 | 字符串 |
getCurrentPosition对象的第三个参数是一个PositionOptions对象,这个功能应许我们可以部分控制位置信息的获取方式
PositionOptions对象
名称 | 说明 | 返回 |
enableHighAccuracy | 告诉浏览器我们希望得到可能的最佳结果 | 布尔值 |
timeout | 限制请求位置的时间,设置多少毫秒后会报告一个超时错误 | 数值 |
maximumAge | 告诉浏览器我们愿意接受缓存过的位置,只要它不早于指定的毫秒数 | 数值 |
监控位置
可以使用watchPosition方法不断获得关于位置的更新这个方法所需的参数和getCurrentPosition方法相同,工作方式也一样,它们的区别在于:随着位置发生改变,回调函数会反复的调用,当你想停止监控时,可以把此方法返回的id值传递给clearWatch方法