GIS: The math to convert from EPSG:3857 to WGS-84
During my latest project, I was given a shapefile and I was told to make a web GIS interface to handle it. I found a Node.js plugin to open the file and load the GeoJSON data onto a Google Map, but then I noticed something was odd: the coordinates were very big numbers, definitely not longitude/latitude pairs.
After installing a GIS software and a lot of googling I found out about the existence of many standards for coordinate values.
The shapefile they gave me was following the EPSG:3857 standard (also known as SR-ORG:6864) to save the points’ coordinates, but I needed the data to be WGS-84 (also known as EPSG:4326) in order to have valid longitude/latitude values. All of this without using a GIS software to convert them because everything needed to be web-based.
I studied a bit and found out after a while that there is a mathematical formula to convert the coordinates.
From here on, I will be referring to the longitude as (lambda) and to the latitude as
(phi), as I found out this to be the standard.
There is a constant used in both conversions, which I will be referring to as for bound, that equals to
20037508.34
. The interval represents the possible values of the coordinates in the EPSG:3857 (as you can read here).
The conversion goes as follows:
Don’t be scared by the sight of these equations, they’re actually pretty simple. Here it is a quick JavaScript implementation that cycles the features of a GeoJSON object and changes the coordinates:
You don’t even need to use GeoJSON to use this function. In fact, it is even simpler if you’re just using a nested array because you can leave behind all the GeoJSON’s nested objects structure and happily go on with your life.