Place on Earth where satellite is transiting in front of Sun

I’m using a TLEPropagator to track satellite events. At a certain time I have PVCoordinates of satellite and Sun and a topocentric frame relative to observer location: I’d like to calculate latitude e longitude of place on Earth where in that moment satellite is transiting in front of Sun center. Can anyone help me?

You don’t need a TopocentricFrame as this would imply you already know the result.
I would suggest something along these lines (beware, it is written using Orekit 11 API, as this version will be published very soon now).

    final TimeScale        utc   = TimeScalesFactory.getUTC();
    final CelestialBody    sun   = CelestialBodyFactory.getSun();
    final Frame            itrf  = FramesFactory.getITRF(IERSConventions.IERS_2010, true);
    final OneAxisEllipsoid earth = new OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS,
    propagator.getMultiplexer().add(60.0, state -> {
        AbsoluteDate  date       = state.getDate();
        Frame         frame      = state.getFrame();
        Vector3D      pSun       = sun.getPVCoordinates(date, frame).getPosition();
        Vector3D      pSat       = state.getPVCoordinates(frame).getPosition();
        Line          sunSatLine = new Line(pSun, pSat, 1.0e-9);
        GeodeticPoint gp         = earth.getIntersectionPoint(sunSatLine, pSat, frame, date);
        System.out.format(Locale.US, "%s %11.6f %11.6f%n",
                          gp.getLatitude(), gp.getLongitude());

Note that the answer above does not take into account topography, so it may be way off on mountains regions. It assumes you compute that point at altitude zero with respect to the ellipsoid.

If you need a more accurate computation taking into account topography, you have to use the sister library Rugged that computes intersections taking into account a Digital Elevation Model. Computation is simple, but loading the Digital Elevation Model may involve a lot of work.

Hi Luc,
thank for your answer, I haven’t had a chance to try your solution before, sorry. It works!
Thanks again!