一、地理定位

1、获取地理信息方式

a)IP地址

b)三维坐标

i.GPS(Global Positioning System,全球定位系统)

ii.Wi-Fi

iii.手机信号

c)用户自定义数据

如下图对不同获取方式的优缺点进行了比较,浏览器会自动以最优方式去获取用户地理信息。

javascript 获取gps地址 html获取gps位置信息_地理信息

2、AIP说明
navigator.getCurrentPosition 获取当前地理位置信息
navigator.watchPosition 实时监控位置信息
c)1、当成功获取地理信息后,会调用succssCallback,并返回一个包含位置信息的对象position。Coords(坐标)
d)position.coords.latitude纬度
e)position.coords.longitude经度

3、案例

<div id="demo" class="de"></div>
<script>
    var x=document.getElementById("demo");
    function getLocation()
    {
        /*能力测试*/
        if (navigator.geolocation)
        {
            /*1.获取地理信息成功之后的回调
            * 2.获取地理信息失败之后的回调
            * 3.调整获取当前地进信息的方式*/
            //navigator.geolocation.getCurrentPosition(success,error,option);
            /*option:可以设置获取数据的方式
            * enableHighAccuracy:true/false:是否使用高精度
            * timeout:设置超时时间,单位ms
            * maximumAge:可以设置浏览器重新获取地理信息的时间间隔,单位是ms*/
            navigator.geolocation.getCurrentPosition(showPosition,showError,{
                /*enableHighAccuracy:true,
                timeout:3000*/
            });
        }
        else{
            x.innerHTML="Geolocation is not supported by this browser.";
        }
    }
    /*成功获取定位之后的回调*/
    /*如果获取地理信息成功,会将获取到的地理信息传递给成功之后的回调*/
    // position.coords.latitude 纬度
    // position.coords.longitude 经度
    // position.coords.accuracy 精度
    // position.coords.altitude 海拔高度
    function showPosition(position)
    {
        x.innerHTML="Latitude: " + position.coords.latitude +
                "<br />Longitude: " + position.coords.longitude;
    }
    /*获取定位失败之后的回调*/
    function showError(error)
    {
        alert("获取地理位置失败");
        switch(error.code)
        {
            case error.PERMISSION_DENIED:
                x.innerHTML="User denied the request for Geolocation."
                break;
            case error.POSITION_UNAVAILABLE:
                // 谷歌地图现在已经退出中国市场了 所以现在获取不到
                x.innerHTML="Location information is unavailable."
                break;
            case error.TIMEOUT:
                x.innerHTML="The request to get user location timed out."
                break;
            case error.UNKNOWN_ERROR:
                x.innerHTML="An unknown error occurred."
                break;
        }
    }
    getLocation();
</script>

Location information is unavailable.
执行之后会出现这个错误
谷歌地图现在已经退出中国市场了 所以现在获取不到,所以这边用腾讯的API
非常容易 去官网注册完之后 直接调用getLocation 以及getIpLocation这两个函数 在成功回调函数里面会传回一个JSON值 将其转换为JS实例对象然后输出展示在页面上
var geolocation = new qq.maps.Geolocation(“6KSBZ-YFBWF-23LJB-J4SFT-RXSRO-DIBBW”, “mapqq”); 这一句的话 分别是密钥以及应用昵称

<!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;
            width: 100%;
            height: 100%;
            text-align: center;
        }
        #pos-area {
            background-color: #009DDC;
            margin-bottom: 10px;
            width: 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;
            width: 42%;
            border-radius: 8px;
            background-color: #009DDC;
            color: white;
        }
    </style>
    <script type="text/javascript" src="https://mapapi.qq.com/web/mapComponents/geoLocation/v/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("6KSBZ-YFBWF-23LJB-J4SFT-RXSRO-DIBBW", "mapqq");

    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>

PS:因为感觉每一点的内容都可以延申出很多东西,所以以后会以多篇少内容的形式进行记录,这样也比较容易看而且容易管理,不会感觉很冗杂。