From f7cbdfb9e5b1658fb7ef51b7742a92b03224382c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ky=E2=84=93e=20Hensel?= Date: Thu, 3 Aug 2023 04:13:49 +1200 Subject: [PATCH] fix incorrect earth radius constants (#9793) --- modules/geo/geo.js | 4 +-- test/spec/actions/split.js | 4 +-- test/spec/geo/geo.js | 64 +++++++++++++++++++------------------- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/modules/geo/geo.js b/modules/geo/geo.js index ce239eafe..a3da401f3 100644 --- a/modules/geo/geo.js +++ b/modules/geo/geo.js @@ -1,7 +1,7 @@ // constants var TAU = 2 * Math.PI; -var EQUATORIAL_RADIUS = 6356752.314245179; -var POLAR_RADIUS = 6378137.0; +const EQUATORIAL_RADIUS = 6.3781370E6; +const POLAR_RADIUS = 6.3567523E6; export function geoLatToMeters(dLat) { diff --git a/test/spec/actions/split.js b/test/spec/actions/split.js index b58ef10d2..e5ea57a1f 100644 --- a/test/spec/actions/split.js +++ b/test/spec/actions/split.js @@ -1354,8 +1354,8 @@ describe('iD.actionSplit', function () { graph = iD.actionSplit('b', ['~'])(graph); - expect(graph.entity('-').nodes).to.eql(['b', 'c']); - expect(graph.entity('~').nodes).to.eql(['a', 'b']); + expect(graph.entity('~').nodes).to.eql(['b', 'c']); + expect(graph.entity('-').nodes).to.eql(['a', 'b']); expect(graph.entity('=').nodes).to.eql(['a', 'b', 'c', 'a']); expect(graph.parentRelations(graph.entity('='))).to.have.length(0); }); diff --git a/test/spec/geo/geo.js b/test/spec/geo/geo.js index be9929b23..dbc451eda 100644 --- a/test/spec/geo/geo.js +++ b/test/spec/geo/geo.js @@ -5,10 +5,10 @@ describe('iD.geo - geography', function() { expect(iD.geoLatToMeters(0)).to.eql(0); }); it('1 degree latitude is approx 111 km', function() { - expect(iD.geoLatToMeters(1)).to.be.closeTo(111319, 10); + expect(iD.geoLatToMeters(1)).to.be.closeTo(110946, 10); }); it('-1 degree latitude is approx -111 km', function() { - expect(iD.geoLatToMeters(-1)).to.be.closeTo(-111319, 10); + expect(iD.geoLatToMeters(-1)).to.be.closeTo(-110946, 10); }); }); @@ -17,21 +17,21 @@ describe('iD.geo - geography', function() { expect(iD.geoLonToMeters(0, 0)).to.eql(0); }); it('distance of 1 degree longitude varies with latitude', function() { - expect(iD.geoLonToMeters(1, 0)).to.be.closeTo(110946, 10); - expect(iD.geoLonToMeters(1, 15)).to.be.closeTo(107165, 10); - expect(iD.geoLonToMeters(1, 30)).to.be.closeTo(96082, 10); - expect(iD.geoLonToMeters(1, 45)).to.be.closeTo(78450, 10); - expect(iD.geoLonToMeters(1, 60)).to.be.closeTo(55473, 10); - expect(iD.geoLonToMeters(1, 75)).to.be.closeTo(28715, 10); + expect(iD.geoLonToMeters(1, 0)).to.be.closeTo(111319, 10); + expect(iD.geoLonToMeters(1, 15)).to.be.closeTo(107526, 10); + expect(iD.geoLonToMeters(1, 30)).to.be.closeTo(96405, 10); + expect(iD.geoLonToMeters(1, 45)).to.be.closeTo(78714, 10); + expect(iD.geoLonToMeters(1, 60)).to.be.closeTo(55659, 10); + expect(iD.geoLonToMeters(1, 75)).to.be.closeTo(28811, 10); expect(iD.geoLonToMeters(1, 90)).to.eql(0); }); it('distance of -1 degree longitude varies with latitude', function() { - expect(iD.geoLonToMeters(-1, -0)).to.be.closeTo(-110946, 10); - expect(iD.geoLonToMeters(-1, -15)).to.be.closeTo(-107165, 10); - expect(iD.geoLonToMeters(-1, -30)).to.be.closeTo(-96082, 10); - expect(iD.geoLonToMeters(-1, -45)).to.be.closeTo(-78450, 10); - expect(iD.geoLonToMeters(-1, -60)).to.be.closeTo(-55473, 10); - expect(iD.geoLonToMeters(-1, -75)).to.be.closeTo(-28715, 10); + expect(iD.geoLonToMeters(-1, -0)).to.be.closeTo(-111319, 10); + expect(iD.geoLonToMeters(-1, -15)).to.be.closeTo(-107526, 10); + expect(iD.geoLonToMeters(-1, -30)).to.be.closeTo(-96405, 10); + expect(iD.geoLonToMeters(-1, -45)).to.be.closeTo(-78714, 10); + expect(iD.geoLonToMeters(-1, -60)).to.be.closeTo(-55659, 10); + expect(iD.geoLonToMeters(-1, -75)).to.be.closeTo(-28811, 10); expect(iD.geoLonToMeters(-1, -90)).to.eql(0); }); }); @@ -41,10 +41,10 @@ describe('iD.geo - geography', function() { expect(iD.geoMetersToLat(0)).to.eql(0); }); it('111 km is approx 1 degree latitude', function() { - expect(iD.geoMetersToLat(111319)).to.be.closeTo(1, 0.0001); + expect(iD.geoMetersToLat(110946)).to.be.closeTo(1, 0.0001); }); it('-111 km is approx -1 degree latitude', function() { - expect(iD.geoMetersToLat(-111319)).to.be.closeTo(-1, 0.0001); + expect(iD.geoMetersToLat(-110946)).to.be.closeTo(-1, 0.0001); }); }); @@ -53,21 +53,21 @@ describe('iD.geo - geography', function() { expect(iD.geoMetersToLon(0, 0)).to.eql(0); }); it('distance of 1 degree longitude varies with latitude', function() { - expect(iD.geoMetersToLon(110946, 0)).to.be.closeTo(1, 1e-4); - expect(iD.geoMetersToLon(107165, 15)).to.be.closeTo(1, 1e-4); - expect(iD.geoMetersToLon(96082, 30)).to.be.closeTo(1, 1e-4); - expect(iD.geoMetersToLon(78450, 45)).to.be.closeTo(1, 1e-4); - expect(iD.geoMetersToLon(55473, 60)).to.be.closeTo(1, 1e-4); - expect(iD.geoMetersToLon(28715, 75)).to.be.closeTo(1, 1e-4); + expect(iD.geoMetersToLon(111319, 0)).to.be.closeTo(1, 1e-4); + expect(iD.geoMetersToLon(107526, 15)).to.be.closeTo(1, 1e-4); + expect(iD.geoMetersToLon(96405, 30)).to.be.closeTo(1, 1e-4); + expect(iD.geoMetersToLon(78714, 45)).to.be.closeTo(1, 1e-4); + expect(iD.geoMetersToLon(55659, 60)).to.be.closeTo(1, 1e-4); + expect(iD.geoMetersToLon(28811, 75)).to.be.closeTo(1, 1e-4); expect(iD.geoMetersToLon(1, 90)).to.eql(0); }); it('distance of -1 degree longitude varies with latitude', function() { - expect(iD.geoMetersToLon(-110946, -0)).to.be.closeTo(-1, 1e-4); - expect(iD.geoMetersToLon(-107165, -15)).to.be.closeTo(-1, 1e-4); - expect(iD.geoMetersToLon(-96082, -30)).to.be.closeTo(-1, 1e-4); - expect(iD.geoMetersToLon(-78450, -45)).to.be.closeTo(-1, 1e-4); - expect(iD.geoMetersToLon(-55473, -60)).to.be.closeTo(-1, 1e-4); - expect(iD.geoMetersToLon(-28715, -75)).to.be.closeTo(-1, 1e-4); + expect(iD.geoMetersToLon(-111319, -0)).to.be.closeTo(-1, 1e-4); + expect(iD.geoMetersToLon(-107526, -15)).to.be.closeTo(-1, 1e-4); + expect(iD.geoMetersToLon(-96405, -30)).to.be.closeTo(-1, 1e-4); + expect(iD.geoMetersToLon(-78714, -45)).to.be.closeTo(-1, 1e-4); + expect(iD.geoMetersToLon(-55659, -60)).to.be.closeTo(-1, 1e-4); + expect(iD.geoMetersToLon(-28811, -75)).to.be.closeTo(-1, 1e-4); expect(iD.geoMetersToLon(-1, -90)).to.eql(0); }); }); @@ -107,22 +107,22 @@ describe('iD.geo - geography', function() { it('a straight 1 degree line at the equator is approximately 111 km', function() { var a = [0, 0]; var b = [1, 0]; - expect(iD.geoSphericalDistance(a, b)).to.be.closeTo(110946, 10); + expect(iD.geoSphericalDistance(a, b)).to.be.closeTo(111319, 10); }); it('a pythagorean triangle is (nearly) right', function() { var a = [0, 0]; var b = [4, 3]; - expect(iD.geoSphericalDistance(a, b)).to.be.closeTo(555282, 10); + expect(iD.geoSphericalDistance(a, b)).to.be.closeTo(555804, 10); }); it('east-west distances at high latitude are shorter', function() { var a = [0, 60]; var b = [1, 60]; - expect(iD.geoSphericalDistance(a, b)).to.be.closeTo(55473, 10); + expect(iD.geoSphericalDistance(a, b)).to.be.closeTo(55659, 10); }); it('north-south distances at high latitude are not shorter', function() { var a = [0, 60]; var b = [0, 61]; - expect(iD.geoSphericalDistance(a, b)).to.be.closeTo(111319, 10); + expect(iD.geoSphericalDistance(a, b)).to.be.closeTo(110946, 10); }); });