2***@qq.com
2***@qq.com
  • 发布:2019-12-06 17:21
  • 更新:2022-06-17 15:19
  • 阅读:6303

官网原生接口uni.getlocation()经纬度数据不准确问题

分类:uni-app

操作:我间隔一秒调用一次uni.getlocation(),想要显示当前位置的经纬度。
问题:手机定位一直是开着的,且一直在当前页面没有退出。当我站在某个点静止不动时,显示当前位置的位置点是正确的,但是经纬度的值不定时发生改变(有时两个坐标点之间的距离相差十几米)。即使运动过程中也会出现这种情况,求解大佬如何解决此问题。

2019-12-06 17:21 负责人:无 分享
已邀请:
DCloud_heavensoft

DCloud_heavensoft

说清楚是哪个平台。
建议你把所有平台都测试一下,看看是不是都是这样。

提醒下手机定位原理,如果gps开启且有信号,是最准确的,否则就会根据基站、ip进行定位。
定位服务都是浏览器、高德地图、微信地图、百度地图这几个专业服务商提供的。不是DCloud提供的,不存在DCloud的定位准不准的问题。

如果是app打包后定位不准,而真机运行没问题。那是你没有申请高德,需要去高德网站申请appkey等信息,填在manifest里,然后再打包

2***@qq.com

2***@qq.com (作者) - 前端小白

安卓手机和苹果手机上都是这种情况。GPS打开且有信号,但是用uni.getlocation()获取经纬度时,返回给我同一地点的经纬度值相差很大。

  • DCloud_heavensoft

    我说的平台,是app、各家小程序、h5

    2019-12-07 22:02

  • 2***@qq.com (作者)

    回复 DCloud_heavensoft:不好意思,理解错了。我想做一个app,所以主要是在app里面测的。

    2019-12-09 11:23

s***@163.com

s***@163.com - h5前后端

手机关掉wifi,用4G网络,开通定位(精准),并对你的app授权开通定位功能,试一下误差。gps定位有延时和死角问题,如果周期内取不到值会自动切换到基站和ip定位,此时不准确很正常。

  • 2***@qq.com (作者)

    定位功能已经授权了,但是好像存在这个问题:正常情况下,打开gps手机(华为荣耀8x)顶部会显示gps图标,现在我是每秒调用一次uni.getlocation(),按理说,顶部的gps图标静止不动,但现在调用一次location,图标就闪烁,然后静止时测出来的经纬度误差平均就在30米左右,运动时speed基本上是0,经纬度误差会大于30米。不知道怎么解决

    2019-12-09 11:40

  • s***@163.com

    回复 2***@qq.com: 说了gps有延迟的,一般要等待3--8秒,死角位置会永远取不到值,即使静止也取不到,所以你的业务逻辑要适当变更一下,总体来说在北上广等大城市相对好一些,三线城市不适合使用getlocation()做精准判断。

    2019-12-12 18:38

q***@163.com

q***@163.com

我的uni.getLocation 安卓打包后 获取的定位不准确相差600米左右,真机调试就没问题,苹果打包回也没问题,这个是什么原因啊,小米,华为式了都是这样

  • DCloud_heavensoft

    那是你没有申请高德,需要去高德网站申请appkey等信息,填在manifest里

    2021-03-26 08:40

  • 小小白啊

    回复 DCloud_heavensoft: 您好,在 安卓 部分机型中 早上定位好好的,到了下午定位就有偏差

    2021-11-04 09:31

怪物小帕

怪物小帕 - 程序猿一枚

好像uni.getLocation默认使用的是网络定位,我测试的时候发现如果关闭网络流量,只使用GPS,定位误差会很小,而且运动时speed也会出现,不关闭网络流量的话speed一直为0,如果你是要计算速度的话,可以用下面这个方法```javascript
// 返回俩个坐标点之间的距离
getDistance(lon1, lat1, lon2, lat2) {
let x, y, distance;
let lonres = lon1 > lon2 ? lon1 - lon2 : lon2 - lon1;
let latres = lat1 > lat2 ? lat1 - lat2 : lat2 - lat1;
x = (lonres PI R Math.cos((((lat1 + lat2) / 2) PI) / 180)) / 180;
y = ((lat2 - lat1) PI R) / 180;
this.speed = Math.roun(Math.hypot(x, y)); // 速度m/s
return (distance = Math.hypot(x, y)); // 距离m
}

  • 怪物小帕

    this.speed = Math.round(Math.hypot(x, y)); // 速度m/s

    少了个d

    2021-03-26 09:23

1***@qq.com

1***@qq.com

为什么用定位之后,经纬度在北京,但是我在沈阳

6***@qq.com

6***@qq.com

我一秒调用一次,在园区步行,要隔一段时间经纬度才会变,而不是一直在变

  • 2***@qq.com

    走一两步就想经纬度变吗

    2022-08-22 13:53

要回复问题请先登录注册