我正在尝试使用Proj4库转换不同的地图投影,以便与Apple Map Kit一起使用。出于测试目的,我认为我将首先使用Proj4复制MKMapPointForCoordinate函数。
这些是我正在使用的定义:
+proj=longlat +ellps=WGS84 +datum=WGS84 +nadgrids=@null +no_defs
+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs
当我使用坐标47.5,-97.3时,Proj4转换返回:
6028687.013553943,-10834169.44145535
但MKMapPointForCoordinate返回: 61646948.12444445,93835627.5941129,这是一个数量级的关闭。
Map Kit的世界大小是268435456 x 268435456
答案 0 :(得分:0)
具有以下定义:
+ 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和x的线性回归 y中的线性回归。
contenteditable=true
合身并不完美,但精度足够令人满意。
最后一点, 转换度数时务必使用Double< - >弧度, 即:
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
}