var optimizedLength; (function(){ function noop(){}; var deg2rad = Math.PI / 180; var sum, lambda0, sinPhi0, cosPhi0; var length = { sphere: noop, point: function(lambda, phi) { lambda *= deg2rad, phi *= deg2rad; if(lambda0 === null) { lambda0 = lambda, sinPhi0 = Math.sin(phi), cosPhi0 = Math.cos(phi); } else { var sinPhi = Math.sin(phi), cosPhi = Math.cos(phi), delta = Math.abs(lambda - lambda0), cosDelta = Math.cos(delta), sinDelta = Math.sin(delta), t; sum += Math.atan2( Math.sqrt((t = cosPhi * sinDelta) * t + (t = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta) * t), sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta ); lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi; } }, lineStart: function(){ lambda0 = sinPhi0 = cosPhi0 = null; }, lineEnd: function(){ lambda0 = sinPhi0 = cosPhi0 = null; }, polygonStart: noop, polygonEnd: noop }; optimizedLength = function(object) { sum = 0; d3.geo.stream(object, length); return sum; } })();