GPS Координаты в SCNVector3


#1

День добрый
Вот застрял над задачкой по переводу координат GPS в координаты SCNVector3

Функция принимает мои координаты и координаты конечной точки, возвращает в SCNVector3

Пробовал сделать расчет по направлению и дистанции

  func convertCLLocationToSCNVector3(degrees: Double) -> SCNVector3  {

    let distance = 25.0
    let cos1 = cos(degrees)
    let y = distance * cos1
    let cos2 =  (cos(90 - degrees))
    let x = distance * cos2
    print("degress = \(degrees)")
    print("x = \(x)")
    print("y = \(y)")
return SCNVector3(x, 0, y)

Не получилось

Может кто сталкивался?


#2

Почитайте этот тред https://github.com/viromedia/viro/issues/131
Там не про свифт, но вычисления должны помочь.


#3

Спасибо за ссылку
Нужно попробовать


#4

Вот что вышло :slightly_frowning_face:

func latLongToMetrs(lat: Double, lon: Double) -> (Double, Double) {
let lanR = (lat / 180 * .pi)
let lonR = (lon / 180 * .pi)
let sm_a = 637813.70

let xMetric = sm_a * lonR
let yMetric = sm_a * cos(sin(lanR) + 1) / cos(lanR)
return (xMetric, yMetric)
}

func transformMetric(lat: Double, long: Double) -> SCNVector3{
var objectPoint = latLongToMetrs(lat: lat, lon: long)
let devicePoin = latLongToMetrs(lat: locationManager.location!.coordinate.latitude , lon:  locationManager.location!.coordinate.longitude)

objectPoint.0 = objectPoint.0 * cos(rotaions) + objectPoint.1 * sin(rotaions)
objectPoint.1 = objectPoint.1 * cos(rotaions) - objectPoint.0 * sin(rotaions)
let objPosZ = (objectPoint.1 - devicePoin.1)
let objPosX = (objectPoint.0 - devicePoin.0)

return SCNVector3(objPosX, 0, objPosZ) // x = -5956744.3, y = 0, z = 322428.42
}

Буду искать


#5

Вдруг кому пригодится

 private func transformMatrix(source: CLLocationCoordinate2D, destination: CLLocationCoordinate2D, distance: Double, rotation: Double) -> SCNMatrix4 {
    let translation = SCNMatrix4MakeTranslation(0, 0, Float(-distance))
    let rotation = SCNMatrix4MakeRotation(-1 * Float(rotation), 0, 1, 0)
    let transformationMatrix = SCNMatrix4Mult(translation, rotation)
    return (transformationMatrix)
}