使用 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 设备上未获得准确的经纬度的主要内容,如果未能解决你的问题,请参考以下文章
html5-geolocation : navigator.geolocation.watchPosition 连续回调
如何停止 watchPosition() 位置检索超时错误?
带有 navigator.geolocation.watchPosition 的连续标记