Lat / Long в SCNVector3 для ARSCNView

#ios #swift #latitude-longitude #arkit #scnvector3

#iOS #swift #широта-долгота #arkit #scnvector3

Вопрос:

Я пытаюсь создать приложение 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
        
}
  

Мой вопрос в том, нужно ли мне преобразовывать широты / длинные градусы в радианы и правильно ли выглядит математика?

Спасибо