QGIS - Rotating all symbols to face a single point

I am making the following assumptions:

  1. You are using a projected coordinate system
  2. Your data is in two separate layers called cities and planes

This solution should also extend to the case of multiple cities

Onto the solution:

  1. Add a unique id field to planes called plane_id
  2. Add a unique id field to cities called city_id (it will just be one value in OP's case, but if you have multiple cities then this solution will extend to that case as well)
  3. Add a field to planes called city_id and set it equal to each plane's corresponding city's city_id value from cities (in OP's case, this will just be a single value)
  4. In the Toolbox, run Join by lines (hub lines), naming the output spokes with the following inputs:
    • Hub layer: cities
    • Hub id field: city_id
    • Spoke layer: planes
    • Spoke id field: city_id (This is actually where you determine to which hub each spoke will be connected to, not the unique id field of each spoke)
  5. Add a real/float/double field to spokes called angle and set it equal to angle_at_vertex(geometry:=$geometry,vertex:=0) (Source)
  6. Join spokes to planes using the field plane_id for both layers
  7. (Optional) Save planes as a new layer if you want to preserve the join
  8. Set the rotation angle of the planes symbol to the angle field which was just joined into plane (see pic)

enter image description here


enter image description here

A one-step scenario :

you add a virtual field in your airports table using the following expression :

angle_at_vertex( make_line( centroid($geometry), centroid( geometry( get_feature( 'destinations', 'name', 'PARIS')))), 0)

And you use that angle value ("angle") as data-defined rotation as mentionned by @wfgeo

I assume your "PARIS" point layer is called 'destinations' and has a 'name' attribute.