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 相关文章推荐
地址栏上的一段语句,改变页面的风格。(教程)
Apr 02 Javascript
jquery对单选框,多选框,文本框等常见操作小结
Jan 08 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
Sep 05 Javascript
jquery+css3问卷答题卡翻页动画效果示例
Oct 26 Javascript
javascript实现去除HTML标签的方法
Dec 26 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
Jan 04 Javascript
jQuery Jsonp跨域模拟搜索引擎
Jun 17 jQuery
小程序实现选择题选择效果
Nov 04 Javascript
angular 用Observable实现异步调用的方法
Dec 27 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
Sep 05 Javascript
JS使用正则表达式实现常用的表单验证功能分析
Apr 30 Javascript
Threejs实现滴滴官网首页地球动画功能
Jul 13 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 mkdir()定义和用法
2009/01/14 PHP
php自定义urlencode,urldecode函数实例
2015/03/24 PHP
jqTransform form表单美化插件使用方法
2012/07/05 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
js调用图片隐藏&amp;显示实现代码
2013/09/13 Javascript
js 走马灯简单实例
2013/11/21 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
基于JavaScript实现跳转提示页面
2016/09/24 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
javascript数组去重方法分析
2016/12/15 Javascript
vue+vue-validator 表单验证功能的实现代码
2017/11/13 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
详解python的数字类型变量与其方法
2016/11/20 Python
python去除扩展名的实例讲解
2018/04/23 Python
python中int与str互转方法
2018/07/02 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
django配置app中的静态文件步骤
2020/03/27 Python
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
关于Assembly命名空间的三个面试题
2015/07/23 面试题
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
语文教育专业应届生求职信
2013/11/23 职场文书
财务简历的自我评价
2014/03/05 职场文书
个人融资协议书范本两则
2014/10/15 职场文书
2014年化妆品销售工作总结
2014/12/01 职场文书
万能检讨书
2015/01/27 职场文书
python实现会员管理系统
2022/03/18 Python