diff --git a/src/ol/proj/proj.exports b/src/ol/proj/proj.exports index c415264d69..2db32e18c2 100644 --- a/src/ol/proj/proj.exports +++ b/src/ol/proj/proj.exports @@ -18,3 +18,5 @@ @exportSymbol ol.proj.configureProj4jsProjection @exportSymbol ol.proj.common.add + +@exportSymbol ol.proj.METERS_PER_UNIT diff --git a/src/ol/proj/proj.js b/src/ol/proj/proj.js index c1ca1b1a68..f65a77e90f 100644 --- a/src/ol/proj/proj.js +++ b/src/ol/proj/proj.js @@ -1,4 +1,5 @@ goog.provide('ol.proj'); +goog.provide('ol.proj.METERS_PER_UNIT'); goog.provide('ol.proj.Projection'); goog.provide('ol.proj.ProjectionLike'); goog.provide('ol.proj.Units'); @@ -51,11 +52,10 @@ ol.proj.Units = { * @const * @type {Object.} */ -ol.METERS_PER_UNIT = {}; -ol.METERS_PER_UNIT[ol.proj.Units.DEGREES] = +ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] = 2 * Math.PI * ol.sphere.NORMAL.radius / 360; -ol.METERS_PER_UNIT[ol.proj.Units.FEET] = 0.3048; -ol.METERS_PER_UNIT[ol.proj.Units.METERS] = 1; +ol.proj.METERS_PER_UNIT[ol.proj.Units.FEET] = 0.3048; +ol.proj.METERS_PER_UNIT[ol.proj.Units.METERS] = 1; @@ -153,7 +153,7 @@ ol.proj.Projection.prototype.getUnits = function() { * @return {number|undefined} Meters. */ ol.proj.Projection.prototype.getMetersPerUnit = function() { - return ol.METERS_PER_UNIT[this.units_]; + return ol.proj.METERS_PER_UNIT[this.units_]; }; @@ -240,7 +240,7 @@ goog.inherits(ol.Proj4jsProjection_, ol.proj.Projection); ol.Proj4jsProjection_.prototype.getMetersPerUnit = function() { var metersPerUnit = this.proj4jsProj_.to_meter; if (!goog.isDef(metersPerUnit)) { - metersPerUnit = ol.METERS_PER_UNIT[this.units_]; + metersPerUnit = ol.proj.METERS_PER_UNIT[this.units_]; } return metersPerUnit; }; diff --git a/src/ol/tilegrid/tilegrid.js b/src/ol/tilegrid/tilegrid.js index b0aa02212a..ac547c42b3 100644 --- a/src/ol/tilegrid/tilegrid.js +++ b/src/ol/tilegrid/tilegrid.js @@ -7,6 +7,7 @@ goog.require('ol.TileCoord'); goog.require('ol.TileRange'); goog.require('ol.array'); goog.require('ol.extent'); +goog.require('ol.proj.METERS_PER_UNIT'); goog.require('ol.proj.Projection'); goog.require('ol.proj.Units'); @@ -417,7 +418,7 @@ ol.tilegrid.createForProjection = function(projection, opt_maxZoom, opt_tileSize) { var projectionExtent = projection.getExtent(); var size = goog.isNull(projectionExtent) ? - 360 * ol.METERS_PER_UNIT[ol.proj.Units.DEGREES] / + 360 * ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] / projection.getMetersPerUnit() : Math.max(projectionExtent[2] - projectionExtent[0], projectionExtent[3] - projectionExtent[1]); diff --git a/src/ol/view2d.js b/src/ol/view2d.js index b4b04d9116..c11764adaa 100644 --- a/src/ol/view2d.js +++ b/src/ol/view2d.js @@ -16,6 +16,7 @@ goog.require('ol.View'); goog.require('ol.coordinate'); goog.require('ol.extent'); goog.require('ol.proj'); +goog.require('ol.proj.METERS_PER_UNIT'); goog.require('ol.proj.Projection'); goog.require('ol.proj.Units'); @@ -544,8 +545,8 @@ ol.View2D.createResolutionConstraint_ = function(options) { .getExtent(); var size = goog.isNull(projectionExtent) ? // use an extent that can fit the whole world if need be - 360 * ol.METERS_PER_UNIT[ol.proj.Units.DEGREES] / - ol.METERS_PER_UNIT[projection.getUnits()] : + 360 * ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] / + ol.proj.METERS_PER_UNIT[projection.getUnits()] : Math.max(projectionExtent[2] - projectionExtent[0], projectionExtent[3] - projectionExtent[1]); maxResolution = size / ol.DEFAULT_TILE_SIZE; diff --git a/test/spec/ol/tilegrid/tilegrid.test.js b/test/spec/ol/tilegrid/tilegrid.test.js index 60d839b6c1..f4b5272870 100644 --- a/test/spec/ol/tilegrid/tilegrid.test.js +++ b/test/spec/ol/tilegrid/tilegrid.test.js @@ -196,7 +196,7 @@ describe('ol.tilegrid.TileGrid', function() { var grid = ol.tilegrid.createForProjection(projection); var resolutions = grid.getResolutions(); expect(resolutions[5]).to.be( - 360 * ol.METERS_PER_UNIT[ol.proj.Units.DEGREES] / + 360 * ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] / ol.DEFAULT_TILE_SIZE / Math.pow(2, 5)); }); @@ -645,6 +645,7 @@ describe('ol.tilegrid.TileGrid', function() { goog.require('ol.Coordinate'); goog.require('ol.TileCoord'); goog.require('ol.proj'); +goog.require('ol.proj.METERS_PER_UNIT'); goog.require('ol.proj.Projection'); goog.require('ol.proj.Units'); goog.require('ol.tilegrid.TileGrid');