Python — Преобразование из UTM в LongLat с использованием Proj4 в переполнении стека

Я обходил эту проблему в течение нескольких дней, но не смог найти объяснения тому, что я делаю неправильно. Я надеюсь, что вы можете помочь мне.

У меня есть набор UTM координат (epsg:23030) что я хочу преобразовать в координаты LongLat (epsg:4326) используя библиотеку proj4 для C ++ (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 координаты (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 ++?

Заранее спасибо.

1

Решение

Результат мне кажется правильным, но он возвращается в радианах, а не в градусах. Преобразовать результат в градусы и проверить еще раз.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]