1

我正在尝试构建一个 AR 应用程序,该应用程序根据其经度和纬度放置带有 ARSCNView 场景的对象。

我需要将纬度和经度值转换为 3 维空间中相对于我的手机纬度和经度的一个点。我已经尝试了大约 2 个小时,但我没有得到正确的结果。

使用 CoreLocation,我可以在 AR 会话开始时找到手机的纬度/经度,并且我知道我想要放置的对象的位置(纬度\经度)。我假设高度是固定在地面以上 1 米,并且我在我的对象物理位置的至少 20 米之内。

这是我的代码:

func latlongToSCNVector3(phone: CLLocation, object: CLLocationCoordinate2D) -> SCNVector3 {
        
        let rad : Double = 6378.137 // Radius of the Earth (in kilometers)
        
        let xPhone = rad * cos(phone.coordinate.latitude) * cos(phone.coordinate.longitude)
        let yPhone = rad * cos(phone.coordinate.latitude) * sin(phone.coordinate.longitude)
        let zPhone = rad * sin(phone.coordinate.latitude)

        let xObject = rad * cos(object.latitude) * cos(object.longitude)
        let yObject = rad * cos(object.latitude) * sin(object.longitude)
        let zObject = rad * sin(object.latitude)
        
        let vector : SCNVector3 = .init( (xObject - xPhone), (yObject - yPhone), (zObject - zPhone) )
        return vector
        
}

我的问题是,我需要将纬度/经度转换为弧度吗?数学看起来是否正确?

谢谢

4

0 回答 0