Следующий код пытается перевести 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);
}
Я заметил, что вы не проверяли код ошибки на 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);
}