#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
}
Мой вопрос в том, нужно ли мне преобразовывать широты / длинные градусы в радианы и правильно ли выглядит математика?
Спасибо