Hi all! I am using Orekit to obtain a satellite footprint. I don’t get the result I expected (point of view oriented from satellite to Earth cemter). I share current code (unfinished) and obtained results. I don’t know how to resume to solve the problem. Could someone help me please? Thanks. Regards.
AbsoluteDate target = UtilesTiempo.zonedDateTimeToAbsoluteDate(zonedDateTime);
SpacecraftState state = satelite.getTlePropagator().propagate(target);
//////////////
// Get the reference frame of the SpacecraftState (the inertial frame where the orbit is computed)
Frame refFrame = state.getFrame();
// Get the position of the SpacecraftState in ref frame
Vector3D satPosInRefFrame = state.getPVCoordinates().getPosition();
// Get the attitude of the spacecraft (a rotation from reference frame to "satellite" frame)
Attitude attitude = state.getAttitude();
Frame earthFrame = FramesFactory.getITRF(IERSConventions.IERS_2010, true);
BodyShape earth = new OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS,
Constants.WGS84_EARTH_FLATTENING, earthFrame);
Vector3D satPoint = state.getPVCoordinates().getPosition();
GeodeticPoint geoPoint = earth.transform(satPoint, state.getFrame(), state.getDate());
// Get the underlying topocentric frame of the geodetic point
TopocentricFrame topoFrame = new TopocentricFrame(earth, geoPoint, "topoFrame");
// Get the geodetic point position in reference frame
Vector3D geoPointInRefFrame = topoFrame.getPVCoordinates(target, refFrame).getPosition();
// Let O be the center of frame, S the satellite and P the geodetic point
// Compute satellite to geodetic point vector: SP = - OS + OP
Vector3D sat2GeoPoint = geoPointInRefFrame.subtract(satPosInRefFrame);
// Normalize the vector and rotate it using the attitude
Vector3D geoPointDirectionInSatFrame = attitude.getRotation().applyTo(sat2GeoPoint.normalize());
GeodeticPoint geoPoint2 = earth.transform(geoPointDirectionInSatFrame, state.getFrame(), state.getDate());
///////////////////////////
Transform inertToBody = state.getFrame().getTransformTo(earthFrame, state.getDate());
Transform fovToBody = new Transform(state.getDate(),
state.toTransform().getInverse(),
inertToBody);
CircularFieldOfView cfov =
new CircularFieldOfView(Vector3D.PLUS_K, FastMath.toRadians(50.), 0.);
////////////////////////////
List<List<GeodeticPoint>> footprint =
cfov.getFootprint(fovToBody, (OneAxisEllipsoid) earth, 0.1);
List<GeodeticPoint> list = footprint.get(0);
for (GeodeticPoint point : list) {
System.out.println("[" + FastMath.toDegrees(point.getLongitude()) + "," +
FastMath.toDegrees(point.getLatitude()) + "],");
}
}
Result:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [-141.5172411592235,-57.91836266046175]
},
"properties": {
"name": "satellite"
}
},
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[-132.41358244563696,-55.906567564033715],
[-131.65484313535885,-55.22380029464376],
[-130.8549061727942,-54.3956117347211],
[-129.9915823584691,-53.3691807010093],
[-129.01842735610143,-52.05111697237609],
[-127.81927852526634,-50.242087364261636],
[-125.96181400270878,-47.30007203608624],
[-122.55694955723501,-41.28262367418792],
[-124.21970424711513,-40.6050599765803],
[-125.92477249412549,-39.98191919030188],
[-127.67172402724017,-39.416157301912165],
[-129.45909844500798,-38.911179495135926],
[-131.28435547042312,-38.47063897949086],
[-133.1438627473417,-38.09822260355926],
[-135.03293113869896,-37.797429454990194],
[-136.9459046118438,-37.571353218292224],
[-138.87630710236186,-37.42248249228903],
[-140.81704272761326,-37.352534804664124],
[-142.76063927275874,-37.36233915376196],
[-144.699519155996,-37.451778450069995],
[-146.6262782482441,-37.61979768118711],
[-148.53395180033442,-37.86447696433772],
[-150.41624856654187,-38.183162151833024],
[-152.2677386018745,-38.57264054649864],
[-154.08398621899042,-39.029346432772726],
[-155.86162603507546,-39.54958085212053],
[-157.59838580223067,-40.12973211559114],
[-159.29306399120077,-40.76648732945837],
[-160.945472498609,-41.457029941638424],
[-156.5562485101539,-48.21888557988871],
[-154.95331450274594,-50.75152331715437],
[-153.8285558828559,-52.40970391103288],
[-152.88909904121124,-53.643688401920954],
[-152.04435051587444,-54.61489576537794],
[-151.25606601733932,-55.403434736924616],
[-150.50539582182412,-56.05609979639917],
[-149.78204796894502,-56.60307822759021],
[-149.07991369014408,-57.06517387856565],
[-148.39506696237268,-57.457400312088616],
[-147.72477162185922,-57.79095528379086],
[-147.06696016843975,-58.074390017827334],
[-146.41994925771522,-58.31434292976934],
[-145.78228003803088,-58.51602141384927],
[-145.1526267480152,-58.683529569754434],
[-144.52974359626904,-58.82009711202853],
[-143.9124334794133,-58.92824213389291],
[-143.29952928249318,-59.0098877851892],
[-142.68988245160725,-59.066445527023355],
[-142.0823557472984,-59.09887308011614],
[-141.47581835076352,-59.10771224836719],
[-140.86914220930478,-59.093109786558365],
[-140.26119888840623,-59.05482298708047],
[-139.65085635544497,-58.99221042512437],
[-139.03697509870827,-58.904207132309054],
[-138.41840277912095,-58.789282189215804],
[-137.79396616256017,-58.64537513390759],
[-137.16245825676393,-58.469805389557216],
[-136.52261712639773,-58.25914566224108],
[-135.8730903083501,-58.00904515921027],
[-135.21237418883953,-57.71398008122568],
[-134.53870933569982,-57.36689435933945],
[-133.8498968699856,-56.958667357747984],
[-133.14296930046936,-56.47729496390105]
]
},
"properties": {
"prop0": "value0",
"prop1": 0.0
}
},
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[100.0, 0.0],
[101.0, 0.0],
[101.0, 1.0],
[100.0, 1.0],
[100.0, 0.0]
]
]
},
"properties": {
"prop0": "value0",
"prop1": {
"this": "that"
}
}
}
]
}