2016-11-15 62 views
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)
突起部を初期化するとき、私は任意の設定ミスがあったので、私はちょうど私が同じ間違った座標を持って...と不思議、私は良いを得たかどうかをテストするために、にProj4 Pythonバインディング(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++の関数でいくつかの型の変換を見逃していますか?

ありがとうございます。

答えて

1

結果は正しいと思われますが、度の代わりにラジアンで返されます。結果を度に変換してもう一度チェックしてください。

+0

さて、ありがとう、本当にありがとう!私ができるならあなたの答えに投票しますが、私はまだ評判が十分ではありません。私は、Pythonバインディングが暗黙的に変換を行うと仮定します。これが他の人に助けになることを願っています。 –

関連する問題