Hi @bcazabonne,

I’m still working on those topics and I have some trouble to perform the opposite opération, ie :

`Azimuth, Elevation, Range, Date`

=> `Vector3D`

The problem is that I have an inversion between X and Y componants of the Vector3D. I think that there is a difference in Frames between Orekit and Hipparchus.

To illustrate the problem, I make this simple code :

from math import radians

from org.orekit.bodies import GeodeticPoint, OneAxisEllipsoid

from org.orekit.estimation.measurements import GroundStation

from org.orekit.frames import FramesFactory, TopocentricFrame

from org.orekit.orbits import KeplerianOrbit, PositionAngle

from org.orekit.utils import Constants, IERSConventions

from org.orekit.time import AbsoluteDate, TimeScalesFactory

from org.hipparchus.geometry.euclidean.threed import Vector3D

# Set inertial Frame

inertial = FramesFactory.getEME2000()

# Set groundstation Frame

ecef = FramesFactory.getITRF(IERSConventions.IERS_2010, False)

body = OneAxisEllipsoid(Constants.IERS2010_EARTH_EQUATORIAL_RADIUS,

Constants.IERS2010_EARTH_FLATTENING, ecef)

geodeticPoint = GeodeticPoint(radians(-1.15), radians(45.), 0.)

groundstation = GroundStation(TopocentricFrame(body, geodeticPoint, ‘radar’))

gsframe = groundstation.getBaseFrame()

# Set TimestampedPVCoordinates

alt = 1000e3

a = 6378e3 + alt # semi major axis in meters

e = 0.001 # eccentricity

i = radians(90) # inclination

w = radians(0) # perigee argument

Omega = radians(-130) # right ascension of ascending node

m = 0. # mean anomaly

duree = 3600. * 1 * 1 # duree de la trajectoire en s

dt = 5. # pas temporel en s

initialDate = AbsoluteDate(2020, 1, 1, 10, 0, 0.0, TimeScalesFactory.getUTC())

finalDate = initialDate.shiftedBy(duree)

initialOrbit = KeplerianOrbit(a, e, i, w, Omega, m, PositionAngle.MEAN, inertial, initialDate, Constants.IERS2010_EARTH_MU)

# Get Vector3D in groundstation frame

pvcoordinates = initialOrbit.getPVCoordinates()

vectECEF = pvcoordinates.getPosition()

vectENU = inertial.getTransformTo(gsframe, initialDate).transformPosition(vectECEF)

print(vectENU, vectENU.getNorm())

az = gsframe.getAzimuth(vectECEF, inertial, initialDate)

el = gsframe.getElevation(vectECEF, inertial, initialDate)

dist = gsframe.getRange(vectECEF, inertial, initialDate)

newVectENU = Vector3D(dist, Vector3D(az, el))

print(newVectENU, newVectENU.getNorm())

And here is the result that I obtain :

{-6 694 945,61910018; 52 025,3761510483; -3 295 762,78818715} 7462376.018298159

{52 025,3761510504; -6 694 945,61910018; -3 295 762,78818715} 7462376.018298159

Do you know what’s going on ? Thank you in advance for your answer.

AD