Ненормальный вывод при использовании proj4 для преобразования latlong в UTM

Следующий код пытается перевести latlong в utm для одной точки в Японии. Тем не менее, результат utm совершенно ненормальный, как следует. Может ли кто-нибудь помочь в этом? Приведите пример лучше. Благодарю.
*** 0,607968 2,438016 -14 ***

   #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);
}

0

Решение

Я заметил, что вы не проверяли код ошибки на pj_transformЯ поймал его и проверил сам.

Возвращался -14, Отрицательные коды возврата обычно указывают на ошибки.

Некоторое копание в документации PROJ.4 показало, что pj_strerrno Функция возвращает сообщение об ошибке, связанное с кодом ошибки. Соответственно, я использовал функцию и обнаружил, что -14 средства latitude 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);
}
1

Другие решения


По вопросам рекламы [email protected]