Before I wade into writing my own function, is anybody able to confirm whether MMA has an inbuilt method for converting longitude and latitude geographic coordinates (as used to specify the position of a point on the earth's surface in the GeoPosition function) to British National Grid coordinates (and visa versa)?


1 Answer 1


You need the datum "OGB7" and the projection

proj = {"TransverseMercator", "Centering" -> {49., -2.}, "GridOrigin" -> {400000, -100000}, "CentralScaleFactor" -> 0.9996012717, "ReferenceModel" -> "OGB7"}

If you start with a position

p = GeoPosition[{lat, lon}]

then you need (this performs a change of datum and a projection simultaneously):

GeoGridPosition[p, proj, "OG7B"]

Let us separate the two steps in this example:

In[]:= bigben = GeoPosition[Entity["Building", "ElizabethTower::4brf8"]]
Out[]= GeoPosition[{51.5006, -0.124611}]

Those {lat, lon} are in the "ITRF00" datum, which is nearly identical to "WGS84". We first convert to "OGB7" with GeoPosition:

In[]:= GeoPosition[bigben, "OGB7"]
Out[]= GeoPosition[{51.5001, -0.123018}, "OGB7"]

Now we can project, obtaining the coordinates you need:

In[]:= GeoGridPosition[%, proj]
Out[]= GeoGridPosition[{530268., 179630.}, {"TransverseMercator", "Centering" -> {49., -2.}, "CentralScaleFactor" -> 0.999601, "GridOrigin" -> {400000, -100000}, "ReferenceModel" -> "OGB7"}, "OGB7"]

You can go back with GeoPosition:

In[]:= GeoPosition[%]
Out[]= GeoPosition[{51.5001, -0.123018}, "OGB7"]

But that is again in the "OGB7" datum. We can get the original {lat, lon} with

In[]:= GeoPosition[%, "ITRF00"]
Out[]= GeoPosition[{51.5006, -0.124611}, "ITRF00"]
  • $\begingroup$ Thanks Jose. I worked out how to do this a while back and now have a couple of simple functions that implement the transformation system both ways. All the best, Ian $\endgroup$
    – Ian
    Commented Nov 18, 2017 at 8:50

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.