2009-10-10 1 views
4

나는 위도 (도)가 주어지면 메르카토르 투영법을 사용하여지도에서 Y 위치를 계산하려고합니다. 여기에 내가해야 할 작업은 다음과 같습니다위도에서 Y 축 위치를 메르카토르 투영 각도로 계산하십시오.

//mapHeight might be 600 (pixels), for example 
//latitudeInDegrees ranges from -90 to 90 
public double CalculateY(double mapHeight, double latitudeInDegrees) 
{ 
    //what on earth do I do here to calculate the Y offset on the map? 
    return ???; 
} 

나는 (위키 피 디아와 유래 포함) 나는 온라인 찾은 모든 일을 해봤지만 아무도 나를 위해 일하지 않았다. 나는 어리석은 짓을하고 있을지 모르지만 나는 무엇을 알아낼 수 없다. 아무도 내 정신을 구할 수 있습니까?

+0

죄송합니다 많은 편집. 내 답변의 릴리스 버전을 만들었습니다. – AndreyAkinshin

답변

4
public double CalculateY(double mapHeight, double latitudeInDegrees) 
{ 
    return Math.Log(Math.Tan(latitudeInDegrees/360d * Math.PI + Math.PI/4)); 
} 

mapHeight와 규모 y를 기억하지 마십시오 위키 백과에서

견적 (당신은 최대 및 taht를위한 latitudeInDegrees의 최소값 알아야한다) : 위도에서

을보다 높은 70 ° 북쪽 또는 남쪽에있는 경우 Mercator 투영은 이며 실제로 사용할 수 없습니다.

이 같은 코드를 작성해야 : 자세한 내용은

private double CalculateYRelative(double latitudeInDegrees) 
{ 
    return Math.Log(Math.Tan(latitudeInDegrees/360d * Math.PI + Math.PI/4)); 
} 
... 
minY = CalculateYRelative(MinLatitudeInDegrees); 
maxY = CalculateYRelative(MaxLatitudeInDegrees); 
... 
public double CalculateY(double mapHeight, double latitudeInDegrees) 
{ 
    return mapHeight* 
      (CalculateYRelative(latitudeInDegrees) - minY)/(maxY - minY); 
} 

:

Wikipedia

Same question

Same question 2

+0

스케일링에 대한 귀하의 의견은 나에게 이해가되지 않습니다. 좀 더 명확히 해 주시겠습니까? 최대 및 최소 위도를 알고 나면 어떻게 맵에 따라 조정할 수 있습니까? –

+0

고마워요. 나는 당신의 모든 링크 된 답변을 보았지만 아무도이 일을하기에 충분하다고는 설명하지 못했습니다. 귀하의 수정 사항은이 사실을 이해하는 데 도움이되었습니다. –

+0

@ 스컹크, 내 새 편집을 참조하십시오. MinLatitudeInDegrees 및 MaxLatitudeInDegrees는 귀하의 const입니다. 이 const로 minY & maxY를 계산하고 CalculateY에 결과를 사용해야합니다. CalculateY는 [0, maxHeight]의 값을 반환합니다. – AndreyAkinshin