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 相关文章推荐
javascript第一课
Feb 27 Javascript
JavaScript面向对象设计二 构造函数模式
Dec 20 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
Oct 14 Javascript
初识Javascript小结
Jul 16 Javascript
AngularJS基于factory创建自定义服务的方法详解
May 25 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
Jul 10 Javascript
js + css实现标签内容切换功能(实例讲解)
Oct 09 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
Oct 31 Javascript
Vue 页面跳转不用router-link的实现代码
Apr 12 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
Jul 21 Javascript
vue实现虚拟列表功能的代码
Jul 28 Javascript
微信小程序中使用vant框架的具体步骤
Feb 18 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
PHP 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
php下检测字符串是否是utf8编码的代码
2008/06/28 PHP
PHP中date()日期函数有关参数整理
2011/07/19 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
js禁止表单重复提交
2017/08/29 Javascript
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
解读ES6中class关键字
2017/11/20 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
解决pycharm 远程调试 上传 helpers 卡住的问题
2019/06/27 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
Python argparse模块应用实例解析
2019/11/15 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
Python urllib库如何添加headers过程解析
2020/10/05 Python
Python jieba结巴分词原理及用法解析
2020/11/05 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
一些.net面试题
2014/10/06 面试题
公司财务工作总结的自我评价
2013/11/23 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
电力培训学习心得体会
2016/01/11 职场文书
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript