2

私はこの問題を何日も回避してきましたが、何が間違っているのかについての説明を見つけることができませんでした. 手を貸していただければ幸いです。

C++ の proj4 ライブラリを使用し(epsg:23030)て LongLat Coordinates に変換したいUTM 座標のセットがあります。私のコードは次のとおりです。(epsg:4326)(libproj-dev)

#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座標がLongLat座標(585363.1 4796767.1)を参照していることは知っています。(-1.94725 43.3189)
  • ただし、関数を呼び出すと、一連の間違った座標が返されます: (-0.0340087 0.756025 ).

プロジェクションを初期化するときに設定ミスがあったかどうか疑問に思っていたので、Proj4 Python bindings(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++ 関数で何らかのタイプの変換が欠落していますか?

前もって感謝します。

4

1 に答える 1

4

結果は正しいようですが、度ではなくラジアンで返されます。結果を度に変換し、再度確認してください。

于 2016-11-15T16:33:49.350 に答える