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