diff --git a/src/ol/control/ScaleLine.js b/src/ol/control/ScaleLine.js index 4ea28331ec..4172b8c07d 100644 --- a/src/ol/control/ScaleLine.js +++ b/src/ol/control/ScaleLine.js @@ -176,7 +176,7 @@ ScaleLine.prototype.updateElement_ = function() { Units.METERS; let pointResolution = getPointResolution(projection, viewState.resolution, center, pointResolutionUnits); - if (units != ScaleLineUnits.DEGREES) { + if (projection.getUnits() != Units.DEGREES && units == ScaleLineUnits.METRIC) { pointResolution *= projection.getMetersPerUnit(); } diff --git a/test/spec/ol/control/scaleline.test.js b/test/spec/ol/control/scaleline.test.js index 19aae64c72..33fb7e5ce9 100644 --- a/test/spec/ol/control/scaleline.test.js +++ b/test/spec/ol/control/scaleline.test.js @@ -298,6 +298,21 @@ describe('ol.control.ScaleLine', function() { map.renderSync(); expect(ctrl.element_.innerText).to.be('100 mm'); }); + + it('Metric display works with Geographic (EPSG:4326) projection', function() { + var ctrl = new ScaleLine(); + ctrl.setMap(map); + map.setView(new View({ + center: [0, 0], + zoom: 0, /* min zoom */ + projection: 'EPSG:4326' + })); + map.renderSync(); + expect(ctrl.element_.innerText).to.be('10000 km'); + map.getView().setZoom(28); /* max zoom */ + map.renderSync(); + expect(ctrl.element_.innerText).to.be('50 mm'); + }); }); describe('latitude may affect scale line in EPSG:4326', function() {