react native 获取地理位置的方法示例

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),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,表示浏览器需要立刻重新计算位置。

rush:js;"> static watchPosition(success,options?)

是多次改变了位置信息时才会触发,一般触发的可能性可能用户多次刷新数据,如一个人行车到其他城市,这时如果设置一个监听函数,只要watchid不一样,就会不断的触发

由于可能会出现缓存的情况,所以Geolocation 为我们提供了一个可以清除缓存的方法watchPosition(),改方法是 用于上一次的定位信息进行清除的。

对了,要启动react native 的定位功能的话,如果你是android 用户,你需要先在AndroidManifest.xml中加入以下权限

rush:xml;">

具体实现

......

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请求

记得开启 位置访问权限

打印结果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...