uiimageview上的Swift绘图坐标与世界地图

时间:2017-09-04 02:46:49

标签: swift uiimageview uiimage location cllocation

我试图在UIImage上绘制地球上的一些坐标,其中包含世界地图。 (我不想使用地图)

请参阅下面的UIImageView示例:

World map

正如你所看到的那样,但是坐标和X Y的映射是不正确的!

Amsterdam的坐标为:(52.36666489,4.883333206),Center&#39}为(0,0)。

我已经做了以下事情来尝试实现这一目标,但不幸的是,这还没有成功:

  1. 我已经先尝试过'规范化'纬度范围从-9090和纬度-180180的坐标。这是通过将90加到实际纬度而180加到真实经度来实现的,这样可以归一化“标准化”。版本
  2. let normalizedLat = location.coordinate.latitude + 90.0. let normalizedLng = location.coordinate.longitude + 180.0

    1. 之后,我计算了normalizedLatnormalizedLng应该缩放的比例因子:
    2. let heightScaleFactor = mapImageView.frame.height / 180.0 let widthScaleFActor = mapImageView.frame.width / 360.0

      并且3.之后我得到了缩放因子我最终可以通过以下方式计算坐标:

      let x = Double(widthScaleFActor * CGFloat(normalizedLng)) let y = Double(heightScaleFactor * CGFloat(normalizedLat)) dot.frame = CGRect(x: x, y: y, width: Double(dot.frame.width), height: Double(dot.frame.height))

      但由于一些奇怪的原因,阿姆斯特丹不在阿姆斯特丹现场,中心不在中心位置。

      我很确定我的计算出错了。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

请记住,在iOS中,原点位于左上角,而不是左下角。积极的y下降,而不是上升。

你需要将其考虑在内。

dot.frame = CGRect(x: x, y: mapImageView.frame.height - y, width: Double(dot.frame.width), height: Double(dot.frame.height))

另请注意,图像中的赤道不在中间。它在图像中较低,因此您需要根据图像中赤道的偏移量计算y值时添加额外的偏移量。

dot.frame = CGRect(x: x, y: mapImageView.frame.height - y + equatorOffset, width: Double(dot.frame.width), height: Double(dot.frame.height))

您的地图投影也可能没有简单的线性纬度范围。 0-10度可能是12像素,10-20度可能是11像素等等,而80-90只有3像素(或其他)。

相关问题