【问题标题】:Understanding MKCoordinateFromMapPoint behaviour了解 MKCoordinateFromMapPoint 行为
【发布时间】:2012-02-21 23:09:19
【问题描述】:

在基于位置的应用中,我们使用 MKMapPoints 来存储位置,例如当前用户位置。

当我们尝试在 MKMapView 上使用此位置时,为了设置最初显示的区域(放大用户),我们将其转换为 CLLocationCoordinate2D

有一个方便的方法:namenly: MKCoordinateForMapPoint,但在测试过程中这会产生奇怪的结果。

  MKMapPoint mapPoint = MKMapPointMake(51.96, 6.3); // My area ;)
  CLLocationCoordinate2D automagicCoordinate = MKCoordinateForMapPoint(mapPoint);
  CLLocationCoordinate2D manualCoordinate = CLLocationCoordinate2DMake(mapPoint.x, mapPoint.y);

我希望 automagicCoordinate 和 manualCoordinate 完全相同。 但是当我在调试器中检查它时,我得到以下结果:

automagicCoordinate.latitude = (CLLocationDegrees) 85.05
automagicCoordinate.longitude = (CLLocationDegrees) -179.99

manualCoordinate.latitude = (CLLocationDegrees) 51.96
manualCoordinate.longitude = (CLLocationDegrees) 6.3

这个方法创建的坐标怎么不对?

【问题讨论】:

    标签: ios mkmapview cllocation


    【解决方案1】:

    MKMapPoint 不是纬度和经度。如果是这样,您就不需要函数将其“转换”为坐标。

    正如位置感知编程指南在Understanding Map Geometry 部分中解释的那样:

    地图点是墨卡托地图投影上的 x 和 y 值。地图点用于许多与地图相关的计算,而不是地图坐标,因为它们简化了计算中涉及的数学运算。

    documentation for MKMapPoint 更清晰:

    如果将地球的曲面投影到平面上, 你得到的是一个二维版本的地图,其中经度 线看起来是平行的。 ...

    地图点的实际单位与使用的基础单位相关联 绘制 MKMapView 的内容,但您永远不需要 直接担心这些单位。 ...

    将地图相关数据保存到文件时,应始终保存 坐标值(纬度和经度)而不是地图点。

    地图点51.96, 6.3 对应于地图投影左上角的一个坐标。如果您想使用坐标(纬度、经度),请使用 CLLocationCoordinate2D 以避免混淆。

    (从技术上讲,您可以使用MKMapPoint 结构来存储您的坐标值,但不需要将它们转换为坐标,错误的类型使用只会导致混乱。)

    【讨论】:

      猜你喜欢
      • 2016-09-28
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多