Constructing a Complex Field of View


I am a new user of Orekit, interacting with it through the python wrapper. I would like to construct a field of view that is not one of the standard polygonal / elliptical types. Initially I would like to construct a field of view with semicircular shape, with more complex shapes in the future. Is there a standard way to construct these more complex field of views?


Yes, you could theoretically do that, but it is not straightforward.
You have to implement theFieldOfView interface, and this most probably means doing that
from the Java language. There are four methods to implements, and for field of view with a known and precise shape, this could probably be done specifically. Unfortunately, this would imply doing this again for each new shape.

An alternative is to use PolygonalFieldOfView which takes a SphericalPolygonsSet as its construction parameter, as SphericalPolygonsSet is a generic way to represent very complex areas on the sphere, including areas that are not path connected (for example a single shape considered to be formed by several separated spot beams), or shapes with holes in them (or even shapes with holes which themselves contains other shapes, which have smaller holes, which again contain even smaller shapes, which…). Building a SphericalPolygonsSet may be done with some simple steps. For example in your example, you can first build an approximation of the circular part by building a base shape with a center, a radius and a number of vertices, then build another base shape that would be an hemisphere properly located with respect to your circular one and finish by defining the final shape as the intersection of the two base ones: the hemisphere will cut the circle in two and you will get your semi-circular shape. Note however, that the first base shape in this construction will be a regular polygon, not a true circle, but if you use something like 24 sides, it will be already a good approximation. You may choose an arbitrary number of sides, but I fear that if you increase it too far, like for example 360 vertices, computations associated with your shapes will consume too much time. For other more complex shapes, you can use similar features, building up from basic shapes using set operations (union, intersection, difference, symmetric differences, taking the complement).

Thank you very much for the reply Luc! That was very helpful, and I will look into using the SphericalPolygonsSet.