【问题标题】:CLLocationCoordinate2D to MKMapPoint using PROJ4CLLocationCoordinate2D 到 MKMapPoint 使用 PROJ4
【发布时间】:2013-07-19 08:25:39
【问题描述】:

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

【问题讨论】:

  • 为什么不在 MapKit 中直接使用 proj4 中的纬度和经度,而不是转换为 MKMapPoint?
  • 我正在尝试了解 Proj4 的正确设置,上面的测试是我知道的最简单的方法来验证我从 Proj4 和 MKMapPointForCoordinate 获得的结果是否相同。我的实际问题比这个更难,所以我想先从一个简单/基本的问题开始。例如,我什至无法理解在哪里可以使用 Proj4 指定笛卡尔坐标的范围,因为 Google Map 和 MapKit 的范围似乎不同。
  • 好的,我误解了你的目标。

标签: mkmapview map-projections wgs84 proj


【解决方案1】:

具有以下定义:

+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
}

【讨论】:

    猜你喜欢
    • 2011-05-12
    • 2011-01-20
    • 1970-01-01
    • 2020-06-22
    • 2011-04-28
    • 2013-09-25
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    相关资源
    最近更新 更多