Широта / долгота в SCNVector3 для ARSCNView

Я пытаюсь создать приложение AR, которое помещает объект в сцену ARSCNView на основе его долготы и широты.

Мне нужно преобразовать значения широты и долготы в точку в трехмерном пространстве относительно широты и долготы моего телефона. Я пробую это около 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
        
}

У меня вопрос: нужно ли преобразовывать градусы широты и долготы в радианы и правильно ли выглядят математические вычисления?

благодаря

0 ответов

Другие вопросы по тегам