Ошибка в вашем коде.
Во-первых, проблема PyProj, указанная в одном из других ответов, является реальной.Вам следует проверить файл epsg и убедиться, что он содержит строку
<2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <>
Обратите внимание на параметр towgs84
.
Ваша проблема с PyProj связана с неправильным использованием команды проецирования.
Если мы возьмем 47.9941214N, 7.8509671E и преобразовать в UTM , мы получим Зону 32, 414278 Восток, 5316286 Север.
Вы выполняете следующие операции PyProj:
p = pyproj.Proj(proj='utm', zone=32, ellps='WGS84')
>>> x,y = p(47.9941214, 7.8509671)
>>> print x,y
5159550.36822 1114087.43925
>>> print p(x,y,inverse=True)
(47.971558538495991, 7.8546573140162605)
Но, если мы обратимся к документации PyProj , мы увидим следующее:
Вызов экземпляра класса Proj с аргументами lon, lat преобразует lon / lat(в градусах) в x / y координаты проекции собственной карты (в метрах).
Попробуем снова запустить операции PyProj OP, но переключим порядок аргументов lon / lat:
p = pyproj.Proj(proj='utm', zone=32, ellps='WGS84')
>>> x,y = p(7.8509671, 47.9941214)
>>> print x,y
414278.16731 5316285.59492
>>> print p(x,y,inverse=True)
(7.850967099999812, 47.994121399999784)
Эта операция отлично (в значительной степени) переворачивается!
Чтобы ответить на первую часть вашего вопроса, если вы посмотрите в http://robotics.ai.uiuc.edu/~hyoon24/LatLongUTMconversion.py
определение UTMtoLL
, вы обнаружите следующее:
UTMtoLL(ReferenceEllipsoid, northing, easting, zone)
Пока вы используете UTMtoLL(23, leftUTM, topUTM, zone)
где leftUTM - это Easting, а topUTM - это Northing.
Таким образом, в случае вашего первого скрипта и PyProj вы использовали неправильный порядок аргументов.
Этохорошее напоминание всегда проверять свою работу дважды (или трижды), прежде чем предположить, что кто-то другой ошибается.Тем не менее, документация Python не самая лучшая , и документация PyProj в этом случае в лучшем случае загадочна.Хорошее сетевое объяснение этой команды и сопровождаемые примерами ее использования, вероятно, предотвратили бы беспокойство с вашей стороны.