Is there any way to calculate the azimuth of two points in the QGIS Field Calculator? The coordinates are stored in an attribute table.

x1 | y1 | x2 | y2

3 Answers 3


New versions of QGIS ship with an azimuth function out of the box:

enter image description here

  • 4
    This works great. A tip: For using this function with a line, you can supply 'start_point($geometry)' and 'end_point($geometry)' as point_a and point_b Apr 3, 2018 at 6:11

You can use function editor tab in the field calculator and make your azimuth function like this:

from qgis.core import *
from qgis.gui import *    
@qgsfunction(args="auto", group='Custom')
def azimuth(x1,y1,x2,y2,feature,parent):
    p1 = QgsPoint(x1,y1)
    p2 = QgsPoint(x2,y2)
    a = p1.azimuth(p2)
    if a < 0:
        a += 360
    return a

Once you run/save it (and just to make sure restart the calculator) you should be able to use this function in the expression tab either by typing it or selecting from Functions list under custom as:

azimuth(x1,y1,x2,y2) #or variation azimuth("x1","y1","x2","y2")

All credit for this goes to Anita Graser and her How to create illuminated contours, Tanaka-style.


In your original question, you have points stored as X1, Y1 and X2, Y2. However, you can also automatically calculate azimuth without requiring endpoints to lines using this function:

azimuth(start_point($geometry), end_point($geometry))

and if you would like to round it off, use:

format_number(azimuth(start_point($geometry), end_point($geometry)),3)

This is highly useful for multipart polyline files, without any requirement to calculate endpoints to lines (as was required in previous versions of QGIS, and in other 3D CAD software).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.