Я пытаюсь перепроверить координату lat/lon
в системе WGS84
на UTM
один в системе координат SIRGAS 2000
.Повторное проектирование координат с использованием библиотеки GDAL
Использование 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
correspond to the Moncelos region in northern Galicia. Трансформация вперед-и-обратно, кажется, работает права: широта/долгота coordiantes являются правильными, и при проецировании обратно в 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 (?)).
In Google Maps, мы можем видеть, что есть разница в 27 метров между двумя точками (оригинальная точка представлена кругом. Моей «назад-перепроецируется» точка представлена кинжала).
И, наконец, вопрос: правильно ли я делаю репрокцию? Если да, то почему разница между повторениями во втором тестовом случае составляет 27 метров?
Спасибо! Это сработало! Поскольку репроцессия была «успешной», я не понимал, что порядок координат ошибочен. –