使用 watchPosition 在 ios 设备上未获得准确的经纬度

Posted

技术标签:

【中文标题】使用 watchPosition 在 ios 设备上未获得准确的经纬度【英文标题】:Not getting exact latitude longitude on ios device using watchPosition 【发布时间】:2019-02-28 14:33:24 【问题描述】:

问题描述:

我正在开发反应原生跟踪应用程序。基本上用户从某个地方签到,他们需要到达目的地。使用此应用程序,我们正在找出他们所遵循的路径。我需要从用户签入位置到目的地获取地理编码,以跟踪他所遵循的路径。 现在它为 android 设备构建了一条干净的路径,但在 ios 上存在问题。对于 ios,代码内部需要很大的变化。 我已经通过使用两种设备(ios 和 android)前往同一个地方进行了测试。对于 Android,它会生成一个精确的纬度经度值,但对于 ios,有很大的变化。为什么会这样。我已按照 react native 的官方文档进行地理定位设置。 你可以查看这个链接::https://facebook.github.io/react-native/docs/geolocation.html#ios

我们正在使用 react 原生地理定位服务包,GitHub link

当我将 react 本机版本更新到 0.58 时会发生这种情况

代码::

this.watchId = Geolocation.watchPosition((response) => 
    this.currentWatchLocationTimeout = this.currentWatchLocationTimeout + WATCH_LOCATION_TIMEOUT;

    currentPosition.lat = this.convertToDecimalPoints(response.coords.latitude);
    currentPosition.lng = this.convertToDecimalPoints(response.coords.longitude);

    //... additional code

, (error) => 
    this.onGeolocationErrorOccurCallback(error);
, 
    enableHighAccuracy: true,
    distanceFilter: 5,
    showLocationDialog: true
);

其他信息 ::

反应原生:0.58 react-native-geolocation-service: 2.0.0 平台:ios(仅限)

【问题讨论】:

如果使用iOS模拟器会有什么结果?您还可以使用 xCode 在您的计算机上模拟一次旅行。如果结果正常,这似乎是硬件问题。你用的是什么设备?您是否尝试过其他 iOS 设备? 我没有在ios模拟器上检查这个,而是在不同的ios设备上测试过,每次都会给我们一个奇怪的结果。 react-native 版本没有更新到 0.58 就可以了,不知道现在为什么会出现这个问题。 我在 react-native 包中发现了一个错误报告问题,您可以查看此链接:: github.com/facebook/react-native/issues/12967 我不确定它是否在 react-native 0.58 中修复。因为我已经在多台设备上测试过它,但它仍然给我们错误的纬度经度值。 【参考方案1】:

最适合我的解决方案是在 react 本地地理定位文件中进行更改。您需要替换一些代码行。进入 react native 包,

react-native/Libraries/Geolocation/RCTLocationObserver.m

然后替换这一行::

#define RCT_DEFAULT_LOCATION_ACCURACY kCLLocationAccuracyHundredMeters

用这个::

#define RCT_DEFAULT_LOCATION_ACCURACY 0.0

在此之后替换这一行::

.accuracy = [RCTConvert BOOL:options[@"enableHighAccuracy"]] ? kCLLocationAccuracyBest : RCT_DEFAULT_LOCATION_ACCURACY,

有了这个::

.accuracy = RCT_DEFAULT_LOCATION_ACCURACY,

您需要在上述路径上直接搜索这些行。 我在 git commits 中找到了这个,你也可以查看这个链接:: link

【讨论】:

以上是关于使用 watchPosition 在 ios 设备上未获得准确的经纬度的主要内容,如果未能解决你的问题,请参考以下文章

IOS6 地理位置 watchPosition 回调失败

html5-geolocation : navigator.geolocation.watchPosition 连续回调

如何停止 watchPosition() 位置检索超时错误?

带有 navigator.geolocation.watchPosition 的连续标记

navigator.geolocation.watchPosition 以速度返回 NaN

在使用位置服务的移动 Safari 中使用 geolocation.watchPosition()