具有以下定义:
+proj=longlat +ellps=WGS84 +datum=WGS84 +nadgrids=@null +no_defs
+proj=merc +lon_0=0 +lat_ts=0 +x_0=134217728.0 +y_0=134217728.0 +a=6378137 +b=6378137 + k=1.0 +units=m +nadgrids=@null +no_defs
还有一个步骤可以缩小 Mapkit 和 Proj4 之间的差距:x 中的线性回归和 y 中的线性回归。
let const_x = 114180219.657211
let a1_x = -0.850708929130513
private func mk_x_forProjX(projX: Double) -> Double {
return (projX - self.const_x) / (self.a1_x + 1)
}
private func proj_x_forMKX(mkX: Double) -> Double {
return mkX * (self.a1_x + 1) + self.const_x
}
let const_y = 154255236.342789
let a1_y = -1.14929107086948
private func mk_y_forProjY(projY: Double) -> Double {
return (projY - self.const_y) / (self.a1_y + 1)
}
private func proj_y_forMKY(mkY: Double) -> Double {
return mkY * (self.a1_y + 1) + self.const_y
}
合身并不完美,但精度足以令人满意。
最后一点,在转换度数 <-> 弧度时一定要使用 Double,即:
static func DegreesToRadians (value:Double) -> Double {
return value * M_PI / 180.0
}
static func RadiansToDegrees (value:Double) -> Double {
return value * 180.0 / M_PI
}