zoukankan      html  css  js  c++  java
  • 手机端网页使用html5地理定位获取位置失败的解决办法

    网上有很多关于html5 geolocation 获取地理定位的方法,我试了下,只有在IE edge浏览器可以成功获取到,在chrome,firefox,手机端的safari,QQ浏览器,微信浏览器,都返回一样的错误信息:

    POSITION_UNAVAILABLE

    网上的方法大概是这样的:

    if(navigator.geolocation){  
      navigator.geolocation.getCurrentPosition(onSuccess , onError);  
    }else{  
      alert("您的浏览器不支持使用HTML 5来获取地理位置服务");  
    }  
    //定位数据获取成功响应  
    function  onSuccess(position){  
          alert('纬度: '          + position.coords.latitude          + '
    ' +  
          '经度: '         + position.coords.longitude         + '
    ' +  
          '海拔: '          + position.coords.altitude          + '
    ' +  
          '水平精度: '          + position.coords.accuracy          + '
    ' +  
          '垂直精度: ' + position.coords.altitudeAccura)  
    }  
    //定位数据获取失败响应  
    function onError(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,来转换为城市。

    我这里尝试返回错误信息的原因我猜可能是html5 默认调用的谷歌的接口,会有安全限制,所以我这里使用了腾讯的api实现。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    <!DOCTYPE html>
    <html> 
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
        <title>前端定位模块</title> 
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
        <style>
            * {
                margin: 0;
                padding: 0;
                border: 0;
            }
            body {
                position: absolute;
                 100%;
                height: 100%;
                text-align: center;
            }
            #pos-area {
                background-color: #009DDC;
                margin-bottom: 10px;
                 100%;
                overflow: scroll;
                text-align: left;
                color: white;
            }
            #demo {
                padding: 8px;
                font-size: small;
            }
            #btn-area {
                height: 100px;
            }
            button {
                margin-bottom: 10px;
                padding: 12px 8px;
                 42%;
                border-radius: 8px;
                background-color: #009DDC;
                color: white;
            }
        </style>
        <script type="text/javascript" src="https://3gimg.qq.com/lightmap/components/geolocation/geolocation.min.js"></script>
    </head>
    <body>
        <div id="pos-area">
            <p id="demo">点击下面的按钮,获得对应信息:<br /></p>
        </div>
     
        <div id="btn-area">
            <button onClick="geolocation.getLocation(showPosition, showErr, options)">获取精确定位信息</button>
            <button onClick="geolocation.getIpLocation(showPosition, showErr)">获取粗糙定位信息</button>
            <button onClick="showWatchPosition()">开始监听位置</button>
            <button onClick="showClearWatch()">停止监听位置</button>
        </div>
        <script type="text/JavaScript">
            var geolocation = new qq.maps.Geolocation("OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77", "myapp");
     
            document.getElementById("pos-area").style.height = (document.body.clientHeight - 110) + 'px';
     
            var positionNum = 0;
            var options = {timeout: 8000};
            function showPosition(position) {
                positionNum ++;
                document.getElementById("demo").innerHTML += "序号:" + positionNum;
                document.getElementById("demo").appendChild(document.createElement('pre')).innerHTML = JSON.stringify(position, null, 4);
                document.getElementById("pos-area").scrollTop = document.getElementById("pos-area").scrollHeight;
            };
     
            function showErr() {
                positionNum ++;
                document.getElementById("demo").innerHTML += "序号:" + positionNum;
                document.getElementById("demo").appendChild(document.createElement('p')).innerHTML = "定位失败!";
                document.getElementById("pos-area").scrollTop = document.getElementById("pos-area").scrollHeight;
            };
     
            function showWatchPosition() {
                document.getElementById("demo").innerHTML += "开始监听位置!<br /><br />";
                geolocation.watchPosition(showPosition);
                document.getElementById("pos-area").scrollTop = document.getElementById("pos-area").scrollHeight;
            };
     
            function showClearWatch() {
                geolocation.clearWatch();
                document.getElementById("demo").innerHTML += "停止监听位置!<br /><br />";
                document.getElementById("pos-area").scrollTop = document.getElementById("pos-area").scrollHeight;
            };
        </script>
    </body>
    </html>

    这是腾讯api接口的示例,很好用,很适合wap端网站定位实现

  • 相关阅读:
    poj2594 Treasure Exploration 二分匹配之最小路径覆盖+传递闭包
    Qsort和Sort排序函数用法
    poj1696 Space Ant 卷包裹法 向量叉积比较
    poj1113 Wall 凸包问题 官方数据
    poj2187 Beauty Contest 凸包求点集的直径
    printf 里面的 %lf 要改成 %f G++,G++的浮点型需要%f输出,%lf就是WA!!!
    让IE6支持Fixed
    更改input type="file" 的样式
    Repeater心得
    Windows服务删除
  • 原文地址:https://www.cnblogs.com/beileixinqing/p/7988770.html
Copyright © 2011-2022 走看看