h5地理位置API_h5获取移动端地理位置
2018-05-18 14:31:46  By: dwtedx

H5地理位置API

地理API允许javascript程序向浏览器询问用户的真实地理位置,支持地理位置API的浏览器在访问前总是会询问用户是否允许。


获取用户地理的途径有: 

1、ip地址 书上说不准确,很多时候获取的是ISP机房的位置,但是获取非常方便,没有什么限制。但是实际上我觉得在中国,ip地址还是比较准确的,基本上上能精确到小区或大楼的标准。

2、GPS   非常准确,但是需要在户外,且需要很长时间搜索卫星。最主要的很多设备比如笔记本电脑基本都是不带GPS的,新的智能手机倒是都有。        

3、WiFi基站的mac地址。(猜测是连接位置已知的公共WiFi的时候,通过Mac地址识别WiFi接入点,从而定位)这种定位的精度还是很不错的,而且还可以在室内定位。不过由于这种位置公开的wifi比较少,此种方法的适用范围比较少。

4、 GSM或CDMA基站通过基站定位,精度随基站密度变化,精度一般,还是只有手机能用。看来地理位置API还是手机上比较有实用性。        5、用户指定位置  这个就不是HTML5的范畴了。     使用getCurrentPosition获取用户的位置

if(navigator.geolocation){
    navigator.geolocation.getCurrentPosition(showPosition,showError);
}else{
    alert(´该浏览器不支持地理位置!´);
}

function showPosition(position){
    var lat=position.coords.latitude;
    var lng=position.coords.longitude;
    alert(´纬度´ lat "," "经度" lng);
}

function showError(error){
    switch(error.code) 
    {
        case error.PERMISSION_DENIED:
            alert("用户拒绝对获取地理位置的请求。")
            break;
        case error.POSITION_UNAVAILABLE:
            alert("位置信息是不可用的。")
            break;
        case error.TIMEOUT:
            alert("请求用户地理位置超时。")
            break;
        case error.UNKNOWN_ERROR:
            alert("未知错误。")
            break;
    }
}


支持地理位置的API的浏览器会定义navigator.geolocation。此属性拥有三个方法的对象:

navigator.geolocation.getCurrentPosition()  获取用户当前位置
navigator.geolocation.watchPosition()  获取并不断监视当前位置,一当有更改就会触发指定函数
navigator.geolocation.clearWatch()      停止监听用户位置


上面的代码可以知道,如果用户设备支持地理定位,则运行 getCurrentPosition() 方法。如果getCurrentPosition()运行成功,则向参数showPosition中规定的函数返回一个coordinates对象,getCurrentPosition() 方法的第二个参数showError用于处理错误,它规定当获取用户位置失败时运行的函数。

其实,除了前两个参数之外getCurrentPosition()还接受第三个参数,该参数为一个配置对象。该对象的属性指定是否需要高精度的位置信息,该位置的过期时间,以及系统在多长范围内获取位置信息。

pts={
    enableHightAccuracy:false,//获取高精度位置
    maximumAge:30000,  //过期时间
    timeout:15000   //15s的等待时间   
}

if(navigator.geolocation){
    navigator.geolocation.getCurrentPosition(showPosition,showError,opts);
}else{
   alert(´该浏览器不支持地理位置!´);
}

function showPosition(position){

}

function showError(error){

}


接着就是在地图上显示坐标位置(百度地图),在使用百度地图前,你必须先获取一下秘钥,点击这里

<!DOCTYPE html>
  <html>  
  <head>  
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />  
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  <title>Hello, World</title> 
  <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=vjxRk3m3YYQ4uglexlrOxEVwGc2Nw6kF"> 
  <style type="text/css">  
  html{height:100%}  
  body{height:100%;margin:0px;padding:0px}  
  #container{height:100%}  
  </style>  
  </head>
  <body>
  <div id=´container´></div>
  <script>
  var lat,lng;
  if(navigator.geolocation){
    navigator.geolocation.getCurrentPosition(showPosition);
  }else{
    document.getElementById("container").innerHTML="该浏览器不支持地理位置!";
  }
  function showPosition(position){
   lat=position.coords.latitude;
   lng=position.coords.longitude;
   alert("纬度" latlonX "<br/>经度" latlonY);
  }
  var map = new BMap.Map("container");          // 创建地图实例  
  var point = new BMap.Point(lat,lng);          // 创建点坐标  
  map.centerAndZoom(point, 15);                 // 初始化地图,设置中心点坐标和地图级别 
</script>
</body>
</html>


其中,位于BMap命名空间下的Map类表示地图,通过new操作符可以创建一个地图实例。其参数可以是元素id也可以是元素对象(这里是container)。

地图添加到container容器里,所以要确保container容器在页面有宽和高,所以设置了style,如上,ak是你申请的秘钥。

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


猜你喜欢的

快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+