394 lines
12 KiB
JavaScript
394 lines
12 KiB
JavaScript
goog.provide('ol.test.Ellipsoid');
|
|
|
|
|
|
describe('ol.Ellipsoid', function() {
|
|
|
|
var expected = [
|
|
{
|
|
c1: new ol.Coordinate(0, 0),
|
|
c2: new ol.Coordinate(0, 0),
|
|
vincentyFinalBearing: 0,
|
|
vincentyInitialBearing: 0,
|
|
vincentyDistance: 0
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(0, 0),
|
|
c2: new ol.Coordinate(45, 45),
|
|
vincentyFinalBearing: 54.890773827979565,
|
|
vincentyInitialBearing: 35.41005890511814,
|
|
vincentyDistance: 6662472.718217184
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(0, 0),
|
|
c2: new ol.Coordinate(45, -45),
|
|
vincentyFinalBearing: 125.10922617202044,
|
|
vincentyInitialBearing: 144.58994109488185,
|
|
vincentyDistance: 6662472.718217184
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(0, 0),
|
|
c2: new ol.Coordinate(-45, -45),
|
|
vincentyFinalBearing: -125.10922617202044,
|
|
vincentyInitialBearing: -144.58994109488185,
|
|
vincentyDistance: 6662472.718217184
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(0, 0),
|
|
c2: new ol.Coordinate(-45, 45),
|
|
vincentyFinalBearing: -54.890773827979565,
|
|
vincentyInitialBearing: -35.41005890511814,
|
|
vincentyDistance: 6662472.718217184
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(0, 0),
|
|
c2: new ol.Coordinate(180, 90),
|
|
vincentyFinalBearing: 180,
|
|
vincentyInitialBearing: 4.296211503097554e-31,
|
|
vincentyDistance: 10001965.729311794
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(0, 0),
|
|
c2: new ol.Coordinate(180, -90),
|
|
vincentyFinalBearing: 7.0164775638926606e-15,
|
|
vincentyInitialBearing: 180,
|
|
vincentyDistance: 10001965.729311794
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(0, 0),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: -180,
|
|
vincentyInitialBearing: -4.296211503097554e-31,
|
|
vincentyDistance: 10001965.729311794
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(0, 0),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: -180,
|
|
vincentyInitialBearing: -4.296211503097554e-31,
|
|
vincentyDistance: 10001965.729311794
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(45, 45),
|
|
c2: new ol.Coordinate(45, 45),
|
|
vincentyFinalBearing: 0,
|
|
vincentyInitialBearing: 0,
|
|
vincentyDistance: 0
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(45, 45),
|
|
c2: new ol.Coordinate(45, -45),
|
|
vincentyFinalBearing: 180,
|
|
vincentyInitialBearing: 180,
|
|
vincentyDistance: 9969888.755957305
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(45, 45),
|
|
c2: new ol.Coordinate(-45, -45),
|
|
vincentyFinalBearing: -125.10922617202044,
|
|
vincentyInitialBearing: -125.10922617202044,
|
|
vincentyDistance: 13324945.436434371
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(45, 45),
|
|
c2: new ol.Coordinate(-45, 45),
|
|
vincentyFinalBearing: -125.27390277185786,
|
|
vincentyInitialBearing: -54.726097228142166,
|
|
vincentyDistance: 6690232.932559058
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(45, 45),
|
|
c2: new ol.Coordinate(180, 90),
|
|
vincentyFinalBearing: 135,
|
|
vincentyInitialBearing: 3.5023624896823797e-15,
|
|
vincentyDistance: 5017021.35133314
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(45, 45),
|
|
c2: new ol.Coordinate(180, -90),
|
|
vincentyFinalBearing: 45.00000000000001,
|
|
vincentyInitialBearing: 180,
|
|
vincentyDistance: 14986910.107290443
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(45, 45),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: 135.00000000000003,
|
|
vincentyInitialBearing: 3.5023624896823793e-15,
|
|
vincentyDistance: 5017021.35133314
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(45, 45),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: 135.00000000000003,
|
|
vincentyInitialBearing: 3.5023624896823793e-15,
|
|
vincentyDistance: 5017021.35133314
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(45, -45),
|
|
c2: new ol.Coordinate(45, -45),
|
|
vincentyFinalBearing: 0,
|
|
vincentyInitialBearing: 0,
|
|
vincentyDistance: 0
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(45, -45),
|
|
c2: new ol.Coordinate(-45, -45),
|
|
vincentyFinalBearing: -54.726097228142166,
|
|
vincentyInitialBearing: -125.27390277185786,
|
|
vincentyDistance: 6690232.932559058
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(45, -45),
|
|
c2: new ol.Coordinate(-45, 45),
|
|
vincentyFinalBearing: -54.890773827979565,
|
|
vincentyInitialBearing: -54.890773827979565,
|
|
vincentyDistance: 13324945.436434371
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(45, -45),
|
|
c2: new ol.Coordinate(180, 90),
|
|
vincentyFinalBearing: 135,
|
|
vincentyInitialBearing: 3.5023624896823797e-15,
|
|
vincentyDistance: 14986910.107290443
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(45, -45),
|
|
c2: new ol.Coordinate(180, -90),
|
|
vincentyFinalBearing: 45.00000000000001,
|
|
vincentyInitialBearing: 180,
|
|
vincentyDistance: 5017021.35133314
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(45, -45),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: 135.00000000000003,
|
|
vincentyInitialBearing: 3.5023624896823793e-15,
|
|
vincentyDistance: 14986910.107290443
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(45, -45),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: 135.00000000000003,
|
|
vincentyInitialBearing: 3.5023624896823793e-15,
|
|
vincentyDistance: 14986910.107290443
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(-45, -45),
|
|
c2: new ol.Coordinate(-45, -45),
|
|
vincentyFinalBearing: 0,
|
|
vincentyInitialBearing: 0,
|
|
vincentyDistance: 0
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(-45, -45),
|
|
c2: new ol.Coordinate(-45, 45),
|
|
vincentyFinalBearing: 0,
|
|
vincentyInitialBearing: 0,
|
|
vincentyDistance: 9969888.755957305
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(-45, -45),
|
|
c2: new ol.Coordinate(180, 90),
|
|
vincentyFinalBearing: -135.00000000000003,
|
|
vincentyInitialBearing: -3.5023624896823793e-15,
|
|
vincentyDistance: 14986910.107290443
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(-45, -45),
|
|
c2: new ol.Coordinate(180, -90),
|
|
vincentyFinalBearing: -44.999999999999986,
|
|
vincentyInitialBearing: -180,
|
|
vincentyDistance: 5017021.35133314
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(-45, -45),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: -135,
|
|
vincentyInitialBearing: -3.5023624896823797e-15,
|
|
vincentyDistance: 14986910.107290443
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(-45, -45),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: -135,
|
|
vincentyInitialBearing: -3.5023624896823797e-15,
|
|
vincentyDistance: 14986910.107290443
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(-45, 45),
|
|
c2: new ol.Coordinate(-45, 45),
|
|
vincentyFinalBearing: 0,
|
|
vincentyInitialBearing: 0,
|
|
vincentyDistance: 0
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(-45, 45),
|
|
c2: new ol.Coordinate(180, 90),
|
|
vincentyFinalBearing: -135.00000000000003,
|
|
vincentyInitialBearing: -3.5023624896823793e-15,
|
|
vincentyDistance: 5017021.35133314
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(-45, 45),
|
|
c2: new ol.Coordinate(180, -90),
|
|
vincentyFinalBearing: -44.999999999999986,
|
|
vincentyInitialBearing: -180,
|
|
vincentyDistance: 14986910.107290443
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(-45, 45),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: -135,
|
|
vincentyInitialBearing: -3.5023624896823797e-15,
|
|
vincentyDistance: 5017021.35133314
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(-45, 45),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: -135,
|
|
vincentyInitialBearing: -3.5023624896823797e-15,
|
|
vincentyDistance: 5017021.35133314
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(180, 90),
|
|
c2: new ol.Coordinate(180, 90),
|
|
vincentyFinalBearing: 0,
|
|
vincentyInitialBearing: 0,
|
|
vincentyDistance: 0
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(180, 90),
|
|
c2: new ol.Coordinate(180, -90),
|
|
vincentyFinalBearing: 180,
|
|
vincentyInitialBearing: 180,
|
|
vincentyDistance: 20003931.458623584
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(180, 90),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: 90,
|
|
vincentyInitialBearing: 90,
|
|
vincentyDistance: 9.565041537306137e-26
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(180, 90),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: 90,
|
|
vincentyInitialBearing: 90,
|
|
vincentyDistance: 9.565041537306137e-26
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(180, -90),
|
|
c2: new ol.Coordinate(180, -90),
|
|
vincentyFinalBearing: 0,
|
|
vincentyInitialBearing: 0,
|
|
vincentyDistance: 0
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(180, -90),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: 7.0164775638926606e-15,
|
|
vincentyInitialBearing: 7.0164775638926606e-15,
|
|
vincentyDistance: 20003931.458623584
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(180, -90),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: 7.0164775638926606e-15,
|
|
vincentyInitialBearing: 7.0164775638926606e-15,
|
|
vincentyDistance: 20003931.458623584
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(-180, 90),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: 0,
|
|
vincentyInitialBearing: 0,
|
|
vincentyDistance: 0
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(-180, 90),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: 0,
|
|
vincentyInitialBearing: 0,
|
|
vincentyDistance: 0
|
|
},
|
|
{
|
|
c1: new ol.Coordinate(-180, 90),
|
|
c2: new ol.Coordinate(-180, 90),
|
|
vincentyFinalBearing: 0,
|
|
vincentyInitialBearing: 0,
|
|
vincentyDistance: 0
|
|
}
|
|
];
|
|
|
|
describe('vincenty', function() {
|
|
|
|
it('returns the same distances as Chris Veness\'s reference implementation',
|
|
function() {
|
|
var e, i, v;
|
|
for (i = 0; i < expected.length; ++i) {
|
|
e = expected[i];
|
|
v = ol.ellipsoid.WGS84.vincenty(e.c1, e.c2, 1e-12, 100);
|
|
expect(v.distance).to.roughlyEqual(e.vincentyDistance, 1e-8);
|
|
expect(v.finalBearing).to.roughlyEqual(e.vincentyFinalBearing, 1e-9);
|
|
expect(v.initialBearing).to.roughlyEqual(
|
|
e.vincentyInitialBearing, 1e-9);
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
describe('vincentyDistance', function() {
|
|
|
|
it('returns the same distances as Chris Veness\'s reference implementation',
|
|
function() {
|
|
var e, i, vincentyDistance;
|
|
for (i = 0; i < expected.length; ++i) {
|
|
e = expected[i];
|
|
vincentyDistance =
|
|
ol.ellipsoid.WGS84.vincentyDistance(e.c1, e.c2, 1e-12, 100);
|
|
expect(vincentyDistance).to.roughlyEqual(e.vincentyDistance, 1e-8);
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
describe('vincentyFinalBearing', function() {
|
|
|
|
it('returns the same distances as Chris Veness\'s reference implementation',
|
|
function() {
|
|
var e, i, vincentyFinalBearing;
|
|
for (i = 0; i < expected.length; ++i) {
|
|
e = expected[i];
|
|
vincentyFinalBearing =
|
|
ol.ellipsoid.WGS84.vincentyFinalBearing(e.c1, e.c2, 1e-12, 100);
|
|
expect(vincentyFinalBearing).to.roughlyEqual(
|
|
e.vincentyFinalBearing, 1e-9);
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
describe('vincentyInitialBearing', function() {
|
|
|
|
it('returns the same distances as Chris Veness\'s reference implementation',
|
|
function() {
|
|
var e, i, vincentyInitialBearing;
|
|
for (i = 0; i < expected.length; ++i) {
|
|
e = expected[i];
|
|
vincentyInitialBearing = ol.ellipsoid.WGS84.vincentyInitialBearing(
|
|
e.c1, e.c2, 1e-12, 100);
|
|
expect(vincentyInitialBearing).to.roughlyEqual(
|
|
e.vincentyInitialBearing, 1e-9);
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
goog.require('ol.Coordinate');
|
|
goog.require('ol.Ellipsoid');
|
|
goog.require('ol.ellipsoid.WGS84');
|