帖子
帖子
用户
博客
课程
显示全部楼层
10
帖子
0
勋章
96
Y币

[多端开发] bmap获取当前位置经纬度偏移问题

[复制链接]
发表于 2024-3-28 10:36:05
在使用bmap获取位置时总有偏移,与自己的微信定位偏移几百米。先功能需求是不偏移,请问该如何解决。getLocation时获取的经纬度就是偏移的,如何解决这个问题


  1. t, ret.lon)
  2. var longitude = des84Gis.lon//经度
  3. var latitude = des84Gis.lat//纬度
  4. setStorage('userLongitude', longitude);
  5. setStorage('userLatitude', latitude);
  6. ret.longitude = longitude;
  7. ret.latitude = latitude;
  8. api.sendEvent({name: 'mapChange'});
  9. callback(ret);
  10. } else {
  11. console.log(JSON.stringify(err));
  12. callback(false);
  13. }
  14. });
  15. }else{
  16. callback(false);
  17. alert("请到手机设置页开启定位(或位置)开关,否则将影响后续使用");
  18. }
  19. });
  20. }else{
  21. console.log(JSON.stringify(err));
  22. callback(false);
  23. }
  24. });
  25. }else{
  26. bMap.getLocationServices(function(ret, err) {
  27. if (ret.enable){
  28. bMap.getLocation({accuracy:'10m'},function(ret, err) {
  29. if (ret.status) {
  30. var des84Gis = GPS.baiduGisTo84(ret.lat, ret.lon)
  31. var longitude = des84Gis.lon//经度
  32. var latitude = des84Gis.lat//纬度
  33. setStorage('userLongitude', longitude);
  34. setStorage('userLatitude', latitude);
  35. ret.longitude = longitude;
  36. ret.latitude = latitude;
  37. api.sendEvent({name: 'mapChange'});
  38. callback(ret);
  39. } else {
  40. console.log(JSON.stringify(err));
  41. callback(false);
  42. }
  43. });
  44. } else {
  45. callback(false);
  46. alert("请到手机设置页开启定位(或位置)开关,否则将影响后续使用");
  47. }
  48. });
  49. }
  50. }else
  51. callback(false)
  52. })
  53. }
  54. baiduGisTo84 : function (lat, lon){
  55.         var x = lon - 0.0065;
  56.         var y = lat - 0.006;
  57.         var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * this.x_pi);
  58.         var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * this.x_pi);
  59.         var gcjLon = z * Math.cos(theta);
  60.         var gcjLat = z * Math.sin(theta);
  61.         var dLat = this.transformLat(gcjLon - 105.0, gcjLat - 35.0);
  62.         var dLon = this.transformLon(gcjLon - 105.0, gcjLat - 35.0);
  63.         var radLat = gcjLat / 180.0 * this.PI;
  64.         var magic = Math.sin(radLat);
  65.         magic = 1 - 0.00669342162296594323 * m
复制代码



10
帖子
0
勋章
96
Y币
baiduGisTo84 : function (lat, lon){
                var x = lon - 0.0065;
                var y = lat - 0.006;
                var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * this.x_pi);
                var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * this.x_pi);
                var gcjLon = z * Math.cos(theta);
                var gcjLat = z * Math.sin(theta);
                var dLat = this.transformLat(gcjLon - 105.0, gcjLat - 35.0);
                var dLon = this.transformLon(gcjLon - 105.0, gcjLat - 35.0);
                var radLat = gcjLat / 180.0 * this.PI;
                var magic = Math.sin(radLat);
                magic = 1 - 0.00669342162296594323 * magic * magic;
                var sqrtMagic = Math.sqrt(magic);
                dLat = (dLat * 180.0) / ((6378245.0 * (1 - 0.00669342162296594323)) / (magic * sqrtMagic) * this.PI);
                dLon = (dLon * 180.0) / (6378245.0 / sqrtMagic * Math.cos(radLat) * this.PI);
                dLat = gcjLat - dLat;
                dLon = gcjLon - dLon;

                return {'lat': dLat, 'lon': dLon};
        }
你直接在bmap地图上面看看呢,你这个是自己有转化的,可以直接在百度地图上面看一下位置与你转换过的位置是一致的吗。
10
帖子
0
勋章
96
Y币
chyd④④⑤⑤②⑦⑧⑤② · 2024-3-28 10:58你直接在bmap地图上面看看呢,你这个是自己有转化的,可以直接在百度地图上面看一下位置与你转换过的位置是一致的吗。

不一致,我没有转化前,就用getLocation这个方法。获取的经纬度在立交桥上,但我在园区。获取的时候就有偏移
不吃渔 · 2024-3-28 11:05不一致,我没有转化前,就用getLocation这个方法。获取的经纬度在立交桥上,但我在园区。获取的时候就有偏移

你直接打开百度地图app,看看位置一致不。
0
帖子
1
勋章
2536
Y币
定位有误差是肯定存在的,如果是在室内的话建议打开我手机wifi开关可以提高定位精确度
您需要登录后才可以回帖 登录

本版积分规则