2009-09-12 2 views

답변

4

지도가 대략 거리/도시 수준 인 경우 mercator projection (예 : openstreetmap.org)이 사용되고 극에 너무 가깝지 않은 경우 선형 보간이 충분히 정확할 수 있습니다. 다음과 같은 가정 : 오른쪽 아래

  • P 당신은지도
  • 에 위치 할 점 = 위도/경도의 왼쪽 상단 모서리의

    • TL = 위도/경도를
    • BR = 위도/경도
    • 는지도 = 폭과 높이 (H, W)는 (픽셀?)이
    • 맵 이미지의 원점 (0,0)의 왼쪽 상단

    에있다, 우리는 (x, y) positi를 보간 할 수 있습니다.

    x = w * (P.lon - TL.lon)/(BR.lon - TL.lon) 
    y = h * (P.lat - TL.lat)/(BR.lat - TL.lat) 
    

    일반 잡았다의 :

    • 위도/경도 표기 관례 "수평"이전 "수직", 즉 제 1 및 제 2 경도 위도 나열로 P에 해당합니다. 이것은 이미지 좌표의 일반적인 x, y 표기법과 반대입니다.

    • 북쪽 방향 ("위로")으로 갈 때 위도 값이 증가하지만, 내려갈 때지도 이미지의 y 좌표가 증가 할 수 있습니다.

    • 지도가 더 넓은 영역을 다루는 경우 선형 보간은 위도에 대해 정확하지 않습니다. 위도의 일 정도에 걸쳐 땅의 거주 구역에 맵 (예 Bay 지역)의 경우, 중앙 위도에

      화소 미만 (크기에 따라)으로 보인다는 0.2 % 정도에 의해 해제 될 것이다 즉, 사용자의 요구에 충분히 정확한 있다면

    , 당신은 여기 중지 할 수 있습니다!

    P의 위도에서 픽셀 y 위치로 이동하는 데 더 정확한 수학은 mercator 수학으로 시작합니다. 우리는 (우리가 찾고있는 y 값과는 달리으로 대문자 Y를 사용합니다 다음과 같이 위도 P.lat를 들어, 프로젝션의 Y 위치가 적도에서 시작하는 것이 될 것이라고 알고, Y는 적도와 증가에서 시작) 북쪽을 향해 :

    Y = k * ln((1 + sin(P.lat))/(1 - sin(P.lat))) 
    

    상수 K 우리가 알 수 없습니다지도의 수직 방향의 신축에 따라 달라집니다. 운 좋게도, y (TL) - y (BR) = h를 관찰하여 추론 할 수 있습니다. 즉, 우리를 가져옵니다

    k = h/(ln((1 + sin(TL.lat))/(1 - sin(TL.lat))) - ln((1 + sin(BR.lat))/(1 - sin(BR.lat)))) 
    

    K 알려진 (! 이궁 그 괄호 네 가지 수준이다), 우리는 지금 어떤 위도의 Y 위치를 알아내는 공식을 가지고있다. (1) 우리의 y 값이 TL.lat하지 적도에서 시작하고, (2), y는 오히려 북쪽보다는 남쪽을 향해 성장 : 우리는 단지 보정 할 필요가있다.이것은 우리를 가져옵니다

    Y(TL.lat) = k * ln((1 + sin(TL.lat))/(1 - sin(TL.lat))) 
    Y(P.lat) = k * ln((1 + sin(P.lat))/(1 - sin(P.lat))) 
    y(P.lat) = -(Y(P.lat) - Y(TL.lat)) 
    

    그래서이 당신에게 가져옵니다

    x = w * (P.lon - TL.lon)/(BR.lon - TL.lon) // like before 
    y = -(Y(P.lat) - Y(TL.lat))     // where Y(anything) depends just on h, TL.lat and BR.lat 
    
    +0

    는 (1) LN 무엇을 의미합니까? 대수입니까? (2) 그리고 최종 공식은 무엇입니까? 그 흐름을 따라갈 수 없다. – eros

    +0

    ln은 Math.log (double)을 의미합니까? – eros

    +0

    "y = - (Y (P.lat) - Y (TL.lat))"의 첫 번째 빼기 기호 (-)의 의미는 무엇입니까? – eros

    관련 문제