CLLocationCoordinate2D使用PROJ4到MKMapPoint

时间:2013-07-19 22:26:07

标签: mkmapview map-projections wgs84 proj4

我正在尝试使用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

1 个答案:

答案 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
}