如何将 ARKit SCNNode 对象位置 SCNVector3 转换为纬度和经度? [关闭]

Posted

技术标签:

【中文标题】如何将 ARKit SCNNode 对象位置 SCNVector3 转换为纬度和经度? [关闭]【英文标题】:How to convert ARKit SCNNode object location SCNVector3 to latitude and longitude? [closed] 【发布时间】:2018-03-14 14:32:39 【问题描述】:

我正在添加一个带有文本的 SCNNode,并且我想保存它的位置,以便接下来我可以在地图上显示添加的对象。

我可以使用 SCNVector3 获取节点位置。请帮助我如何将其转换为纬度和经度。

谢谢

【问题讨论】:

我想现在问题更清楚了。我希望@rmaddy 你提出这个问题。如果您不知道答案,请让其他人给出答案。如果你还是不明白这个问题,你需要复习你的知识。 @bartektartanus 我看到了你的个人资料,但你没有提到任何关于 ios 和 ARKIT 的内容,那么你是如何在不了解 ARKIt 和 iOS 的情况下否决我的问题的 【参考方案1】:

有一些方法可以做你似乎在问的事情,但其中大多数可能做得过火

ARKit 和地理定位/地图技术(CoreLocation、MapKit)确实在不同的规模上运行。

ARKit 在房间规模下工作——也就是说,很难在涉及距离超过 10-20 米的单个 AR 会话中做任何有意义的事情——并且具有毫米级的精度/误差。

地理定位,顾名思义,在行星尺度上运行,精度/误差范围从一米到几米不等,具体取决于当地环境中的因素(蜂窝 AGPS 和 WiFi 定位可用性、卫星能见度、无线电噪声、位置-完善 iBeacon 等功能。

换句话说,您可以在 AR 会话中准确放置的几乎所有虚拟内容都可能离您非常近,以至于它与您的地理定位位置的距离小于您的地理定位位置的误差。 (例如,ARKit 可能认为您在房间内的位置是稳定的,让您将虚拟内容放置在您面前 1.5m 的位置。但是当您这样做时,您估计的地理位置会在 5m 半径内来回漂移。)

因此,如果您想在世界地图上为您的 ARKit 内容添加一个标记,您可能会更轻松地忽略该距离 - 只需使用您在 CoreLocation 中的当前位置作为标记。


如果您的应用仅用于可确保高精度地理定位(例如,通过部署 iBeacons)的受控环境(零售店、博物馆等),那么您或许可以在该距离内做一些有用的事情。无论如何,将位置从 ARKit 世界空间转换为纬度/经度都非常简单,但是您必须处于这样的情况才能使结果有意义:

    为您的 AR 会话使用 gravityAndHeading 世界对齐选项,以便 ARKit 世界坐标空间的 x/z 轴与世界罗盘方向对齐。

    将相机和 AR 空间中的物体之间的距离矢量投影到 2D (x/z) 中,以获得相对于用户位置的地球表面的东/西和北/南距离(以米为单位)。

    从 CoreLocation 中获取用户在地理空间中的位置,并添加在步骤 2 中获得的向量以获取对象在地理空间中的位置。 (CLLocationCoordinate2D 不做米,因此您可能会发现通过另一个空间(如 MKMapPoint)进行转换以获得最终结果很有用。)

【讨论】:

感谢您的详细解释!我刚刚开始研究将这两种技术结合起来的可能性,你就在眼前。提到gravityAndHeading对齐选项是救命稻草。我没有意识到它的存在,并且过去一两周一直在试图弄清楚那个数学。

以上是关于如何将 ARKit SCNNode 对象位置 SCNVector3 转换为纬度和经度? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何提高 ARKit 测量两个 SCNNode 之间距离的准确性?

未经许可将 SCNNode 向北旋转以进行位置跟踪

ARKIT:在一个SCNNode与另一个SCNNode之间画线时观察滞后

如何将SKScene添加到SCNNode平面?

ARKit 如何在没有跟踪时暂停视频

在 ARKit 中进行动画时如何获取 3D 对象的当前位置?