以下代码在日本的一个位置点转移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 :(得分:1)
我注意到你没有检查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);
}