var proj = require('./Proj');
|
var transform = require('./transform');
|
var wgs84 = proj('WGS84');
|
|
function transformer(from, to, coords) {
|
var transformedArray;
|
if (Array.isArray(coords)) {
|
transformedArray = transform(from, to, coords);
|
if (coords.length === 3) {
|
return [transformedArray.x, transformedArray.y, transformedArray.z];
|
}
|
else {
|
return [transformedArray.x, transformedArray.y];
|
}
|
}
|
else {
|
return transform(from, to, coords);
|
}
|
}
|
|
function checkProj(item) {
|
if (item instanceof proj) {
|
return item;
|
}
|
if (item.oProj) {
|
return item.oProj;
|
}
|
return proj(item);
|
}
|
function proj4(fromProj, toProj, coord) {
|
fromProj = checkProj(fromProj);
|
var single = false;
|
var obj;
|
if (typeof toProj === 'undefined') {
|
toProj = fromProj;
|
fromProj = wgs84;
|
single = true;
|
}
|
else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {
|
coord = toProj;
|
toProj = fromProj;
|
fromProj = wgs84;
|
single = true;
|
}
|
toProj = checkProj(toProj);
|
if (coord) {
|
return transformer(fromProj, toProj, coord);
|
}
|
else {
|
obj = {
|
forward: function(coords) {
|
return transformer(fromProj, toProj, coords);
|
},
|
inverse: function(coords) {
|
return transformer(toProj, fromProj, coords);
|
}
|
};
|
if (single) {
|
obj.oProj = toProj;
|
}
|
return obj;
|
}
|
}
|
module.exports = proj4;
|