# ECI to topocentric

Hey all!

I am working on an IOD project and I am currently writing my own estimation code for radar coordinates (range, azimuth, elevation and rangerate). I have defined a ECI, ECEF and topocentric frame and I propagate a satellite trajectory as reference. For the measurements I use the .getRange(), .getAzimuth(), .getElevation() and .getRangerate() methods. In my estimation code I need to calculate the jacobian, for this I want to use the eci state of the satellite and ground station (which I already have). So for range I would subtract the two vectors at an epoch and take the norm. For range this is possible because it does not really matter in what directions the axes are pointing for the range to be correct. However, for the other coordinates, I need the know the state according to the east, north, up frame and I am struggling to do so.

In the ideal situation, I would have the following,
state_sat = …
state_gs = …
dx = state_sat - state_gs

dx_topoframe = Rotation * dx

How do I get this rotation/dx_topoframe? I’ve tried the following,

Use transform PV

1. state = inertialFrame.getTransformTo(topoframe, date).transformPVCoordinates(state_sat)

Use static transform
2. eci2topo = inertialFrame.getTransformTo(topoframe, date)
eci2topo_static = eci2topo.toStaticTransform()
topoState = eci2topo_static.transformPosition(dx)

Use rotation matrix
3. rot = eci2topo.getRotation()
topoState = rot.applyTo(state_sat)

None of these give the right results in my estimator. If only gotten the right result using dx

I hope my question is a bit clear, if not, let me know!

You should rather rely on the measurements generation feature provided by Orekit. It wil take into account the light time delay, the tropospheric effects and will provide derivatives too if you call `estimate` on the generated measurements.