操作:我间隔一秒调用一次uni.getlocation(),想要显示当前位置的经纬度。
问题:手机定位一直是开着的,且一直在当前页面没有退出。当我站在某个点静止不动时,显示当前位置的位置点是正确的,但是经纬度的值不定时发生改变(有时两个坐标点之间的距离相差十几米)。即使运动过程中也会出现这种情况,求解大佬如何解决此问题。
2***@qq.com
- 发布:2019-12-06 17:21
- 更新:2023-07-28 15:11
- 阅读:10426
官网原生接口uni.getlocation()经纬度数据不准确问题
分类:uni-app
12 个回复
DCloud_heavensoft
说清楚是哪个平台。
建议你把所有平台都测试一下,看看是不是都是这样。
提醒下手机定位原理,如果gps开启且有信号,是最准确的,否则就会根据基站、ip进行定位。
定位服务都是浏览器、高德地图、微信地图、百度地图这几个专业服务商提供的。不是DCloud提供的,不存在DCloud的定位准不准的问题。
如果是app打包后定位不准,而真机运行没问题。那是你没有申请高德,需要去高德网站申请appkey等信息,填在manifest里,然后再打包
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 - 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
lzf李子凡
回复 2***@qq.com: 你好 我想问一下那个定位的问题,我qq:2335028155
2023-07-31 11:41
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
为什么用定位之后,经纬度在北京,但是我在沈阳
DCloud_heavensoft
认真看定位api的文档注意事项
2021-05-11 23:25
6***@qq.com
我一秒调用一次,在园区步行,要隔一段时间经纬度才会变,而不是一直在变
Adlaw
走一两步就想经纬度变吗
2022-08-22 13:53
lzf李子凡
请我有解决吗
2023-07-27 15:18
lzf李子凡
请问有解决吗??
2023-07-28 09:40
lzf李子凡
请问一下这个问题解决了吗?
lzf李子凡
我是定位相隔10来米 重新获取经纬度 一直是一样的这个问题有遇到吗
昭昭L - 开心就好
有几十米的误差范围
lzf李子凡
我的获取经纬度一直都是 相同的经纬度 我走动几米或者10来米 都是一样的经纬度 请问一下有遇到吗》
2023-07-28 15:08
lzf李子凡
请问有遇到过这个问题吗 方便给个联系方式沟通吗?
2023-07-28 15:09
昭昭L - 开心就好
没遇到过,我待着不动每秒的经纬度都是不一样的
lzf李子凡
我的是app端的 用的高德的key type: 'gcj02' 能沟通一下吗
2023-07-28 15:11
lzf李子凡
uni.getLocation({
type: 'gcj02',
geocode: true,
isHighAccuracy: true,
altitude: true,
highAccuracyExpireTime: '5000',
success: (res) => {
console.log("定位获取:", res);
2023-07-28 15:12
昭昭L
回复 2***@qq.com: 什么设备,gps开启了吗
2023-07-28 15:14
lzf李子凡
回复 昭昭L: gps开启了,安卓设备 小米的
2023-07-28 15:14
昭昭L - 开心就好
用了第三方的key吗?是安卓吗?每次获取的一样大概率拿的是ip定位的经纬度
lzf李子凡
我在manifest配置了高德的key 但我用真机运行的
2023-07-28 15:15
lzf李子凡
回复 2***@qq.com: 我关闭了wifi或者流量就获取不到了
2023-07-28 15:16
昭昭L
回复 2***@qq.com: 你可以逆向解析一下拿到的不变的经纬度看看是不是当地基站或者ip分发的位置,排查一下问题
2023-07-28 15:18
lzf李子凡
回复 2***@qq.com: getlocation:fail position retrieval timed out . errcode :3 code:3 关闭了流量就是这个
2023-07-28 15:19