我正在添加带有文本的SCNNode,我想保存它的位置,以便接下来我可以在地图上显示添加的对象。
我可以使用SCNVector3获取节点位置。请帮助我如何在纬度和经度上转换它。
由于
答案 0 :(得分:3)
有很多方法可以做你似乎要问的事情,但是大部分都可能过度使用。
ARKit和地理位置/制图技术(CoreLocation,MapKit)确实在不同的规模上运作。
ARKit在房间范围内工作 - 也就是说,在一个涉及10-20米以上距离的AR会话中很难做任何有意义的事情,并且精度/误差大约为毫米。
根据定义,地理定位在行星范围内运行,根据当地环境因素(蜂窝AGPS和WiFi位置可用性,卫星可见性,无线电噪声,位置 - ),精度/误差范围从一米到几米不等。精炼功能,如iBeacon等。
换句话说,几乎所有可以准确放置在AR会话中的虚拟内容都可能离您很近,以至于它与地理定位位置的距离小于地理定位位置的误差。 (例如,ARKit可能会认为您在一个房间内的位置是稳定的,让您在您面前放置1.5米的虚拟内容。但是当您这样做时,您估计的地理位置在半径5米范围内来回漂移。)
因此,如果您想在世界地图上为您的ARKit内容添加标记,您可能会更容易忽略该距离 - 只需使用CoreLocation中的当前位置作为标记。
如果您的应用仅用于受控环境(零售商店,博物馆等),您可以确保高精度地理定位(例如,通过部署iBeacons),您可以使用该距离做一些有用的事情。将位置从ARKit世界空间转换为纬度/经度非常简单,但是你必须处于这样的情况才能使结果有意义:
对AR会话使用gravityAndHeading
世界对齐选项,以便ARKit世界坐标空间的x / z轴与世界罗盘方向对齐。
将相机与AR空间中的物体之间的距离矢量投影为2D(x / z),以相对于用户位置的米为单位获得沿地球表面的东/西和北/南距离。
从CoreLocation获取用户在地理空间中的位置,并添加在步骤2中获得的向量以获取对象在地理空间中的位置。 (CLLocationCoordinate2D
不执行米,因此您可能会发现通过MKMapPoint
等其他空间进行转换以获得最终结果非常有用。)