将GPS转换为RD(荷兰语)坐标

时间:2016-04-11 13:00:43

标签: ios gps swift2 mapkit coordinates

我无法弄清楚如何使用Swift 2和MapKit将GPS坐标转换为荷兰RD坐标。 我在网上搜索我可以用Swift编写的公式来进行转换,但没有成功。 有没有人解决了这个问题,如果有人能提供帮助我会很高兴。 感谢。

2 个答案:

答案 0 :(得分:0)

你很可能找不到那个任务的快捷代码 但是你可以从Swift调用C库 有一些通用的地理转换库,用C语言编写。

要调用静态链接的C库,请在此处进一步阅读: https://tetontech.wordpress.com/2014/07/03/swift-and-statically-linking-c-libraries/

答案 1 :(得分: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)
}