Перепроектирование координат с использованием библиотеки GDAL

Я пытаюсь перепроектировать lat/lon координаты в WGS84 система к UTM один в SIRGAS 2000 система координат.

С помощью GDAL, Я начал с изменения известной координаты utm на лат / долг аналог В то же самое система координат (29 N), просто чтобы убедиться, что я написал правильный код (здесь я опускаю проверку ошибок):

OGRSpatialReference monUtm;
monUtm.SetWellKnownGeogCS("WGS84");
monUtm.SetUTM(29, true);

OGRSpatialReference monGeo;
monGeo.SetWellKnownGeogCS("WGS84");

OGRCoordinateTransformation* coordTrans = OGRCreateCoordinateTransformation(&monUtm, &monGeo);

double x = 621921.3413490148;
double y = 4794536.070196861;

int reprojected = coordTrans->Transform(1, &x, &y);
// If OK, print the coords.

delete coordTrans;
coordTrans = OGRCreateCoordinateTransformation(&monGeo, &monUtm);
reprojected = coordTrans->Transform(1, &x, &y);

// If OK, Print the coords.
delete coordTrans;

Координаты 621921.3413490148, 4794536.070196861 соответствуют области Moncelos на севере Галиции. Преобразование «вперед-назад», кажется, работает правильно: координаты широты и долготы являются правильными, и при проецировании обратно в UTM я получаю тот же самый как оригиналы:

UTM:          621921.34135 , 4794536.0702
Lat/lon:      43.293779579 , -7.4970160261
Back to UTM:  621921.34135 , 4794536.0702

Теперь, перепроектирование из WGS84 lat/long в SIRGAS 2000 UTM:

// Rodovia dos Tamoios, Brazil:
//  - UTM          -> 23 S
//  - WGS 84       -> EPSG:32723
//  - SIRGAS 2000  -> EPSG:31983

OGRSpatialReference wgs;
wgs.SetWellKnownGeogCS("WGS84");

OGRSpatialReference sirgas;
sirgas.importFromEPSG(31983);

coordTrans = OGRCreateCoordinateTransformation(&wgs, &sirgas);

double x = -23.57014667;
double y = -45.49159617;

reprojected = coordTrans->Transform(1, &x, &y);
// If OK, print results
delete coordTrans;

coordTrans = OGRCreateCoordinateTransformation(&sirgas, &wgs);
reprojected = coordTrans->Transform(1, &x, &y);
// If OK, print results.

это не дает такие же результаты:

WGS84 Lat/Lon input:      -23.57014667  ,  -45.49159617
SIRGAS 2000 UTM output:   2173024.0216  ,  4734004.2131
Back to WGS84 Lat/Lon:    -23.570633824 ,  -45.491627598

Как видите, оригинал WGS84 lat/lon и back-to_WGS84 lat/lon координаты не совсем одинаковы, в отличие от первого теста. Так же UTM x-coord имеет 7 цифр (я думал, что это было ограничено до 6 (?)).

В Google Maps, мы можем видеть, что есть разница в 27 метров между двумя точками (исходная точка представлена круг. Моя точка «обратно перепроектирована» представлена кинжал).

Наконец, вопрос: правильно ли я делаю репроекцию? Если да, то почему во втором тестовом случае разница между репроекциями составляет 27 метров?

3

Решение

Проблема в том, что вам нужно поменять порядок осей, чтобы использовать декартово пространство X / Y или Lon / Lat, а не порядок «Lat / Lon».

Установка этого должна работать.

double x = -45.49159617;  // Lon
double y = -23.57014667;  // Lat

Разница, которую вы увидели в конверсии в оба конца, заключалась в том, что проекция за пределы зоны UTM проецировалась из-за порядка осей с перестановкой.

3

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


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