2017-09-04 5 views
1

나는 세계지도가 포함 된 UIImage에 지구상의 일부 좌표를 그려려고합니다.세계지도와 함께 uiimageview의 신속한 좌표 좌표

아래 아래있는 UIImageView의 예를 참조하십시오 (나는지도를 사용하지 않음) :

World map

당신이 그것을 꽤 잘 작동하고 있지만, 좌표와 X, Y의 매핑이 잘못시피!

Amsterdam의 좌표는 (52.36666489, 4.883333206)이고 Center의 좌표는 (0,0)입니다.

나는이 일어날 수 있도록하려고 다음과 같은 일들을했지만 불행하게도이 것은 밖으로 작동하지 않습니다 :

  1. 위도가 -90에서 90 범위 이후는 '정상화'에 최초의 좌표를 시도했다 위도는 -180 ~ 180입니다.

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

내가 계산 한 이후
    1. :이는 '정상화'버전을 yiels 실제 경도 실제 위도 90과 180을 추가하여 수행됩니다 normalizedLatnormalizedLng가로 확장해야 스케일 팩터 : 그 후

    let heightScaleFactor = mapImageView.frame.height/180.0 let widthScaleFActor = mapImageView.frame.width/360.0

    그리고 3. 내가 스케일링 FAC있어 TORS 나는 마지막으로 좌표를 계산할 수 있습니다

    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에서 원점은 왼쪽 하단이 아니라 왼쪽 하단에 있음을 기억하십시오. 긍정적인 - 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 픽셀 (또는 그 이상) 일 수 있습니다.

    +0

    오, 네가 맞아,'mapImageView.frame.height - y'가 트릭을! 이미지도가 더 좋아 보인다. 그러나 오프셋은 여전히 ​​약간 잘못되었습니다. 좀 봐 주시겠습니까? http://imgur.com/a/EGvN8 –

    +0

    적도가 이미지의 중앙을 통과하지 못합니다. 그것은 조금 더 낮다.적도 체 오프셋을 조정하기 위해 'y'값에 다른 퍼지 계수를 추가해야 할 것입니다. – rmaddy

    +0

    나는 본다! 고마워요! –