From b54342dfb8df575d061a36c61bc3b43b20058db7 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Sun, 4 Dec 2016 10:24:43 -0800 Subject: [PATCH] Dedicated module for projections cache --- src/ol/proj/index.js | 25 +++++++++---------------- src/ol/proj/projections.js | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 16 deletions(-) create mode 100644 src/ol/proj/projections.js diff --git a/src/ol/proj/index.js b/src/ol/proj/index.js index 44bd2880b1..de331c75b7 100644 --- a/src/ol/proj/index.js +++ b/src/ol/proj/index.js @@ -5,6 +5,7 @@ goog.provide('ol.proj.Projection'); goog.require('ol'); goog.require('ol.extent'); goog.require('ol.proj.Units'); +goog.require('ol.proj.projections'); goog.require('ol.proj.transforms'); goog.require('ol.sphere.NORMAL'); @@ -23,13 +24,6 @@ ol.proj.METERS_PER_UNIT[ol.proj.Units.METERS] = 1; ol.proj.METERS_PER_UNIT[ol.proj.Units.USFEET] = 1200 / 3937; -/** - * @private - * @type {Object.} - */ -ol.proj.projections_ = {}; - - /** * @private * @type {proj4} @@ -153,13 +147,12 @@ ol.proj.Projection = function(options) { */ this.metersPerUnit_ = options.metersPerUnit; - var projections = ol.proj.projections_; var code = options.code; ol.DEBUG && console.assert(code !== undefined, 'Option "code" is required for constructing instance'); if (ol.ENABLE_PROJ4JS) { var proj4js = ol.proj.proj4_ || window['proj4']; - if (typeof proj4js == 'function' && projections[code] === undefined) { + if (typeof proj4js == 'function' && !ol.proj.projections.get(code)) { var def = proj4js.defs(code); if (def !== undefined) { if (def.axis !== undefined && options.axisOrientation === undefined) { @@ -436,7 +429,7 @@ ol.proj.addEquivalentTransforms = function(projections1, projections2, forwardTr * @api stable */ ol.proj.addProjection = function(projection) { - ol.proj.projections_[projection.getCode()] = projection; + ol.proj.projections.add(projection.getCode(), projection); ol.proj.transforms.add(projection, projection, ol.proj.cloneTransform); }; @@ -453,10 +446,10 @@ ol.proj.addProjections = function(projections) { /** - * FIXME empty description for jsdoc + * Clear all cached projections and transforms. */ ol.proj.clearAllProjections = function() { - ol.proj.projections_ = {}; + ol.proj.projections.clear(); ol.proj.transforms.clear(); }; @@ -579,22 +572,22 @@ ol.proj.toLonLat = function(coordinate, opt_projection) { * @api stable */ ol.proj.get = function(projectionLike) { - var projection; + var projection = null; if (projectionLike instanceof ol.proj.Projection) { projection = projectionLike; } else if (typeof projectionLike === 'string') { var code = projectionLike; - projection = ol.proj.projections_[code]; + projection = ol.proj.projections.get(code); if (ol.ENABLE_PROJ4JS) { var proj4js = ol.proj.proj4_ || window['proj4']; - if (projection === undefined && typeof proj4js == 'function' && + if (!projection && typeof proj4js == 'function' && proj4js.defs(code) !== undefined) { projection = new ol.proj.Projection({code: code}); ol.proj.addProjection(projection); } } } - return projection || null; + return projection; }; diff --git a/src/ol/proj/projections.js b/src/ol/proj/projections.js new file mode 100644 index 0000000000..a81092a5e2 --- /dev/null +++ b/src/ol/proj/projections.js @@ -0,0 +1,38 @@ +goog.provide('ol.proj.projections'); + + +/** + * @private + * @type {Object.} + */ +ol.proj.projections.cache_ = {}; + + +/** + * Clear the projections cache. + */ +ol.proj.projections.clear = function() { + ol.proj.projections.cache_ = {}; +}; + + +/** + * Get a cached projection by code. + * @param {string} code The code for the projection. + * @return {ol.proj.Projection} The projection (if cached). + */ +ol.proj.projections.get = function(code) { + var projections = ol.proj.projections.cache_; + return projections[code] || null; +}; + + +/** + * Add a projection to the cache. + * @param {string} code The projection code. + * @param {ol.proj.Projection} projection The projection to cache. + */ +ol.proj.projections.add = function(code, projection) { + var projections = ol.proj.projections.cache_; + projections[code] = projection; +};