zoukankan      html  css  js  c++  java
  • H5 Notes:Navigator Geolocation

    H5的地理位置API可以帮助我们来获取用户的地理位置,经纬度、海拔等,因此我们可以利用该API做天气应用、地图服务等。

    Geolocation对象是我们获取地理位置用到的对象。

    首先判断浏览器是否支持该对象

    if('geolocation' in navigator){
        navigator.geolocation.getCurrentPosition(success,fail,options);
    }else{
        alert('浏览器不支持获取地理位置!');
    }

    获取用户地理位置getCurrentPosition,该方法可以传三个参数success[, error[, options]],

    获取成功就执行success回调函数并传递position参数,该参数包涵了coords对象,该对象内容如下所示

    latitude :纬度
    longitude:经度
    altitude :海拔高度
    accuracy :精度
    altitudeAccuracy :海拔精度
    speed :外部环境的移动速度

    失败则执行error回调并带上error参数,该参数有个code属性,用以指示失败的原因,如下所示:

    Value    Associated constant    Description
    1    PERMISSION_DENIED    没有权限
    2    POSITION_UNAVAILABLE    位置不可用
    3    TIMEOUT    获取超时

    ,最后一个参数options是一个对象,可以有三个属性,如下所示

     enableHighAccuracy: true,  是否启用高精度
     timeout: 5000, 超时时间
     maximumAge: 0 应用的缓存时间

    下面是一个利用百度地图的API根据经纬度获取城市信息的小例子,由于百度API需要key,自己需要申请一个。

    var url = "http://api.map.baidu.com/geocoder/v2/?ak=cPnGmGz3euAuMCVklyz73Qa1",
        options = { 
            enableHighAccuracy:true,
            timeout: 5000,
            maximumAge: 0
        };
    var script = document.createElement('script');
    script.type = "text/javascript";
    
    function dealResult(data){
        alert(JSON.stringify(data));
    }
    
    function success(position){
        var latitude = position.coords.latitude;
        var longitude = position.coords.longitude;
        url = url + '&location=' + latitude + ',' + longitude + '&output=json&pois=1&callback=dealResult';
        script.src = url;
        document.getElementsByTagName('head')[0].appendChild(script);
    }
    
    function fail(error){
        switch(error.code){
            case error.PERMISSION_DENIED:
                console.log('没有获取位置信息的权限');
                break;
            case error.POSITION_UNAVAILABLE:
                console.log('位置信息不可用');
                break;
            case error.TIMEOUT:
                console.log('获取位置信息超时');
                break;
        }
    }
    if('geolocation' in navigator){
        navigator.geolocation.getCurrentPosition(success,fail,options);
    }else{
        alert('浏览器不支持获取地理位置!');
    }

    获取到的城市信息如下所示:

    {
        "status": 0,
        "result": {
            "location": {
                "lng": 114.05751299999999,
                "lat": 22.64580900174618
            },
            "formatted_address": "广东省深圳市宝安区东环二路50",
            "business": "民治,龙华,潜龙花园",
            "addressComponent": {
                "country": "中国",
                "country_code": 0,
                "province": "广东省",
                "city": "深圳市",
                "district": "宝安区",
                "adcode": "440306",
                "street": "东环二路",
                "street_number": "50",
                "direction": "西北",
                "distance": "57"
            },
            "pois": [
                {
                    "addr": "东环二路49号附近",
                    "cp": " ",
                    "direction": "附近",
                    "distance": "27",
                    "name": "靖轩龙华工业园",
                    "poiType": "公司企业",
                    "point": {
                        "x": 114.05727565178965,
                        "y": 22.64585864640103
                    },
                    "tag": "公司企业;园区",
                    "tel": "",
                    "uid": "51b3387b26aed6235fd4fe81",
                    "zip": ""
                },
                {
                    "addr": "富豪新村二巷附近",
                    "cp": " ",
                    "direction": "西南",
                    "distance": "200",
                    "name": "水斗富豪新村",
                    "poiType": "房地产",
                    "point": {
                        "x": 114.058515313393,
                        "y": 22.647201155091143
                    },
                    "tag": "房地产;住宅区",
                    "tel": "",
                    "uid": "141109be59d277b83686f44c",
                    "zip": ""
                },
                {
                    "addr": "深圳市宝安区",
                    "cp": " ",
                    "direction": "附近",
                    "distance": "45",
                    "name": "阳光蕾幼儿园",
                    "poiType": "教育培训",
                    "point": {
                        "x": 114.05716785512848,
                        "y": 22.646017079794483
                    },
                    "tag": "教育培训;幼儿园",
                    "tel": "",
                    "uid": "56c496efcbce5bdcbabd63e0",
                    "zip": ""
                },
                {
                    "addr": "深圳市龙华新区东环一路",
                    "cp": " ",
                    "direction": "南",
                    "distance": "75",
                    "name": "凤天大厦",
                    "poiType": "房地产",
                    "point": {
                        "x": 114.05729361789984,
                        "y": 22.646408993183947
                    },
                    "tag": "房地产;写字楼",
                    "tel": "",
                    "uid": "ec7ce450995433ffc1f1cf04",
                    "zip": ""
                },
                {
                    "addr": "深圳市龙岗区东环二路",
                    "cp": " ",
                    "direction": "西北",
                    "distance": "115",
                    "name": "国安村镇银行",
                    "poiType": "金融",
                    "point": {
                        "x": 114.0579853131423,
                        "y": 22.644949735465907
                    },
                    "tag": "金融;银行",
                    "tel": "",
                    "uid": "26739d57c4af8c836fa3ccbc",
                    "zip": ""
                },
                {
                    "addr": "深圳龙华新区大浪商业中心",
                    "cp": " ",
                    "direction": "西北",
                    "distance": "114",
                    "name": "华盛大厦",
                    "poiType": "房地产",
                    "point": {
                        "x": 114.05802124536268,
                        "y": 22.644983090103185
                    },
                    "tag": "房地产;写字楼",
                    "tel": "",
                    "uid": "63f36ce15aefa373b64f5407",
                    "zip": ""
                },
                {
                    "addr": "富豪新村二巷附近",
                    "cp": " ",
                    "direction": "南",
                    "distance": "221",
                    "name": "强记百货厨具行",
                    "poiType": "购物",
                    "point": {
                        "x": 114.05808412674835,
                        "y": 22.647576388065445
                    },
                    "tag": "购物;家居建材",
                    "tel": "",
                    "uid": "7bf3c226751022e60a5cb36f",
                    "zip": ""
                },
                {
                    "addr": "油松东环一路一号一楼好荟品旗舰店(近和谐修车)",
                    "cp": " ",
                    "direction": "东南",
                    "distance": "251",
                    "name": "好荟品深圳旗舰店",
                    "poiType": "美食",
                    "point": {
                        "x": 114.05573056631299,
                        "y": 22.647101092789494
                    },
                    "tag": "美食;外国餐厅",
                    "tel": "",
                    "uid": "54ebc6e9fe4c7610095cb3d4",
                    "zip": ""
                },
                {
                    "addr": "宝安区东环二路蓝调酒吧旁",
                    "cp": " ",
                    "direction": "西北",
                    "distance": "284",
                    "name": "水斗星幼儿园",
                    "poiType": "教育培训",
                    "point": {
                        "x": 114.05889260170707,
                        "y": 22.64380733419285
                    },
                    "tag": "教育培训;幼儿园",
                    "tel": "",
                    "uid": "0727de0c15a3e427077ce8a9",
                    "zip": ""
                },
                {
                    "addr": "龙华新区东环一路1号",
                    "cp": " ",
                    "direction": "东南",
                    "distance": "217",
                    "name": "一汽大众(龙华安进誉隆店)",
                    "poiType": "汽车服务",
                    "point": {
                        "x": 114.05583836297416,
                        "y": 22.646742535602986
                    },
                    "tag": "汽车服务;汽车销售",
                    "tel": "",
                    "uid": "7a3c6d6322de3dce11882495",
                    "zip": ""
                }
            ],
            "poiRegions": [],
            "sematic_description": "靖轩龙华工业园附近27米",
            "cityCode": 340
        }
    }

    Geolocation还有两个方法watchPosition和clearWatch,前者可以用来检测用户位置的改变,只要改变便会调用该函数注册的回调函数,并返回一个watchId,后者用于清除前者注册的事件处理函数。

    watchPosition的参数和getCurrentPosition一致,使用方法如下

    id = navigator.geolocation.watchPosition(success, error, options);

    clearWatch使用方法如下

    navigator.geolocation.clearWatch(id);
    ValueAssociated constantDescription
    1 PERMISSION_DENIED The acquisition of the geolocation information failed because the page didn't have the permission to do it.
    2 POSITION_UNAVAILABLE The acquisition of the geolocation failed because at least one internal source of position returned an internal error.
    3 TIMEOUT The time allowed to acquire the geolocation, defined byPositionOptions.timeout information was reached before the information was obtained.
  • 相关阅读:
    java虚拟机之垃圾回收机制
    java虚拟机之JVM体系结构
    java虚拟机之JVM生命周期
    删除链表中重复的结点
    (二十一)java多线程之Executors
    (十八)java多线程之Callable Future
    (十六)java多线程之优先队列PriorityBlockingQueue
    (十九)java多线程之ForkJoinPool
    (二十)java多线程之ScheduledThreadPoolExecutor
    (六)java多线程之ReadWriteLock
  • 原文地址:https://www.cnblogs.com/zmxmumu/p/6073945.html
Copyright © 2011-2022 走看看