Dedicated module for projections cache
This commit is contained in:
@@ -5,6 +5,7 @@ goog.provide('ol.proj.Projection');
|
|||||||
goog.require('ol');
|
goog.require('ol');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.proj.Units');
|
goog.require('ol.proj.Units');
|
||||||
|
goog.require('ol.proj.projections');
|
||||||
goog.require('ol.proj.transforms');
|
goog.require('ol.proj.transforms');
|
||||||
goog.require('ol.sphere.NORMAL');
|
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;
|
ol.proj.METERS_PER_UNIT[ol.proj.Units.USFEET] = 1200 / 3937;
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @type {Object.<string, ol.proj.Projection>}
|
|
||||||
*/
|
|
||||||
ol.proj.projections_ = {};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {proj4}
|
* @type {proj4}
|
||||||
@@ -153,13 +147,12 @@ ol.proj.Projection = function(options) {
|
|||||||
*/
|
*/
|
||||||
this.metersPerUnit_ = options.metersPerUnit;
|
this.metersPerUnit_ = options.metersPerUnit;
|
||||||
|
|
||||||
var projections = ol.proj.projections_;
|
|
||||||
var code = options.code;
|
var code = options.code;
|
||||||
ol.DEBUG && console.assert(code !== undefined,
|
ol.DEBUG && console.assert(code !== undefined,
|
||||||
'Option "code" is required for constructing instance');
|
'Option "code" is required for constructing instance');
|
||||||
if (ol.ENABLE_PROJ4JS) {
|
if (ol.ENABLE_PROJ4JS) {
|
||||||
var proj4js = ol.proj.proj4_ || window['proj4'];
|
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);
|
var def = proj4js.defs(code);
|
||||||
if (def !== undefined) {
|
if (def !== undefined) {
|
||||||
if (def.axis !== undefined && options.axisOrientation === undefined) {
|
if (def.axis !== undefined && options.axisOrientation === undefined) {
|
||||||
@@ -436,7 +429,7 @@ ol.proj.addEquivalentTransforms = function(projections1, projections2, forwardTr
|
|||||||
* @api stable
|
* @api stable
|
||||||
*/
|
*/
|
||||||
ol.proj.addProjection = function(projection) {
|
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);
|
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.clearAllProjections = function() {
|
||||||
ol.proj.projections_ = {};
|
ol.proj.projections.clear();
|
||||||
ol.proj.transforms.clear();
|
ol.proj.transforms.clear();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -579,22 +572,22 @@ ol.proj.toLonLat = function(coordinate, opt_projection) {
|
|||||||
* @api stable
|
* @api stable
|
||||||
*/
|
*/
|
||||||
ol.proj.get = function(projectionLike) {
|
ol.proj.get = function(projectionLike) {
|
||||||
var projection;
|
var projection = null;
|
||||||
if (projectionLike instanceof ol.proj.Projection) {
|
if (projectionLike instanceof ol.proj.Projection) {
|
||||||
projection = projectionLike;
|
projection = projectionLike;
|
||||||
} else if (typeof projectionLike === 'string') {
|
} else if (typeof projectionLike === 'string') {
|
||||||
var code = projectionLike;
|
var code = projectionLike;
|
||||||
projection = ol.proj.projections_[code];
|
projection = ol.proj.projections.get(code);
|
||||||
if (ol.ENABLE_PROJ4JS) {
|
if (ol.ENABLE_PROJ4JS) {
|
||||||
var proj4js = ol.proj.proj4_ || window['proj4'];
|
var proj4js = ol.proj.proj4_ || window['proj4'];
|
||||||
if (projection === undefined && typeof proj4js == 'function' &&
|
if (!projection && typeof proj4js == 'function' &&
|
||||||
proj4js.defs(code) !== undefined) {
|
proj4js.defs(code) !== undefined) {
|
||||||
projection = new ol.proj.Projection({code: code});
|
projection = new ol.proj.Projection({code: code});
|
||||||
ol.proj.addProjection(projection);
|
ol.proj.addProjection(projection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return projection || null;
|
return projection;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
38
src/ol/proj/projections.js
Normal file
38
src/ol/proj/projections.js
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
goog.provide('ol.proj.projections');
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {Object.<string, ol.proj.Projection>}
|
||||||
|
*/
|
||||||
|
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;
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user