2016-04-11 10 views
0

Я не могу понять, как преобразовать координаты GPS в голландские координаты RD с помощью Swift 2 и MapKit. Я ищу в Интернете формулы, которые я могу написать в Swift, чтобы сделать конвертацию, но без успеха. У кого-нибудь была эта проблема решена, я буду рад, если кто-нибудь сможет помочь. Спасибо.Преобразование координат GPS в RD (голландский)

ответ

0

Скорее всего, вы не найдете быстрый код для этой задачи.
Но вы можете вызвать библиотеки C из Swift.
Есть некоторый универсальный географический ЛИЭС преобразования, написанный на C.

Для вызова статический связанные библиотек C, читайте далее здесь: https://tetontech.wordpress.com/2014/07/03/swift-and-statically-linking-c-libraries/

0

Вот мое решение, надеюсь, будет полезным для кого-то. Можно проверить его здесь http://www.gpscoordinates.eu/convert-rd-coordinates.php

extension CollectionType { 
    subscript (safe index: Index) -> Generator.Element? { 
    return indices.contains(index) ? self[index] : nil 
} 


func gpsToRd(lat: Double, lon: Double) -> (lat: Double, lng: Double) { 
    let referenceRdX = 155000.0 
    let referenceRdY = 463000.0 
    let referenceWgs84X = 52.15517440 
    let referenceWgs84Y = 5.38720621 

    let Rpq: [[Double]] = [[0.0, 190094.945, -0.008, -32.391, 0.0], [-0.705, -11832.228, 0.0, -0.608, 0.0], [0.0, -114.221, 0.0, 0.148, 0.0], [0.0, -2.340, 0.0, 0.0, 0.0]] 

    let Spq: [[Double]] = [[0.0, 0.433, 3638.893, 0.0, 0.092], [309056.544, -0.032, -157.984, 0.0, -0.054], [73.077, 0.0, -6.439, 0.0, 0.0], [59.788, 0.0, 0.0, 0.0, 0.0]] 


    let d_lattitude = (0.36 * (lat - referenceWgs84X)) 
    let d_longitude = (0.36 * (lon - referenceWgs84Y)) 

    var calc_latt = 0.0 
    var calc_long = 0.0 

    for p in 0...3 { 
     for q in 0...4 { 
      if let _Rpq = Rpq[p][safe: q] { 
       calc_latt += _Rpq * pow(d_lattitude, Double(p)) * pow(d_longitude, Double(q)) 
      } 
      if let _Spq = Spq[p][safe: q] { 
       calc_long += _Spq * pow(d_lattitude, Double(p)) * pow(d_longitude, Double(q)); 
      } 
     } 
    } 

    let rd_x_coordinate = referenceRdX + calc_latt 
    let rd_y_coordinate = referenceRdY + calc_long 

    return (rd_x_coordinate, rd_y_coordinate) 
} 
Смежные вопросы