Add and use new proj4.register function
This commit is contained in:
@@ -1,30 +1,51 @@
|
||||
/**
|
||||
* @module ol/proj/proj4
|
||||
*/
|
||||
var _ol_proj_proj4_ = {};
|
||||
|
||||
import {addCoordinateTransforms, addProjection, addEquivalentProjections, get} from '../proj.js';
|
||||
import {get as getTransform} from './transforms.js';
|
||||
import Projection from './Projection.js';
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Proj4}
|
||||
* Make projections defined in proj4 (with `proj4.defs()`) available in
|
||||
* OpenLayers.
|
||||
*
|
||||
* This function should be called whenever changes are made to the proj4
|
||||
* registry, e.g. after calling `proj4.defs()`. Existing transforms will not be
|
||||
* modified by this function.
|
||||
*
|
||||
* @param {?} proj4 Proj4.
|
||||
* @api
|
||||
*/
|
||||
_ol_proj_proj4_.cache_ = null;
|
||||
|
||||
|
||||
/**
|
||||
* Store the proj4 function.
|
||||
* @param {Proj4} proj4 The proj4 function.
|
||||
*/
|
||||
_ol_proj_proj4_.set = function(proj4) {
|
||||
_ol_proj_proj4_.cache_ = proj4;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Get proj4.
|
||||
* @return {Proj4} The proj4 function set above or available globally.
|
||||
*/
|
||||
_ol_proj_proj4_.get = function() {
|
||||
return _ol_proj_proj4_.cache_ || window['proj4'];
|
||||
};
|
||||
export default _ol_proj_proj4_;
|
||||
export function register(proj4) {
|
||||
var projCodes = Object.keys(proj4.defs);
|
||||
var len = projCodes.length;
|
||||
var i, j;
|
||||
for (i = 0; i < len; ++i) {
|
||||
var code = projCodes[i];
|
||||
if (!get(code)) {
|
||||
var def = proj4.defs(code);
|
||||
addProjection(new Projection({
|
||||
code: code,
|
||||
axisOrientation: def.axis,
|
||||
metersPerUnit: def.to_meter,
|
||||
units: def.units
|
||||
}));
|
||||
}
|
||||
}
|
||||
for (i = 0; i < len; ++i) {
|
||||
var code1 = projCodes[i];
|
||||
var proj1 = get(code1);
|
||||
for (j = 0; j < len; ++j) {
|
||||
var code2 = projCodes[j];
|
||||
var proj2 = get(code2);
|
||||
if (!getTransform(code1, code2)) {
|
||||
if (proj4.defs[code1] === proj4.defs[code2]) {
|
||||
addEquivalentProjections([proj1, proj2]);
|
||||
} else {
|
||||
var transform = proj4(code1, code2);
|
||||
addCoordinateTransforms(proj1, proj2, transform.forward, transform.inverse);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user