Модуль Pymap3d , https://scivision.github.io/pymap3d/ предоставляет преобразования координат и функции геодезии, включая ENU <-> (long, lat, h).
Вот несколько примеров.
import pymap3d
# create an ellipsoid object
ell_clrk66 = pymap3d.Ellipsoid('clrk66')
# print ellipsoid's properties
ell_clrk66.a, ell_clrk66.b, ell_clrk66.f
# output
(6378206.4, 6356583.8, 0.0033900753039287634)
Предположим, что у нас есть система координат ENU, определенная с ее началом в (lat0, lon0, h0 = 5.0, 48.0, 10.0).И пусть точка (точка_1) с координатой ENU: (0,0,0) будет контрольной точкой, эта point_1
будет использоваться для преобразования, как прямого, так и обратного.
lat0, lon0, h0 = 5.0, 48.0, 10.0 # origin of ENU, (h is height above ellipsoid)
e1, n1, u1 = 0.0, 0.0, 0.0 # ENU coordinates of test point, `point_1`
# From ENU to geodetic computation
lat1, lon1, h1 = pymap3d.enu2geodetic(e1, n1, u1, \
lat0, lon0, h0, \
ell=ell_clrk66, deg=True) # use clark66 ellisoid
print(lat1, lon1, h1)
# display: (5.000000000000001, 48.0, 10.000000000097717)
Теперь,используя полученные значения (lat1, lon1, h1), мы вычисляем преобразование геодезической в ENU.
e2, n2, u2 = pymap3d.geodetic2enu(lat1, lon1, h1, \
lat0, lon0, h0, \
ell=ell_clrk66, deg=True)
print(e2, n2, u2)
Выходные данные должны соответствовать (e1, n1, u1).Небольшие расхождения являются нормальными для такого рода вычислений.
В приведенных выше вычислениях параметр ell
имеет WGS84
эллипсоид в качестве значения по умолчанию.