2014-03-30 2 views
0

큰 WGS84 포인트 좌표를 처리하는 방법은 무엇입니까?그림지도 좌표 app 좌표 WGS84

세계에서 (WGS84) 포인트를 화면상의 포인트로 픽셀 단위로 변환한다고 생각합니다. 좋은 방법입니까? 커다란 줌이 필요하고, 단위를 미터에서 밀리미터로 바꿔야하기 때문에 여전히 핵심적으로 작동하지 않습니다 (그러나 어떻게 x와 y를 곱하면됩니까?).

+0

넓은 영역을 표시하려면 간단한 벡터 변환으로 원통형 좌표를 평면으로 올바르게 변환 할 수 없기 때문에 Transverse Mercator와 같은지도 투영이 필요합니다. 현재 WGS84에서 그리드로 변환하는 데 사용하는 코드를 표시하십시오. – PMF

+0

아직 가지고 있지 않습니다. 지금은 그리기 포인트 좌표에서 창 좌표의 모서리 부분을 빼는 것뿐입니다. 보시다시피, 나는 그것에 도달하는 방법을 모른다. 당신은 설명 할 수 있습니까, 아니면 더 나은 것을 보여줄 수 있습니까? – user3477835

답변

0

다음은이 매핑 문제에 대한 매우 단순한 접근법입니다. Geographers는 아마도 이것에 대해 울지 만 좌표가 약 70 ° 이하이고 창 크기가 너무 크지 않으면 실제로 잘 작동합니다. 또한 시작과 끝 지점 만 사용하여 큰 개체 (예 : 매우 긴 줄)를 직접 매핑하지 마십시오.

public PointF GeoCoordToPixel(IGeographicPosition geoPos) 
{ 
    double tempLong = geoPos.Longitude; 
    if (tempLong > CenterPos.Longitude && (tempLong - CenterPos.Longitude) > 180) 
    { 
     // the position is to the left, over the antimeridian 
     tempLong = tempLong - 360; 
    } 

    if (tempLong < CenterPos.Longitude && (CenterPos.Longitude - tempLong) > 180) 
    { 
     // the position is to the right, over the antimeridian 
     tempLong = tempLong + 360; 
    } 

    PointF pt = new PointF(
     (float)((tempLong - LongitudeOfOrigin)/LongitudeIncrement), 
     (float)((-geoPos.Latitude + LatitudeOfOrigin)/LatitudeIncrement)); 

    return pt; 
} 

with CenterPos = 창 가운데; LatituteOfOrigin/LongitudeOfOrigin = 창의 왼쪽 상단 위치. LongitudeIncrement/LatitudeIncrement =보기 비율. 이들의 관계는 다음과 같습니다

LatitudeOfOrigin = CenterPos.Latitude + (m_drawingBuffer.Height/2.0 * LatitudeIncrement); 
LongitudeOfOrigin = CenterPos.Longitude - (m_drawingBuffer.Width/2.0 * LongitudeIncrement); 

및 역 :

public CGeographicPosition PixelToGeoCoord(PointF pt) 
{ 
    double latitude = -(pt.Y * LatitudeIncrement) + LatitudeOfOrigin; 
    double longitude = (pt.X * LongitudeIncrement) + LongitudeOfOrigin; 
    if (longitude > 180) 
    { 
     longitude -= 360; 
    } 

    return (new CGeographicPosition(latitude, longitude, 0)); 
} 

별로 어려운, 그것은

입니까?