Ground station visibility area

Dear all,
for a constellation design I am working on an animation of the ground tracks of the spacecrafts. Other than the ground tracks, I would also like to graphically represent the area on ground within which a satellite will be visible from a ground station (given lat/lon/alt and elevation angle minimum). Is there any easy way to implement this in a plot, as per this tutorial? examples/orekit_map.ipynb · master · Orekit Labs / Orekit Python Wrapper · GitLab

Thanks in advance.

What you need is slightly more involved as you do not want only the sub-satellite point but a complete visibility circle, and probably a moving one, and probably one for each satellite.
We do not currently have a tutorial for this, but it would be fun to do.
The basic idea would be that at each time step, we start by computing the sub-satellite point. By definition, this sub-satellite point sees the satellite with an elevation of π/2 (i.e. directly in the zenith direction). Then, looping with an azimuth from 0 to 2π around this point and going away from the sub-satellite point, we look for the decreasing value of elevation, until it reaches the limit we want (say 5° above horizon or anything the user would select). Then we store this point and we go to the next azimuth until we have finished the turn. This gives a loop of ground points, for this time and this satellite. Repeating this for all time steps and all satellites would allow to build the animation.

I am not sure if finding the point on ground given sub-satellite point, azimuth and limit elevation can be solved analytically taking Earth ellipticity into account or not. In any case, this will probably involve using Ellipsoid.getPlaneSection and solving the limit elevation problem in 2D before bringing it back to 3D.

Dear @luc ,
thank you for the kind answer as always.

What I am actually looking for is quite simpler than what you suggested: I do not need a continuous track on ground of the visibility per each satellite!
I want to just graphically show, for a given ground station (lat/lon/alt), what is the section of the planisphere at which I would start seeing the spacecrafts. Geometrically, I think would be represented by the intersection of a cone with vertex the GS and with an aperture of 5° in elevation, together with the “orbital sphere” centered at Earth’s center and having as radius the semi-major axis of all the spacecrafts (that are placed at the same altitude). Something along the lines of what is represented here: https://www.researchgate.net/figure/Visibility-region-of-Vienna-ground-station-for-elevation-angle-of-0-6_fig7_228474288

Should be simpler than what you have proposed, but I am still not capable of implementing it with Orekit.

Oh, I see. We do have that, look at VisibilityCircle. The program exists in the tutorials, but we seem to not have documented it…

Looking at how the tutorial works, it seems my idea of searching the limit point in one azimuth direction is in fact already available in TopocentricFrame as method computeLimitVisibilityPoint, and I am the one who implemented it back in September 2011 :wink:, except that the loop is performed around the ground station and the satellite is considered to be at a fixed altitude, but the idea is roughly similar.

Thanks @luc ,
using the computeLimitVisibilityPoint method and looping through 0/2*pi for the azimuth, I was able to easily implement what I needed!

1 Like