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 获取字符串字节数的多种方法
Jun 02 Javascript
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
Oct 25 Javascript
javascript 面向对象 function类
May 13 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
Sep 12 Javascript
js操作滚动条事件实例
Jan 29 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
Mar 07 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
Jun 25 Javascript
Zepto实现密码的隐藏/显示
Apr 07 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
Nov 13 Javascript
解析Vue.js中的组件
Feb 02 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
Jun 04 Javascript
如何利用js在两个html窗口间通信
Apr 27 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生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
php动态函数调用方法
2015/05/21 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
原生javascript实现匀速运动动画效果
2016/02/26 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
JS实现汉字与Unicode码相互转换的方法详解
2017/04/28 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
Vue多选列表组件深入详解
2021/03/02 Vue.js
Python复数属性和方法运算操作示例
2017/07/21 Python
python如何实现反向迭代
2018/03/20 Python
python面试题之列表声明实例分析
2019/07/08 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
python logging.basicConfig不生效的原因及解决
2020/02/20 Python
基于Pyinstaller打包Python程序并压缩文件大小
2020/05/28 Python
Python字符串及文本模式方法详解
2020/09/10 Python
HTML5中视频音频的使用详解
2017/07/07 HTML / CSS
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
销售自我评价
2013/10/22 职场文书
房地产营销策划方案
2014/02/08 职场文书
公司门卫岗位职责
2014/03/15 职场文书
仓库文员岗位职责
2014/04/06 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis