# How to project satellite on earth ground

Hi, i want to project a LEO satellite on earth ground, and i use the code below, is this the right way?

``````Frame frame = FramesFactory.getITRF(IERSConventions.IERS_2010, true);
OneAxisEllipsoid earth = new OneAxisEllipsoid(WGS84_EARTH_EQUATORIAL_RADIUS, WGS84_EARTH_FLATTENING, frame);

TLEPropagator propagator = TLEPropagator.selectExtrapolator(tle);
AbsoluteDate target = new AbsoluteDate(now, TimeScalesFactory.getUTC());
SpacecraftState state = propagator.propagate(target);
Vector3D satPoint = state.getPVCoordinates().getPosition();

// point at center of Field Of View
final Transform scToInert = state.toTransform().getInverse();
GeodeticPoint gpFOV = earth.getIntersectionPoint(
new Line(satPoint, scToInert.transformPosition(Vector3D.PLUS_K), 1.0e-6),
satPoint,
state.getFrame(), state.getDate());
``````

No, this method uses the current spacecraft attitude to compute the direction of the Z axis. Since you just used `TLEPropagator.selectExtrapolator`, you get the default attitude law, which for TLE is inertially oriented along the TEME frame. This means the Z axis is roughly normal to equator.

This could work if you call `propagator.setAttitudeProvider` with a more appropriate attitude law, but it would be cumbersome and inefficient. There is a better way: directly call `earth.transform(satPoint, state.getFrame())`. You will get the latitude and longitude right, and as a bonus you will also get the altitude above ground, with a guarantee that the satellite to ground direction is exactly normal to Earth surface at sub-satellite point.

Thank you very much!