HTML5 地理位置

一、简介

地理位置特性能够识别你所在的地理位置并且在你允许的情况下,把位置信息分享给别人。

识别地理位置的方法:

  • 通过 IP 地址

    • 只能用于电脑上的位置信息定位
  • 利用基站获取去收集网络的介入位置

    • 大致位置,不够精确
    • 精确到用户所属的城市街区,获取用户房源一公里的范围内
  • 通过卫星定位获得经纬度信息的 GPS 设备

    • 几米的误差内准确定位
    • 专用 GPS 芯片耗电快
    • GPS 芯片默认关闭,开启需要时间,有延迟

注意:浏览器必须要在用户允许的情况下才可以发送用户的位置信息给服务器。

二、地理位置 API

2.1 调用位置函数

function get_location() {
  navigator.geolocation.getCurrentPosition(show_map, handle_error, PositionOptions);
}

全局对象 navigatorgeolocation 属性的 getCurrentPosition() 方法,会触发浏览器弹出信息条,让用户确定是否分享地理位置。

  • show_map 是成功获取位置的回调函数,必须
  • handle_error 是获取地理位置失败的回调函数,可选
  • PositionOptions 是获取地理位置的设置对象,可选

2.2 show_map 获取地理位置

function show_map(position) {
  var latitude = position.coords.latitude;//获取纬度
  var longitude = position.coords.longitude;//获取经度
}

这个回调函数要传入一个 position 对象,就是获取到的位置信息。

position 对象的属性:

  • coords.latitude 纬度,度
  • coords.longtitude 经度,度
  • coords.altitude 海拔,米
  • coords.accuracy 精确度,米
  • coords.altitudeAccuracy 海拔精确度,米
  • coords.heading 方向,度,顺时针,以正北为基准
  • coords.speed 速度,米/秒
  • timestamp 时间戳,类似 Date() 对象

只有前三个属性确保不为空,其余属性因用户的设备和后台定位服务器的不同,可能属性值为 null,其中 headingspeed 是基于用户前一次位置信息计算所得的。

2.3 handle_error 容错处理

function handle_error(err) {
  switch(err.code)  {
    case err.PERMISSION_DENIED:
      //用户拒绝对获取地理位置的请求。
      break;
    case err.POSITION_UNAVAILABLE:
      //位置信息是不可用的。
      break;
    case err.TIMEOUT:
      //请求用户地理位置超时。
      break;
    case err.UNKNOWN_ERROR:
      //未知错误。
      break;
  }
}

这个容错处理的回调函数会传入一个 PositionError 对象作为参数,上面例子中是 err

PositionError 对象:

  • code 错误类型,属性值为:
    • err.PERMISSION_DENIED 或者 1:用户点击了信息条的“不共享”按钮或者直接拒绝被获取位置信息。
    • err.POSITION_UNAVAILABLE 或者 2:网络不可用或者无法连接到获取位置信息的卫星。
    • err.TIMEOUT 或者 3:网络可用但是花了太长的时间去计算。
    • err.UNKNOWN_ERROR 或者 0:发生其他未知错误。
  • message 错误信息,与终端用户无关

2.4 PositionOptions 对象设置

navigator.geolocation.getCurrentPosition(show_map, handle_error, {enableHighAccuracy: true,timeoout: 175000, maximumAge: 75000})

属性:

  • enableHighAccuracy 开启高精度定位,默认 false
  • timeout 获取用户位置信息的最长等待时间,指网络请求时间,毫秒
  • maximumAge 允许用户将一定时间内缓存的位置信息快速返回给 Web 应用,默认 0,毫秒

2.5 watchPosition() 持续获取

watchPosition() 方法与 getCurrentPosition() 方法结构相同

你不用主动获取用户位置信息,每次用户位置改变,这些回调函数就会调用。设备会确定一个最佳的时间间隔,定时检测用户位置的改变。

watchPosition() 方法会返回一个数字,将它保存下来,当你想停止监测用户位置时就可以调用 clearWatch() 方法,传入保存的数字作为参数。

var watch = navigator.geolocation.watchPosition(show_map, handle_error, {enableHighAccuracy: true,timeoout: 175000, maximumAge: 75000})

clearWatch(watch);

2.6 geo.js 兼容性 javascript 库

geo.js 封装了 W3C 标准、Gears 以及移动平台所提供的各种不同类型的地理位置 API,提供统一的调用接口。

准备:

<script src="gears_init.js"></script><!--用于初始化 Gears-->
<script src="geo.js"></script>

使用:

if (geo_position_js.init()) {
  geo_position_js.getCurrentPosition(success, error)
}

geo.js 目前不支持 watchPosition() 方法,只能通过定时调用实现。

三、地图的调用

3.1 Google 地图 API

3.2 Tencent 地图 API

3.3 百度地图 API

3.4 高德地图 API

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,653评论 0 15
  • 当今技术定位的方式,有位置信息来源定位,IP定位,GPS定位,WIFI定位,手机定位和自定义定位。本文通过获取经纬...
    dovlie阅读 6,157评论 0 8
  • 从小到大,家里都没有一个餐桌,总是在茶几上吃饭,也是家里面积小,条件差,就一直这么将就着,后来结婚了,还是条件不好...
    宁小静的日记阅读 240评论 0 0
  • 曾几何时不婚主义开始盛行,而且数量呈上升趋势,原因是多方面的,有的是因为一直没有遇到合适的伴侣;有的是个性相对独立...
    一丁羊阅读 8,167评论 2 9
  • 文/刘三土博客(www.liusantu.com) 一个半路出家转型的自媒体博客 去年3月份的时候,我注册了一个域...
    刘三土自媒体阅读 728评论 0 1