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 相关文章推荐
海量经典的jQuery插件集合
Jan 12 Javascript
jQuery $.extend()用法总结
Jun 15 Javascript
JQuery做的一个简单的点灯游戏分享
Jul 16 Javascript
express的中间件bodyParser详解
Dec 04 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
May 11 Javascript
jQuery实现鼠标经过事件的延时处理效果
Aug 20 Javascript
javascript实现表单验证
Jan 29 Javascript
第一次接触神奇的Bootstrap导航条
Aug 09 Javascript
AngularJS轻松实现双击排序的功能
Aug 30 Javascript
Bootstrap学习笔记之环境配置(1)
Dec 07 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
Mar 06 Javascript
JS实现简单的文字无缝上下滚动功能示例
Jun 22 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 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
smarty模板引擎基础知识入门
2015/03/30 PHP
PHP中addslashes与mysql_escape_string的区别分析
2016/04/25 PHP
PHP实现浏览器中直接输出图片的方法示例
2018/03/14 PHP
PHP asXML()函数讲解
2019/02/03 PHP
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
javascript检测移动设备横竖屏
2016/05/21 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
微信小程序模板template简单用法示例
2018/12/04 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
Centos7 安装Node.js10以上版本的方法步骤
2019/10/15 Javascript
Vue.js watch监视属性知识点总结
2019/11/11 Javascript
[01:10:58]KG vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python 文件管理实例详解
2015/11/10 Python
python编码最佳实践之总结
2016/02/14 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
浅谈Python反射 &amp; 单例模式
2019/03/21 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
Python用Try语句捕获异常的实例方法
2019/06/26 Python
python同时替换多个字符串方法示例
2019/09/17 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
如何进行Linux分区优化
2016/09/13 面试题
车贷收入证明范本
2014/01/09 职场文书
出纳员岗位职责风险
2014/03/06 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB
mysql中整数数据类型tinyint详解
2021/12/06 MySQL