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);
Value Associated constant Description
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.

H5 Notes:Navigator Geolocation的更多相关文章

  1. H5 Notes:PostMessage Cross-Origin Communication

    Javascript中要实现跨域通信,主要有window.name,jsonp,document.domain,cors等方法.不过在H5中有一种新的方法postMessage可以安全实现跨域通信,并 ...

  2. H5学习系列之Geolocation API

    获取位置信息途径: 1.IP地址地理定位数据 2.GPS地理定位数据 3.WI-FI地理定位数据 4.手机地理定位数据 无废话直接上重点:navigator.geolocation对象就是获取地理位置 ...

  3. JS新API标准 地理定位(navigator.geolocation)/////////zzzzzzzzzzz

    在新的API标准中,可以通过navigator.geolocation来获取设备的当前位置,返回一个位置对象,用户可以从这个对象中得到一些经纬度的相关信息. navigator.geolocation ...

  4. JS新API标准 地理定位(navigator.geolocation)

    在新的API标准中,可以通过navigator.geolocation来获取设备的当前位置,返回一个位置对象,用户可以从这个对象中得到一些经纬度的相关信息. navigator.geolocation ...

  5. 使用navigator.geolocation来获取用户的地理位置信息

    使用navigator.geolocation来获取用户的地理位置信息 W3C 中新添加了一个名为 Geolocation的 API 规范,Geoloaction API的作用就是通过浏览器获取用户的 ...

  6. js定位navigator.geolocation

    一.简介 html5为window.navigator提供了geolocation属性,用于获取基于浏览器的当前用户地理位置. window.navigator.geolocation提供了3个方法分 ...

  7. js地理定位对象 navigator.geolocation

    浏览器信息的存储对象(navigator): 在新的API标准中,可以通过navigator.geolocation来获取设备的当前位置,返回一个位置对象,用户可以从这个对象中得到一些经纬度的相关信息 ...

  8. 【H5】 经纬度位置获取navigator.geolocation.getCurrentPosition

    navigator.geolocation.getCurrentPosition(function(){})经度 : coords.longitude 纬度 : coords.latitude 准确度 ...

  9. HTML5编程之旅系列一:HTML5 Geolocation 初探

    让我们假设这样一个场景,有一个web应用程序,它可以向用户提供附近不远处某商场的打折优惠信息.使用HTML5 Geolocation API(地理定位 API),可以请求用户共享他们的位置信息. HT ...

随机推荐

  1. ASP.NET MVC 请求路径相关参数的获取

    Request.ApplicationPath / Request.CurrentExecutionFilePath /Home/Index Request.FilePath /Home/Index ...

  2. 轻量级“集合”迭代器-Generator

    Generator是PHP 5.5加入的新语言特性.但是,它似乎并没有被很多PHP开发者广泛采用.因此,在我们了解PHP 7对Generator的改进之前,我们先通过一个简单却显而易见的例子来了解下G ...

  3. Hawk 5. 数据库系统

    Hawk在设计之初,就是以弱schema风格定义的.没有严格的列名和列属性.用C#这样的静态强类型语言编写Hawk,其实并不方便.但弱schema让Hawk变得更灵活更强大. 因此,Hawk虽然之前支 ...

  4. [C#] C# 知识回顾 - 委托 delegate

    C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性 ...

  5. 基于DFA敏感词查询的算法简析

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要对敏感词做一个过滤,首先有几个方案可以选择: a.直 ...

  6. 深入理解CSS六种颜色模式

    前面的话 赏心悦目的颜色搭配让人感到舒服,修改元素颜色的功能让人趋之若鹜.但颜色规划不当,会让网站用户无所适从.颜色从<font color="">发展至今,保留了很多 ...

  7. CSS 3 学习——transform 3D转换渲染

    以下内容根据官方规范翻译,没有翻译关于SVG变换的内容和关于矩阵计算的内容. 一般情况下,元素在一个无景深无立体感的平面(flat plane)上渲染,这个平面就是其包含块所处的平面.同时,页面上的其 ...

  8. 访问者模式(visitorpattern)

    /** * 访问者模式 * @author TMAC-J * 在客户端和元素之间添加一个访问者 * 当你需要添加一些和元素关系不大的需求时,可以直接放在访问者里面 * 或者是元素之间有一些公共的代码块 ...

  9. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  10. arcgis api for js入门开发系列六地图分屏对比(含源代码)

    上一篇实现了demo的地图标绘模块,本篇新增地图地图分屏对比模块,截图如下(源代码见文章底部): 对效果图的简单介绍一下,在demo只采用了两分屏对比,感兴趣的话,可以在两分屏的基础上拓展,修改css ...