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