(Using Blender 3.6.5 and Geometry Nodes)
NB: This answer is under work and has yet to be fully documented...
Objective
Build Bezier curves connecting pairs of points on a sphere, controlling mid-point height.
Approach
The GeometryNodes modifier is added to the object made of vertices put at the targetted airports position (named OtherAirports in the demo file).
1. Sphere properties and hub airport (named Schiphol in the demo file) position are recovered from objects specified through the Group Input node (label 7).
2. A single edge per targetted airport (label A) is build to connect it to the hub airport (label H).
3. The perpendicular bisector to those edges crossing the sphere centre is used to shift outward the mid-point. These points are collected as a point cloud.
4. Edges and apex points are combined in broken lines made of three points and two edges.
5. These pairs of segments are converted to Bezier curves, which handles are modified to tune the flightpath shape.
6. Control parameters are:
6.1. Height: Fraction of the circular arc connecting H to A used to shift the apex. A value of 0 puts apices on sphere.
6.2. HubAngle: Additional angle between the curve tangent and the edge connecting H to apex. Positive values increase "take-off" slope.
6.3. ApexWeight: Factor controlling the radius of curvature at apex. 0 is the default value. -1 makes a sharp angle. Positive values yield flatter curves.
6.4. AirportAngle: Additional angle between the curve tangent and the edge connecting apex to A. Positive values increase "landing" slope.
Process data
1. The centre of the sphere (labelled C) is computed as the middle of its bounding box.
2. The hub airport position (labelled H) is recovered with a Sample Index node set in Point domain. It is assumed that the hub is at Index 0. This procedure is robust if there is more than one vertex in the input object, and if the vertex is moved from the origin.
3. The sphere radius is computed as the distance between points C and H.
Build direct paths
Direct paths are segments connecting the targetted airports (labelled A) to the hub airport (labelled H).
1. Using an Instance on Points node, a single edge is put at every vertex A of the Airport mesh provided by the Group Input node. As the Mesh Line Start Location is (0,0,0), the position of the Index 1 vertex of an edge (labelled V1) is equal to the position of the associated point A. The Offset parameter is irrelevant, as the position of the Index 2 vertex (labelled V2) will be edited afterwards.
2. Through a Realize Instances node, instances are made independent edges.
3. The position of the vertex V2 of every edge is set equal to the position of point H, provided by the Group Input node.
4. Because it is downstream the Realize Instances node, the Set Position node modifies the Point domain. So the Index tested to define the Selection mask is a Point index, not an Instance index.
5. Through a Capture Attribute node set in Edge domain, the index of vertex V2 is recovered to be compared to the actual point Index. Its value is provided by an Edge Vertices node.
Compute apices
1. .
2. .
3. .
Build over paths
1. .
2. .
3. .
Build and adjust flight paths
1. .
2. .
3. .