Yes, you can do coordinate reference system transformations in Javascript. (I know, I’m shocked also.) I found proj4js on GitHub, which is a port of an older project, PROJ.4. The proj4js library is very easy to use. All you need to do is find the specification strings at spatialrerefence.org of the two projections/datums you are interested in and you’re ready to go.
Installation
Assuming you’ve already installed node, installation is super easy:
$ node install proj4js -g
This will install proj4js
globally on your system. If you don’t want that, then leave off the -g
flag.
A Working Example
The only weird thing is that you need to pass a longitude first, and then latitude, but I’ve noticed this behavior in other GIS software. This makes sense when you think of Cartesian coordinates where the x-axis is specified first, and then the y-axis.
// import proj4js var proj4 = require("proj4") // define the projections var nad27 = "+proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs" var wgs84 = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" // define the coordinate var lat = 32.0 var lon = -102.6 // then you can pass the point as a list var result = proj4( wgs84, nad27, [ lon, lat ] ) var result = proj4( wgs84, nad27 ).forward( [ lon, lat ] ) // [ -102.6, 32.0019256199253 ] // or you can pass the point as an object var result = proj4( wgs84, nad27, { x:lon, y:lat } ) var result = proj4( wgs84, nad27 ).forward( { x:lon, y:lat } ) // { x: -102.6, // y: 32.0019256199253, // z: -2.7488031471148133 }