Sonya Seyrios
Sonya Seyrios

Reputation: 93

Python astropy: convert velocities from ECEF to J2000 coordinate system

I've written a code to transform the coordinates from Earth fixed system to inertial frame using astropy:

from astropy import coordinates as coord
from astropy import units as u
from astropy.time import Time
from astropy import time

now = Time('2018-03-14 23:48:00')
# position of satellite in GCRS or J20000 ECI:
xyz=[-6340.40130292,3070.61774516,684.52263588]

cartrep = coord.CartesianRepresentation(*xyz, unit=u.km)
gcrs = coord.ITRS(cartrep, obstime=now)
itrs = gcrs.transform_to(coord.GCRS(obstime=now))
loc= coord.EarthLocation(*itrs.cartesian.xyz)
print(loc)

How to make transformation also for velocities?

Upvotes: 4

Views: 4453

Answers (1)

Matt Pitkin
Matt Pitkin

Reputation: 6407

I think you can do something like the following:

from astropy import coordinates as coord
from astropy import units as u
from astropy.time import Time

now = Time('2018-03-14 23:48:00')

xyz = [-6340.40130292, 3070.61774516, 684.52263588]
vxvyvz = [-10.90, 56.4, -74.6]

# put velocities into cartesian differential
cartdiff = coord.CartesianDifferential(*vxvyvz, unit='km/s')
cartrep = coord.CartesianRepresentation(*xyz, unit=u.km, differentials=cartdiff)

gcrs = coord.ITRS(cartrep, obstime=now)
itrs = gcrs.transform_to(coord.GCRS(obstime=now))

# print position
print(itrs.cartesian.xyz)

# print velocity
print(itrs.cartesian.differentials)

But, I'm not entirely sure it does what you require or not. Alternatively, in astropy v. 3.0.1 the ITRS class seems to be able to take velocity values, so you could use

now = Time('2018-03-14 23:48:00')
pos = [-6340.40130292, 3070.61774516, 684.52263588]*u.km
vel = [-10.90, 56.4, -74.6]*u.km/u.s

gcrs = coord.ITRS(x=pos[0], y=pos[1], z=pos[2], v_x=vel[0], v_y=vel[1], v_z=vel[2], representation_type='cartesian', differential_type='cartesian', obstime=now)
itrs = gcrs.transform_to(coord.GCRS(obstime=now))

# print position
print(itrs.cartesian.xyz)

# print velocity
print(itrs.cartesian.differentials)

Both versions give the same answer, but the second one is a bit neater.

Upvotes: 7

Related Questions