2016-11-15 4 views
1

저는이 문제를 며칠 동안 생각해 봤지만 잘못하고있는 것에 대한 설명을 찾을 수 없었습니다. 네가 나 한테 빌려 주길 바래.C++에서 Proj4를 사용하여 UTM에서 LongLat로 변환

나는 C++ 용 proj4 라이브러리 (libproj-dev)을 사용하여 LongLat 좌표 (epsg:4326)으로 변환하려는 UTM 좌표 집합 (epsg:23030)을 보유하고 있습니다. 다음과 같이 내 코드는 다음과 같습니다

#include "proj_api.h 
#include <geos/geom/Coordinate.h> 

geos::geom::Coordinate utm2longlat(double x, double y){ 

    // Initialize LONGLAT projection with epsg:4326 
    if (!(pj_longlat = pj_init_plus("+init=epsg:4326"))){ 
     qDebug() << "pj_init_plus error: longlat"; 
    } 

    // Initialize UTM projection with epsg:23030 
    if (! (pj_utm = pj_init_plus("+init=epsg:23030"))){ 
     qDebug() << "pj_init_plus error: utm"; 
    } 

    // Transform UTM projection into LONGLAT projection 
    int p = pj_transform(pj_utm, pj_longlat, 1, 1, &x, &y, NULL); 

    // Check for errors 
    qDebug() << "Error message" << pj_strerrno(p) ; 

    // Return values as coordinate 
    return geos::geom::Coordinate(x, y) 
} 

기능 utm2longlat 내 전화 : 내 예에서

... 
// UTM coordinates 
double x = 585363.1; 
double y = 4796767.1; 
geos::geom::Coordinate coord = utm2longlat(x, y); 

qDebug() << coord.x << coord.y; 

/* Result is -0.0340087 0.756025 <-- WRONG */ 

:

  • 내가 UTM(585363.1 4796767.1)이 LongLat를 참조 좌표를 알고 좌표 (-1.94725 43.3189).
  • 그러나 호출 할 때이 함수는 잘못된 좌표 집합 인 (-0.0340087 0.756025)을 반환합니다.
돌기를 초기화 할 때 내가 어떤 잘못을했다, 그래서 난 그냥 같은 잘못된 좌표를 가지고 ... 그리고 호기심, 내가 선을 가지고 있는지 여부를 테스트하려면 Proj4 파이썬 바인딩 (pyproj)을 테스트하기로 결심했다면 내가 궁금

사람. 내가 pyproj을 이해하는 것과

from pyproj import Proj, transform 

// Initialize UTM projection 
proj_utm = Proj(init='epsg:23030') 
// Initialize LongLat projection 
proj_lonlat = Proj(init='epsg:4326') 

x_utm, y_utm = 585363.1, 4796767.1 

x_longlat, y_longlat = transform(proj_utm, proj_lonlat, x_utm, y_utm) 

// Print results 
print "original", x_utm, y_utm  
print "utm2lonlat", x_longlat, y_longlat 

/* Result is -1.94725 43.3189 <-- CORRECT */ 

Proj4 라이브러리를 통해 사이 썬 바인딩 세트, 그래서 모두 프로그래밍 언어에서 동일한 코어를 사용하고 있습니다.

무엇이 잘못 될 수 있는지 실마리가 있습니까? C++ 함수에서 일부 변환 유형이 누락 되었습니까?

미리 감사드립니다.

답변

1

결과가 정확하다고 생각되지만 각도가 아니라 라디안으로 반환됩니다. 결과를도 단위로 변환하고 다시 확인하십시오.

+0

정말 고마워요. 제가 할 수있는 한 당신의 대답에 찬성표를 드리 겠지만, 나는 아직 충분한 평판을 얻지 못했습니다. 나는 파이썬 바인딩이 암묵적으로 변환을한다고 가정한다. 희망이 다른 사람에게 도움이 될 수 있습니다. –