react native 获取地理位置的方法示例
react native 官网介绍了这个 api geolocation 但是这个api只能返回 经纬度 所以要把经纬度 通过逆地理位置转义 可通过这个阿里的开放接口
在 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请求
记得开启 位置访问权限
打印结果如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。