mproj
Version:
A JavaScript port of the Proj.4 cartographic projections library
69 lines (41 loc) • 2.97 kB
Markdown
This software is a JavaScript port of v4.9.3 of the [Proj.4](http://proj4.org/) map projection library. Although it was created to be used by [mapshaper](https://github.com/mbloch/mapshaper), all are welcome to use and improve it.
Why create another Proj.4 port, when there is already [proj4js](https://github.com/proj4js/proj4js)? Unlike proj4js, this port is a very literal translation to JavaScript, so staying up-to-date with future changes to Proj.4 should be relatively simple. Also, this software's output is more consistent with Proj.4's output.
* No support for datum transformations using grid files.
* About 1/5 of Proj.4's 130-odd projections have not been ported.
These are workalike versions of the `proj` and `cs2cs` programs from Proj.4.
To install the current versions system-wide, run `npm install -g mproj`.
The software can be used in either the Proj.4 style or the proj4js style.
```
var proj = require('mproj');
var obj = proj(<source definition>, <dest definition>);
var obj = proj(<dest definition>);
var xy = proj([<source definition>,] dest definition, <point>);
```
See the [proj4js.org website](http://proj4js.org/) for more detailed help.
```
var proj = require('mproj');
var P = proj.pj_init(<proj4 crs definition>);
var xy = proj.pj_fwd({lam: <longitude in radians>, phi: <latitude in radians>}, P);
var lp = proj.pj_inv({x: <easting in meters>, y: <northing in meters>}, P);
proj.pj_transform(<source crs>, <dest crs>, <x array>, <y array>[, <z array>]);
```
The x and y coordinates of unprojectable points are set to `Infinity`. Other errors cause an Error to be thrown containing an appropriate message.
mapshaper-proj uses the (old-fashioned) technique of concatenating source files and wrapping them in a function to create a module with a shared scope. This method allows for global variables that are invisible outside of the program, making porting from the original C much simpler than if we were to make each source file a separate module.
Running `build` creates a build containing all supported projections in the `dist/` directory.
Running `build merc,lcc,aea` creates a build containing only the listed projections. You can customize the comma-separated list to include only the projections that you want. Run `mproj -l` to see a list of all supported projections.