Recently I needed to convert a large amount of data between UK Easting / Northing coordinates and Latitude / Longitude. There are web services available that support this conversion but they only permit a few hundred requests / hour, which means it would take weeks to process my quantity of data.
Here is the Python script I developed to perform this conversion quickly with the pyproj module:
from pyproj import Proj, transform
v84 = Proj(proj="latlong",towgs84="0,0,0",ellps="WGS84")
v36 = Proj(proj="latlong", k=0.9996012717, ellps="airy",
towgs84="446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894")
vgrid = Proj(init="world:bng")
def ENtoLL84(easting, northing):
"""Returns (longitude, latitude) tuple
"""
vlon36, vlat36 = vgrid(easting, northing, inverse=True)
return transform(v36, v84, vlon36, vlat36)
def LL84toEN(longitude, latitude):
"""Returns (easting, northing) tuple
"""
vlon36, vlat36 = transform(v84, v36, longitude, latitude)
return vgrid(vlon36, vlat36)
if __name__ == '__main__':
# outputs (-1.839032626389436, 57.558101915938444)
print ENtoLL84(409731, 852012)
Source code is available on bitbucket.