2017-09-04 152 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

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