美文网首页
h5页面获取定位

h5页面获取定位

作者: it之承影含光 | 来源:发表于2018-12-11 14:55 被阅读37次

    在线demo

    备注:页面必须在https下,并且用户选择拒绝授权,之后会一直返回用户拒绝授权,在浏览器中,只能清除位置信息

    用到的服务

    1. h5获取定位的api navigator.geolocation.getCurrentPosition
    2. 新浪获取ip的接口 https://pv.sohu.com/cityjson?ie=utf-8
    3. 百度的地址解析

    代码

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>my-project</title>
      </head>
      <body>
        <p id="demo">点击这个按钮,获得您的坐标:</p>
        *******************************************************
        <p id="demo1"></p>
        <p><button onclick="getLocation()">试一下1</button></p>
        *******************************************************
        <p><button onclick="locationByIp()">ip定位</button></p>
    
        <script src="https://pv.sohu.com/cityjson?ie=utf-8"></script>
        <script src="https://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
        <script>
            
            var x=document.getElementById("demo");
            var x1=document.getElementById("demo1");
            function getLocation(){
                if (navigator.geolocation){
                    x1.innerHTML=JSON.stringify(navigator)
                    navigator.geolocation.getCurrentPosition(showPosition,showError,{
                            enableHighAcuracy : true,// 指示浏览器获取高精度的位置,默认为false  
                            timeout : 5000,// 指定获取地理位置的超时时间,默认不限时,单位为毫秒  
                            maximumAge : 2000 // 最长有效期,在重复获取地理位置时,此参数指定多久再次获取位置。  
                        });
                }else{
                    locationByIp();
                    x.innerHTML="Geolocation is not supported by this browser.";
                   console.log("Geolocation is not supported by this browser.");
                }
            }
            function showPosition(position){
                x.innerHTML="Latitude: " + position.coords.latitude + "<br />Longitude: " + position.coords.longitude;
                console.log("Latitude: " + position.coords.latitude + "<br />Longitude: " + position.coords.longitude);
            }
    // 上面的代码可以知道,如果用户设备支持地理定位,则运行 getCurrentPosition() 方法。如果getCurrentPosition()运行成功,则向参数showPosition中规定的函数返回一个coordinates对象,getCurrentPosition() 方法的第二个参数showError用于处理错误,它规定当获取用户位置失败时运行的函数。
    // 我们先来看函数showError(),它规定获取用户地理位置失败时的一些错误代码处理方式:
        showError=(error)=>{
            locationByIp();
            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;
            }
        };
        function locationByIp() {
            var localtion={};
            localtion.ip = returnCitySN.cip;
            // 通过百度api获得经纬度
            $.getJSON("https://api.map.baidu.com/location/ip?callback=?", {
                // 'ak' : 'x2CC5dtMtwjAAe6epLt2s1Kxs0BmSxPu',
                'ak' : 'lApvxfMWyOB9So5CZUOupRGg7wLYlbGx',
                'coor' : 'bd09ll',
                'ip' : localtion.ip
            }, function(data) {
                localtion.province = data.content.address_detail.province;
                localtion.city = data.content.address_detail.city;
                localtion.district = data.content.address_detail.district;
                x1.innerHTML=JSON.stringify(data.content);
            });
    
            // $.get(`http://ip.taobao.com/service/getIpInfo.php?ip=${localtion.ip}`,function(data){
            //     showLocation(JSON.parse(data))
            // })
        }
    
        function showLocation(){
            $.get(`http://gc.ditu.aliyun.com/geocoding?a=${returnCitySN.cname}`,function(res){
            })
        }
         </script>
      </body>
    </html>
    
    

    相关文章

      网友评论

          本文标题:h5页面获取定位

          本文链接:https://www.haomeiwen.com/subject/ottehqtx.html