2014-07-25 3 views
0

다음 코드는 일본의 한 위치 지점에 대해 latlong을 utm으로 전송합니다. 그러나 utm 결과는 다음과 같이 완전히 비정상입니다. 누군가가 이것을 도울 수 있습니까? 좋은 예를 들어주세요. 감사. *** 0.607968 2.438016 -14 ***proj4를 사용하여 latlong을 UTM으로 변환 할 때 비정상적인 출력

#include "proj_api.h" 
    #include "stdio.h" 
    main(int argc, char **argv) { 
     projPJ pj_utm, pj_latlong; 
     double x = 34.8; 
     double y = 138.4; 

     if (!(pj_utm = pj_init_plus("+proj=utm +zone=54 +ellps=WGS84"))){ 
         printf("pj_init_plus error"); 
      exit(1); 
      } 
     if (!(pj_latlong = pj_init_plus("+proj=latlong +ellps=WGS84"))){ 
         printf("pj_init_plus error"); 
      exit(1); 
      } 

      x *= DEG_TO_RAD; 
      y *= DEG_TO_RAD; 
      int p = pj_transform(pj_latlong, pj_utm, 1, 1, &x, &y, NULL); 
      printf("%.2f\t%.2f\n", x, y); 
     exit(0); 
    } 
+1

그리고 어떤 값이 * 기대 *이 얻을? –

답변

1

난 당신이 pj_transform에 오류 코드를 확인하지 않은 것으로 나타났습니다, 그래서 자신을 잡은하고 확인.

-14을 반환했습니다. 부정적인 리턴 코드는 대개 오류를 나타냅니다.

PROJ.4 설명서에서 일부 파고는 pj_strerrno 함수가 오류 코드와 관련된 오류 메시지를 반환한다는 것을 나타냅니다. 따라서, 나는이 함수를 사용하여 -14latitude or longitude exceeded limits이라는 것을 발견했다.

나는 코드를 확인하고이 발견 :

분명히
double x = 34.8; 
double y = 138.4; 

, y의 범위 [-90,90]에 있어야합니다. 좌표를 잘못 지정했습니다.

좌표를 올바르게 지정하면 예상대로 결과가 262141.18N 3853945.50E이됩니다.

내 코드는 다음과 같습니다 :

//Compile with: gcc cheese.cpp -lproj 
#include <proj_api.h> 
#include <stdio.h> 
main(int argc, char **argv) { 
    projPJ pj_latlong, pj_utm; 
    double y = 34.8; 
    double x = 138.4; 

    if (!(pj_latlong = pj_init_plus("+proj=longlat +datum=WGS84"))){ 
    printf("pj_init_plus error: longlat\n"); 
    exit(1); 
    } 
    if (!(pj_utm = pj_init_plus("+proj=utm +zone=54 +ellps=WGS84"))){ 
    printf("pj_init_plus error: utm\n"); 
    exit(1); 
    } 

    x *= DEG_TO_RAD; 
    y *= DEG_TO_RAD; 
    int p = pj_transform(pj_latlong, pj_utm, 1, 1, &x, &y, NULL); 
    printf("Error code: %d\nError message: %s\n", p, pj_strerrno(p)); 
    printf("%.2fN\t%.2fE\n", x, y); 
}