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面象对象设计
Apr 28 Javascript
js 图片缩放(按比例)控制代码
May 27 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
Sep 17 Javascript
jquery入门必备的基本认识及实例(整理)
Jun 24 Javascript
js实现发送验证码后的倒计时功能
May 28 Javascript
JavaScript+CSS无限极分类效果完整实现方法
Dec 22 Javascript
JS添加删除DIV的简单实例
Jul 08 Javascript
谈谈JavaScript中的几种借用方法
Aug 09 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
Feb 26 Javascript
微信小程序 下拉菜单的实现
Apr 06 Javascript
jquery+css实现简单的图片轮播效果
Aug 07 jQuery
Angular4 反向代理Details实践
May 30 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实现mysql同步的实现方法
2009/10/21 PHP
认识并使用PHP超级全局变量
2010/01/26 PHP
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
注册页面之前先验证用户名是否存在的php代码
2012/07/14 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
深入浅析PHP无限极分类的案例教程
2016/05/09 PHP
javascript 动态生成私有变量访问器
2009/12/06 Javascript
Dojo Javascript 编程规范 规范自己的JavaScript书写
2014/10/26 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
2016/01/27 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
JS实现快递单打印功能【推荐】
2018/06/21 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
详解python OpenCV学习笔记之直方图均衡化
2018/02/08 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
基于Python绘制个人足迹地图
2020/06/01 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
2020/12/09 Python
幼儿园教师工作感言
2014/02/15 职场文书
岗位职责风险防控
2014/02/18 职场文书
幼儿园教师自我鉴定
2014/03/20 职场文书
股指期货心得体会
2014/09/13 职场文书
2015年新教师工作总结
2015/04/28 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
蓝天保卫战收官在即 :15行业将开展环保分级评价
2019/07/19 职场文书
Pytorch DataLoader shuffle验证方式
2021/06/02 Python
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android