FootprintOverlapDetector not detecting

Hi,
I’ve created a detector like so:
It doesn’t go in the handler, so I’m wondering if something is wrong here.

I simplified it so it has 4 points and I put a high number on the sampling step to no avail

Frame   earthFrame = FramesFactory.getITRF(IERSConventions.IERS_2010, true);
OneAxisEllipsoid  earth = new OneAxisEllipsoid(
              WGS84_EARTH_EQUATORIAL_RADIUS,
              WGS84_EARTH_FLATTENING,
              earthFrame);
Frame satelliteFrame = FramesFactory.getGCRF();
AttitudeProvider pointing = new NadirPointing(satelliteFrame, earth);
SimpleDateFormat sdf =
        new SimpleDateFormat("dd-MM-yyyy HH:mm:ss.SSS Z");
Date dateSatelliteInitialDate = sdf.parse("01-01-2021 00:00:00.000 UTC");
AbsoluteDate satelliteInitialDate =
        new AbsoluteDate(dateSatelliteInitialDate, TimeScalesFactory.getUTC());

Orbit initialOrbit = new KeplerianOrbit(
        EIGEN5C_EARTH_EQUATORIAL_RADIUS + 0.5 * (800e3), // 800e3 = 2*perigee
        (400.1e3-400e3)/(400.1e3+400e3)), // (apogee - perigee) / (apogee + perigee)
        FastMath.toRadians(90),
        FastMath.toRadians(0)
        FastMath.toRadians(0),
        FastMath.toRadians(0),
        PositionAngle.TRUE,
        satelliteFrame,
        satelliteInitialDate,
        EIGEN5C_EARTH_MU
    );

Propagator propagator = new EcksteinHechlerPropagator(
        initialOrbit,
        pointing,
        25.0,
        EIGEN5C_EARTH_EQUATORIAL_RADIUS,
        EIGEN5C_EARTH_MU,
        EIGEN5C_EARTH_C20,
        EIGEN5C_EARTH_C30,
        EIGEN5C_EARTH_C40,
        EIGEN5C_EARTH_C50,
        EIGEN5C_EARTH_C60
    );

// this values are computed before
DoubleDihedraFieldOfView imagerFieldOfView = new DoubleDihedraFieldOfView(Vector3D.MINUS_K, Vector3D.PLUS_I, 0.02742857132361516, Vector3D.PLUS_J, 0.03428571415451895, 0);
double sampling_step = 100000. ;
double hyperplaneThickness = 1.0e-10;

GeodeticPoint[] geodeticPointArray = new GeodeticPoint[4];
geodeticPointArray[0] = new GeodeticPoint(FastMath.toRadians(71.7069d), FastMath.toRadians(2.6043d), 500);
geodeticPointArray[1] = new GeodeticPoint(FastMath.toRadians(1.5240d), FastMath.toRadians(2.6043d), 500);
geodeticPointArray[2] = new GeodeticPoint(FastMath.toRadians(1.5240d), FastMath.toRadians(125.3188d), 500);
geodeticPointArray[3] = new GeodeticPoint(FastMath.toRadians(71.7069d), FastMath.toRadians(125.3188d), 500);
SphericalPolygonsSet targetLand = EllipsoidTessellator.buildSimpleZone(hyperplaneThickness, geodeticPointArray);

FootprintOverlapDetector targetLandDetector = new FootprintOverlapDetector(imagerFieldOfView , earth, targetLand, sampling_step).withHandler((s, detector, increasing) -> {
      targetLandDetectorInfo.put(s.getDate(),  (increasing ? "starts " : "ends"));
      return Action.CONTINUE;
    });
propagator.addEventDetector(targetLandDetector);

Hi,

You initialize the GeodeticPoint objects using degrees values. However, Orekit works with SI units. Could you convert the latitude and longitude values in radians?

Bryan

1 Like

Right, I didn’t see it needed radians, thank you.
I changed the latitudes and longitudes to radians (using FastMath.toRadians(x)).

So I guess we can rule out the creation but it’s still not detecting.

Just to be sure, do you call propagator.propagate(…) method?

Another question, how to you go from geodeticPointArray to targetLand?

I called it but before calling this methods…
My bad… thanks for the hint

I’ve edited the input so it makes sense for future reference.
Thank you for spending time to help me, both of you