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.
posted @ 2016-11-17 15:25  SniffRose  阅读(470)  评论(0编辑  收藏  举报