1
我一直在解決這個問題好幾天,但一直沒有找到解釋我做錯了什麼。我希望你能幫我一把。使用C++中的Proj4從UTM轉換爲LongLat
我有一套UTM座標(epsg:23030)
,我想通過使用C++ (libproj-dev)
的proj4庫將其轉換爲LongLat座標(epsg:4326)
。我的代碼如下:
#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 Python綁定(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 */
從我個人理解pyproj
是一組用Cython綁定在Proj4
庫,所以我用兩種編程語言相同的核心。
你有什麼線索可能是錯的?我是否錯過了C++函數中的某種類型的轉換?
在此先感謝。
就是這樣,非常感謝你!如果可以的話,我會提出你的答案,但我還沒有足夠的聲望。我想Python綁定會隱式執行轉換。希望這可以幫助別人。 –