proj4
Version:
Proj4js is a JavaScript library to transform point coordinates from one coordinate system to another, including datum transformations.
67 lines (64 loc) • 1.42 kB
JavaScript
var nadInterBreakout = require("./nadInterBreakout");
module.exports = function(pin, ct) {
// force computation by decreasing by 1e-7 to be as closed as possible
// from computation under C:C++ by leveraging rounding problems ...
var t = {
x: (pin.x - 1e-7) / ct.del[0],
y: (pin.y - 1e-7) / ct.del[1]
};
var indx = {
x: Math.floor(t.x),
y: Math.floor(t.y)
};
var frct = {
x: t.x - 1 * indx.x,
y: t.y - 1 * indx.y
};
var val = {
x: Number.NaN,
y: Number.NaN
};
var temp = nadInterBreakout(indx, frct, 'x', 0, ct);
if (temp) {
indx = temp[0];
frct = temp[1];
}
else {
return val;
}
temp = nadInterBreakout(indx, frct, 'y', 1, ct);
if (temp) {
indx = temp[0];
frct = temp[1];
}
else {
return val;
}
var inx = (indx.y * ct.lim[0]) + indx.x;
var f00 = {
x: ct.cvs[inx][0],
y: ct.cvs[inx][1]
};
inx++;
var f10 = {
x: ct.cvs[inx][0],
y: ct.cvs[inx][1]
};
inx += ct.lim[0];
var f11 = {
x: ct.cvs[inx][0],
y: ct.cvs[inx][1]
};
inx--;
var f01 = {
x: ct.cvs[inx][0],
y: ct.cvs[inx][1]
};
var m11 = frct.x * frct.y,
m10 = frct.x * (1 - frct.y),
m00 = (1 - frct.x) * (1 - frct.y),
m01 = (1 - frct.x) * frct.y;
val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x);
val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y);
return val;
};