大学毕业,到进入这个行业也已经有5个多月了,接触HTML5 Webapp开发也有5个多月了,趁着周末写一些关于在开发过程中使用HTML5 Geolocation API的一些心得。
一、浏览器支持
Internet Explorer 9+, Firefox, Chrome, Safari 和 Opera 支持Geolocation(地理定位).
移动端:Android 2.0+,iPhone 3.0+,Opera Mobile 10.1+,Symbian,Blackberry OS 6,Maemo
这是我入行大半年感觉最为头疼的,各个不同版本浏览器的兼容性。
二、getCurrentPosition(获取当前位置的GPS信息)
语法:window.navigator.getCurrentPosition(successfulCallback,failCallback,options)
successfulCallback : 成功获取到GPS定位信息之后的回调函数;
返回一个对象position,包含coords.latitude(纬度),coords.longitude(经度),以及accuracy 属性
failCallback : 获取GPS失败之后的回调函数;
返回一个对象:PERMISSION_DENIED(用户拒绝对获取地理位置的请求);
POSITION_UNAVAILABLE(位置信息是不可用的)
TIMEOUT(请求用户地理位置超时);
UNKNOWN_ERROR(未知错误)
options : 这是一个可选参数;
enableHighAccuracy: 是否要求高精度的地理位置信息
timeout:对地理位置信息的获取操作做一个超时限制(单位为毫秒),如果在该时间内未获取到地理位置信息,则返回错误
maximumAge: 对地理位置进行缓存的有效时间(单位为毫秒) ;例如缓存事件为2min 那么在9点中获取的GPS信息,在9:01再次获取时会返回9点获取的GPS信息;
Demo代码如下:
function getPosition(){
//判断浏览器是否支持HTML5 定位
if(window.navigator.geolocation){
navigator.geolocation.getCurrentPosition(successfulCallback,failCallback,options)
}else{
alert("你的浏览器不能使用HTML5定位")
}
}
function successfulCallback(position){
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
}
function failCallback(error){
var text ;
switch(error.code){
case error.PERMISSION_DENIED:
text ="用户拒绝对获取地理位置的请求。";
break;
case error.POSITION_UNAVAILABLE:
text ="位置信息是不可用的。";
break;
case error.TIMEOUT:
text ="请求用户地理位置超时。";
break;
case error.UNKNOWN_ERROR:
text ="未知错误。";
break;
}
}
}
三、watchPosition (跟踪用户不断的获取GPS),clearWatch(解除跟踪)
语法:var watchID = window.navigator.watchPosition(successfulCallback);
window.navigator.geolocation.clearWatch(watchID);
四、小结
使用HTML5 geolocation API 并且结合了百度地图 \Google地图\高德地图也做了不少的开发,其中遇到了一个最坑爹的问题,就是一台测试手机的GPS获取超级慢,有的时候还能获取失败,但是
在使用getCurrentPosition方法的时候一开始并没有在options中指定timeout ,然后导致了手机一直在获取GPS,根本进不去任何的回调函数,害的我对代码产生了质疑。