1
私はこの問題を数日間回避してきましたが、私が間違っていることについての説明を見つけることができませんでした。私はあなたに私に手を貸すことができることを願っています。C++でProj4を使用してUTMからLongLatに変換する
私は、C++ (libproj-dev)
のproj4ライブラリを使用して、LongLat Coordinates (epsg:4326)
に変換したいUTM座標のセットを(epsg:23030)
持っています。次のように私のコードは次のとおりです。
#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)
。
(pyproj)
をテストすることを決めた場合、私は思っていたもの。私は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 */
はProj4
ライブラリオーバーCythonバインディングのセットですので、私は両方のプログラミング言語で同じコアを使用しています。
何が間違っている可能性について手掛かりがありますか?私はC++の関数でいくつかの型の変換を見逃していますか?
ありがとうございます。
さて、ありがとう、本当にありがとう!私ができるならあなたの答えに投票しますが、私はまだ評判が十分ではありません。私は、Pythonバインディングが暗黙的に変換を行うと仮定します。これが他の人に助けになることを願っています。 –