cordova+vue+webapp使用html5获取地理位置的方法


Posted in Javascript onJuly 06, 2019

1.在HTML5中使用Geolocation.getCurrentPosition()方法来获取地理位置。

语法:

navigator.geolocation.getCurrentPosition(success, error, options)

参数:

  •  success: 成功得到位置信息时的回调函数,使用Position 对象作为唯一的参数。
  • error: 获取位置信息失败时的回调函数,使用 PositionError 对象作为唯一的参数,这是一个可选项。
  • options:一个可选的PositionOptions 对象,包含以下3个参数。
    • enableHighAccuracy 是一个Boolean值,用来表明应用是否使用其最高精度来表示结果,默认为false。
    • timeout 是一个正的long值,表明的是设备必须在多长时间(单位毫秒)内返回一个位置,默认是Infinity。
    • maximumAge 是一个正的long值,表明可以返回多长时间(即最长年龄,单位毫秒)内的可获取的缓存位置。如果设置为 0,说明设备不能使用一个缓存位置,而且必须去获取一个真实的当前位置。如果设置为 Infinity ,那么不管设置的最长年龄是多少,设备都必须返回一个缓存位置。默认值:0

2.success - 成功得到位置信息时的回调函数

navigator.geolocation.getCurrentPosition(function(position)) {
  // 获取成功时的的处理
  //参数position是地理位置对象
}

position中返回的信息如下图:

cordova+vue+webapp使用html5获取地理位置的方法

  • accuracy 获取到的纬度或者经度的精度(以米为单位)
  • altitude 当前地理位置的海拨高度(不能获取为null)
  • altitudeAccurancy 获取到的海拨高度的经度(以米为单位)
  • heading 设备移动的方向(以度为单位)
  • latitude 当前地理位置的纬度
  • longitude 当前地理位置的经度
  • speed 设备的前进速度(以米/秒为单位,不能获取时为null)
  • timestamp 获取地理位置信息时的时间

3.error - 获取位置信息失败时的回调函数

navigator.geolocation.getCurrentPosition(function(position){
   // 获取成功时的的处理;
  //参数position是地理位置对象
},function(error)) {
  // 获取失败时的的处理;
}

error中返回的信息如下图

cordova+vue+webapp使用html5获取地理位置的方法

code属性有以下值:

- 1 地理位置信息的获取失败,因为该页面没有获取地理位置信息的权限。
- 2 地理位置获取失败,因为至少有一个内部位置源返回一个内部错误。
- 3 获取地理位置超时,通过定义PositionOptions.timeout 来设置获取地理位置的超时时长。

message 返回一个开发者可以理解的 DOMString 来描述错误的详细信息。

4.使用Geolocation.getCurrentPosition()注意事项:

  1. 本地项目中在Chrome浏览器中运行时,无法获取到经纬度信息,原因是Chrome已不再支持非安全域的
  2. 浏览器定位请求,只有在https下才可使用定位。在IE、Eage、Firefox下亲测可以获取的经纬度信息。获取到的GPS经纬度信息在百度地图展示位置会与实际位置不同,是因为百度对外接口的坐标系为BD09
  3. 坐标系,并不是GPS采集的真实经纬度,在使用百度地图JavaScript API服务前,需先将非百度坐标通过坐标转换接口转换成百度坐标。(转换方法详见下文)

5.使用Geolocation.getCurrentPosition()获取经纬度信息,并转换为百度坐标并进行逆地址解析:

以Vue项目为例,首先根目录index.html中引入百度API文件,如下图:

cordova+vue+webapp使用html5获取地理位置的方法

获取位置,标记marker并进行逆地址解析代码如下:

// 1 查询当前位置信息
    getPosition() {
      navigator.geolocation.getCurrentPosition(this.getPositionSuccess, this.getPositionError, {"enableHighAccuracy": true, "timeout": 5000, "maximumAge": 5000})
    },
    // 1-1 查询当前位置信息成功
    getPositionSuccess(position) {
      this.latitude = String(position.coords.latitude)
      this.longitude = String(position.coords.longitude)
      let ggPoint = new BMap.Point(this.longitude, this.latitude)
      let pointArr = []
      pointArr.push(ggPoint)
      let convertor = new BMap.Convertor()
      // 坐标转换
      convertor.translate(pointArr, 1, 5, this.translateCallback)
    },
    // 1-2 查询当前位置信息失败
    getPositionError(error) {
      this.$toast({
        message: `获取地理位置失败请重试~`,
        duration: 1000
      })
    },
     // 坐标转换回调
    translateCallback(data) {
      if (data.status === 0) {
        // 在地图上标注marker
        let marker = new BMap.Marker(data.points[0])
        map.addOverlay(marker)
        map.panTo(data.points[0])
        // 逆地址解析
        let myGeo = new BMap.Geocoder()
        let that = this
        myGeo.getLocation(data.points[0], function(result){   
          if (result){
            // 获取逆地址解析结果
            that.clockSite = result.address
          }   
        })
      }
    },

坐标转换convertor.translate()方法说明:

语法:

convertor.translate(coords, from, to, fn)

参数:

  • coords:需转换的源坐标
  • from: 源坐标类型 详见:[类型详情][4]
  • to: 目标坐标类型 详见:[类型详情][5]
  • fn: 转换结果回调

6.使用cordova+vue开发webapp中定位解决方法:

在cordova中安装Geolocation插件后,方可在生成的app中获取到地理位置信息,运行如下命令即可:

cordova plugin add cordova-plugin-geolocation

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jquery的自定义鼠标提示效果 jquery.toolTip
Nov 14 Javascript
详解JavaScript中的构造器Constructor模式
Jan 14 Javascript
Javascript获取统一管理的提示语(message)
Feb 03 Javascript
js实现文字超出部分用省略号代替实例代码
Sep 01 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
Nov 09 Javascript
全面解析node 表单的图片上传
Nov 21 Javascript
Bootstrap 手风琴菜单的实现代码
Jan 20 Javascript
iview给radio按钮组件加点击事件的实例
Sep 30 Javascript
JS二分查找算法详解
Nov 01 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
Sep 25 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
Oct 17 Javascript
layui实现数据表格隐藏列的示例
Oct 25 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
Jul 06 #Javascript
vue router总结 $router和$route及router与 router与route区别
Jul 05 #Javascript
基于vue实现圆形菜单栏组件
Jul 05 #Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
Jul 05 #Javascript
vue中实现Monaco Editor自定义提示功能
Jul 05 #Javascript
VueCli3.0中集成MockApi的方法示例
Jul 05 #Javascript
Electron vue的使用教程图文详解
Jul 05 #Javascript
You might like
文件上传程序的全部源码
2006/10/09 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
2014/04/29 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
javascript据option的value值快速设定初始的selected选项
2007/08/13 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
Javascript编写2048小游戏
2015/07/07 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
Web打印解决方案之证件套打的实现思路
2016/08/29 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
js 颜色选择插件
2017/01/23 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
[56:29]Secret vs Optic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
Python 进程之间共享数据(全局变量)的方法
2019/07/16 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
2019/08/13 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
解决Python import .pyd 可能遇到路径的问题
2021/03/04 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
医学生自我评价
2014/01/27 职场文书
最新会计专业求职信范文
2014/01/28 职场文书
新闻学专业大学生职业生涯规划范文
2014/03/02 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
手把手教你导入Go语言第三方库
2021/08/04 Golang