From c898cda2e6cbf42375e913d22b3dc0a0cb5c734e Mon Sep 17 00:00:00 2001 From: Thomas Chandelle Date: Fri, 25 Nov 2016 16:51:05 +0100 Subject: [PATCH] Generate projection transform function only when requested --- src/ol/proj/index.js | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/ol/proj/index.js b/src/ol/proj/index.js index f88d7bf714..8210e5d185 100644 --- a/src/ol/proj/index.js +++ b/src/ol/proj/index.js @@ -152,20 +152,6 @@ ol.proj.Projection = function(options) { if (options.units === undefined) { this.units_ = def.units; } - var currentCode, currentDef, currentProj, proj4Transform; - for (currentCode in projections) { - currentDef = proj4js.defs(currentCode); - if (currentDef !== undefined) { - currentProj = ol.proj.get(currentCode); - if (currentDef === def) { - ol.proj.addEquivalentProjections([currentProj, this]); - } else { - proj4Transform = proj4js(currentCode, code); - ol.proj.addCoordinateTransforms(currentProj, this, - proj4Transform.forward, proj4Transform.inverse); - } - } - } } } } @@ -739,6 +725,27 @@ ol.proj.getTransformFromProjections = function(sourceProjection, destinationProj var transform; if (sourceCode in transforms && destinationCode in transforms[sourceCode]) { transform = transforms[sourceCode][destinationCode]; + } else if (ol.ENABLE_PROJ4JS) { + var proj4js = ol.proj.proj4_ || window['proj4']; + if (typeof proj4js == 'function') { + var sourceDef = proj4js.defs(sourceCode); + var destinationDef = proj4js.defs(destinationCode); + + if (sourceDef !== undefined && destinationDef !== undefined) { + if (sourceDef === destinationDef) { + ol.proj.addEquivalentProjections([destinationProjection, sourceProjection]); + } else { + var proj4Transform = proj4js(destinationCode, sourceCode); + ol.proj.addCoordinateTransforms(destinationProjection, sourceProjection, + proj4Transform.forward, proj4Transform.inverse); + } + if (sourceCode in transforms && destinationCode in transforms[sourceCode]) { + transform = transforms[sourceCode][destinationCode]; + } + } else { + transform = undefined; + } + } } if (transform === undefined) { ol.DEBUG && console.assert(transform !== undefined, 'transform should be defined');