Dedicated module for transforms cache
This commit is contained in:
80
src/ol/proj/transforms.js
Normal file
80
src/ol/proj/transforms.js
Normal file
@@ -0,0 +1,80 @@
|
||||
goog.provide('ol.proj.transforms');
|
||||
|
||||
goog.require('ol');
|
||||
goog.require('ol.obj');
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Object.<string, Object.<string, ol.TransformFunction>>}
|
||||
*/
|
||||
ol.proj.transforms.cache_ = {};
|
||||
|
||||
|
||||
/**
|
||||
* Clear the transform cache.
|
||||
*/
|
||||
ol.proj.transforms.clear = function() {
|
||||
ol.proj.transforms.cache_ = {};
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Registers a conversion function to convert coordinates from the source
|
||||
* projection to the destination projection.
|
||||
*
|
||||
* @param {ol.proj.Projection} source Source.
|
||||
* @param {ol.proj.Projection} destination Destination.
|
||||
* @param {ol.TransformFunction} transformFn Transform.
|
||||
*/
|
||||
ol.proj.transforms.add = function(source, destination, transformFn) {
|
||||
var sourceCode = source.getCode();
|
||||
var destinationCode = destination.getCode();
|
||||
var transforms = ol.proj.transforms.cache_;
|
||||
if (!(sourceCode in transforms)) {
|
||||
transforms[sourceCode] = {};
|
||||
}
|
||||
transforms[sourceCode][destinationCode] = transformFn;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Unregisters the conversion function to convert coordinates from the source
|
||||
* projection to the destination projection. This method is used to clean up
|
||||
* cached transforms during testing.
|
||||
*
|
||||
* @param {ol.proj.Projection} source Source projection.
|
||||
* @param {ol.proj.Projection} destination Destination projection.
|
||||
* @return {ol.TransformFunction} transformFn The unregistered transform.
|
||||
*/
|
||||
ol.proj.transforms.remove = function(source, destination) {
|
||||
var sourceCode = source.getCode();
|
||||
var destinationCode = destination.getCode();
|
||||
var transforms = ol.proj.transforms.cache_;
|
||||
ol.DEBUG && console.assert(sourceCode in transforms,
|
||||
'sourceCode should be in transforms');
|
||||
ol.DEBUG && console.assert(destinationCode in transforms[sourceCode],
|
||||
'destinationCode should be in transforms of sourceCode');
|
||||
var transform = transforms[sourceCode][destinationCode];
|
||||
delete transforms[sourceCode][destinationCode];
|
||||
if (ol.obj.isEmpty(transforms[sourceCode])) {
|
||||
delete transforms[sourceCode];
|
||||
}
|
||||
return transform;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Get a transform given a source code and a destination code.
|
||||
* @param {string} sourceCode The code for the source projection.
|
||||
* @param {string} destinationCode The code for the destination projection.
|
||||
* @return {?ol.TransformFunction} The transform function (if found).
|
||||
*/
|
||||
ol.proj.transforms.get = function(sourceCode, destinationCode) {
|
||||
var transform = null;
|
||||
var transforms = ol.proj.transforms.cache_;
|
||||
if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {
|
||||
transform = transforms[sourceCode][destinationCode];
|
||||
}
|
||||
return transform;
|
||||
};
|
||||
Reference in New Issue
Block a user