react native 获取地理位置的方法示例


Posted in Javascript onAugust 28, 2018

react native 官网介绍了这个 api Geolocation 但是这个api只能返回 经纬度 所以要把经纬度 通过逆地理位置转义 http://recode.ditu.aliyun.com/jsdoc/geocode_api.html 可通过这个阿里的开放接口

在 react native 中,我们所用的是react native 自带的api定位功能,无需引入第三方js。

react native 定位是通过Geolocation这个模块来实现的。想了解更多关于Geolocation的知识请点击下面 Geolocation自行了解,这里我们主要将他的几个方法。

static getCurrentPosition(geo_success, geo_error?, geo_options?)
Invokes the success callback once with the latest location info. Supported options: timeout (ms), maximumAge (ms), enableHighAccuracy (bool) On Android, this can return almost immediately if the location is cached or request an update, which might take a while.

static watchPosition(success, error?, options?)
Invokes the success callback whenever the location changes. Supported options: timeout (ms), maximumAge (ms), enableHighAccuracy (bool), distanceFilter(m)

static clearWatch(watchID)

第一个方法是获取第一次定位时的位置信息,第一个为成功时的回掉函数,还有error时的回掉,第三个是传状态的。
在请求成功函数中有以下属性:

  • 经度 : coords.longitude
  • 纬度 : coords.latitude
  • 准确度 : coords.accuracy
  • 海拔 : coords.altitude
  • 海拔准确度 : coords.altitudeAcuracy
  • 行进方向 : coords.heading
  • 地面速度 : coords.speed
  • 时间戳 : new Date(position.timestamp)

在请求失败函数中有4种情况(err.code状态值):

1为用户拒绝定位请问
2暂时获取不到位置信息
3为请求超时
4未知错误

第三个options是可选参数,属性如下:

enableHighAccuracy——指示浏览器获取高精度的位置,默认为false。当开启后,可能没有任何影响,也可能使浏览器花费更长的时间获取更精确的位置数据。

timeout——指定获取地理位置的超时时间,默认不限时。单位为毫秒。

maximumAge——最长有效期,在重复获取地理位置时,此参数指定多久再次获取位置。默认为0,表示浏览器需要立刻重新计算位置。

static watchPosition(success, error?, options?)

是多次改变了位置信息时才会触发,一般触发的可能性可能用户多次刷新数据,如一个人行车到其他城市,这时如果设置一个监听函数,只要watchid不一样,就会不断的触发

由于可能会出现缓存的情况,所以Geolocation 为我们提供了一个可以清除缓存的方法watchPosition(),改方法是 用于上一次的定位信息进行清除的。

对了,要启动react native 的定位功能的话,如果你是android 用户,你需要先在AndroidManifest.xml中加入以下权限

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

具体实现

import Geolocation from 'Geolocation';

  ......

 getlocal() {
  Geolocation.getCurrentPosition(
   val => {
    let ValInfo =
     '速度:' +
     val.coords.speed +
     '\n经度:' +
     val.coords.longitude +
     '\n纬度:' +
     val.coords.latitude +
     '\n准确度:' +
     val.coords.accuracy +
     '\n行进方向:' +
     val.coords.heading +
     '\n海拔:' +
     val.coords.altitude +
     '\n海拔准确度:' +
     val.coords.altitudeAccuracy +
     '\n时间戳:' +
     val.timestamp;
    this.setState({ LocalPosition: ValInfo });
    console.log("打印地理位置:"+`${val.coords.longitude},${val.coords.latitude}`)
    GET_GPRS({
     "l":`${val.coords.latitude},${val.coords.longitude}`,
     "type":111,
    }).then(res => {
     console.log(JSON.stringify(res))
    })
   },
   val => {
    let ValInfo = '获取坐标失败:' + val;
    this.setState({ LocalPosition: ValInfo }); //如果为空的话 没允许开启定位服务

   },
  );
 }

这里的 GET_GPRS 是自己封装的 fech请求

记得开启 位置访问权限

打印结果如下:

react native 获取地理位置的方法示例

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

Javascript 相关文章推荐
JS backgroundImage控制
May 19 Javascript
判断用户的在线状态 onbeforeunload事件
Mar 05 Javascript
IE的有条件注释判定IE版本详解(附实例代码)
Jan 04 Javascript
什么是DOM(Document Object Model)文档对象模型
Mar 05 Javascript
浅析JavaScript中的typeof运算符
Nov 30 Javascript
辨析JavaScript中的Undefined类型与null类型
May 26 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
Aug 31 Javascript
bootstrap精简教程_动力节点Java学院整理
Jul 14 Javascript
js中less常用的方法小结
Aug 09 Javascript
vue页面切换到滚动页面显示顶部的实例
Mar 13 Javascript
深入理解JavaScript和TypeScript中的class
Apr 22 Javascript
解决layer.open后laydate失效的问题
Sep 06 Javascript
微信小程序自定义音乐进度条的实例代码
Aug 28 #Javascript
JavaScript模拟实现自由落体效果
Aug 28 #Javascript
vue-cli3脚手架的配置及使用教程
Aug 28 #Javascript
vue.js实现带日期星期的数字时钟功能示例
Aug 28 #Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
Aug 28 #Javascript
vue 使用自定义指令实现表单校验的方法
Aug 28 #Javascript
微信小程序多音频播放进度条问题
Aug 28 #Javascript
You might like
附件名前加网站名
2008/03/23 PHP
php自动适应范围的分页代码
2008/08/05 PHP
php cli 方式 在crotab中运行解决
2010/02/08 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
php判断变量类型常用方法
2012/04/24 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
Smarty模板变量与调节器实例详解
2019/07/20 PHP
图片onload事件触发问题解决方法
2011/07/31 Javascript
MultiSelect左右选择控件的设计与实现介绍
2013/06/08 Javascript
jQuery之排序组件的深入解析
2013/06/19 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
2016/12/26 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
JQueryMiniUI按照时间进行查询的实现方法
2017/06/07 jQuery
基于原生js运动方式关键点的总结(推荐)
2017/10/01 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
推荐下python/ironpython:从入门到精通
2007/10/02 Python
利用python程序帮大家清理windows垃圾
2017/01/15 Python
对python 自定义协议的方法详解
2019/02/13 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
2021/02/25 Python
高校生生产实习自我鉴定
2013/09/21 职场文书
大一学生的职业生涯规划书范文
2014/01/19 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
社会实践心得体会范文
2016/01/14 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
redis中lua脚本使用教程
2021/11/01 Redis
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers