2017-09-04 212 views
1

我想在地球上绘制一个包含世界地图的UIImage上的一些坐标。 (我不想用的地图)用世界地图在世界地图上快速绘制坐标

见下下面的UIImageView的一个例子:

World map

正如你看到它的工作得非常好,但是从坐标和X Y的映射是不正确的!

Amsterdam的坐标是:(52.36666489,4.883333206)和Center是(0,0)。

我已经做了下面的事情,试图做到这一点,但遗憾的是,这是不工作:

  1. 我第一次尝试“正常化”的坐标,因为纬度范围从-9090和纬度-180180

let normalizedLat = location.coordinate.latitude + 90.0. let normalizedLng = location.coordinate.longitude + 180.0

  • 此后我已经计算:这是通过添加90到实际纬度和180到yiels的“规范化”版本的真实的经度完成比例因子,其中normalizedLatnormalizedLng应与规模:
  • let heightScaleFactor = mapImageView.frame.height/180.0 let widthScaleFActor = mapImageView.frame.width/360.0

    和3之后,我已经得到了缩放FAC职责范围,我终于可以通过计算坐标:

    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))

    但对于一些奇怪的原因阿姆斯特丹是不是在阿姆斯特丹现货和中心不在中心位置。

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

    回答

    0

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

    您需要因素在。

    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像素(或其他)。

    +0

    哦,你是完全正确的,'mapImageView.frame.height - y'做了诡计!现在地图已经看起来更好了。但偏移量仍然有点不对。你能看一下吗? http://imgur.com/a/EGvN8 –

    +0

    赤道没有穿过图像的中心。它有点低。您将需要在'y'值中添加另一个模糊因子以调整赤道偏移。 – rmaddy

    +0

    我明白了!非常感谢你! –