I have been a user of ArcGIS Desktop for many years and this function is easily done within ArcMap using the 'Calculate Grid Convergence Angle (Cartography)' tool.

I am wondering if there is a similar function in QGIS.

A little explanation of my process.

I deal with directional surveys for wells on a constant basis. Typically these are reported to the state in their local State Plane coordinate system and as Grid North.

Since i work in a project that contains multiple states however, converting them to True North instead of their typical Grid North (say New Mexico East NAD83 and Texas Central NAD27) is how i keep them accurate in a NAD27 BLM 13N project. The geologics software I use does the proper rotation for them as long as they are true north.

What I have typically done is create a fishnet in ArcGIS and kept the point file that is a byproduct of that.

In that point file i create fields to store the X,Y, and convergence angle for each point, for their local CRS. I then translate each local CRS (keeping the convergence angle of the original CRS) into the combined NAD27 BLM 13N project and can make a grid out of those points for each states wells. I can then sample the wells to a grid and subtract the convergence angle from the azimuth of the wells directional surveys to create True North surveys.

In QGIS I have found how to do the fishnet portion (much easier) however I cant seem to find the same functionality for storing the convergence angle in a field of that shapefile. I have looked in the field calculator under geometry and typing in various searches. I have discovered how to calculate the X and Ys just cant find that darn angle. For NME NAD83 SPCS convergence angles should be around -.7 to +.6 degrees and Texas Central (since Texas went horizontal with its SPCS's) is around -3.5 in the East to +3.25 or so in the West.


1 Answer 1


Having the same question and not seeing an answer here, I came up with the following alternative, as a QGIS expression (so e.g. can be a virtual field added to a point layer):

with_variable('LL', transform( $geometry,@layer_crs,'EPSG:4326'),

It does a brute force calculation, converting the geometry to longitude,latitude (LL), projecting a point 0.001 degrees latitude (so about 100m) due true north (displacedLL), and then finding the bearing in the original CRS to this displaced point. Finally, it converts from radians to degrees (optional of course).

To match the sign convention in the formula in How to calculate grid convergence (True North to Grid North)?, you should multiply by -1.

That formula, by the way, is less computationally intensive but assumes the ellipsoid is spherical. This is insignificant for most convergence calculation purposes. More importantly, applying that formula requires knowing what the central meridian is, i.e. which UTM/MTM zone your coordinate system is in. In contrast, the expression above pushes that all down to the proj engine under QGIS' hood, and figures out what projection the layer is in automatically.

  • Just want to say that I was trying to figure how to do exactly what you did here and this saved me a good couple hours of fiddling around building the expression. I wanted the convergence angle for a point that overlaps in the next zone over, but in the layer's "wrong" zone. NRCAN's mag declination calculator would force the angle according to the other zone but this goes around the issue completely. A+
    – Gabriel
    May 3, 2021 at 2:34

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.