Add Proj4js support
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -12,6 +12,7 @@
|
|||||||
/examples/example-list.js
|
/examples/example-list.js
|
||||||
/examples/example-list.xml
|
/examples/example-list.xml
|
||||||
/jsdoc/
|
/jsdoc/
|
||||||
|
/proj4js-combined.js
|
||||||
/tools/*.pyc
|
/tools/*.pyc
|
||||||
/tools/closure-compiler.jar
|
/tools/closure-compiler.jar
|
||||||
/webgl-debug.js
|
/webgl-debug.js
|
||||||
|
|||||||
@@ -8,6 +8,12 @@ goog.require('ol.Extent');
|
|||||||
goog.require('ol.TransformFunction');
|
goog.require('ol.TransformFunction');
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @define {boolean} Enable Proj4js.
|
||||||
|
*/
|
||||||
|
ol.ENABLE_PROJ4JS = true;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @enum {string}
|
* @enum {string}
|
||||||
*/
|
*/
|
||||||
@@ -71,6 +77,44 @@ ol.Projection.prototype.getUnits = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @constructor
|
||||||
|
* @extends {ol.Projection}
|
||||||
|
* @param {string} code Code.
|
||||||
|
* @param {Proj4js.Proj} proj4jsProj Proj4js projection.
|
||||||
|
*/
|
||||||
|
ol.Proj4jsProjection = function(code, proj4jsProj) {
|
||||||
|
|
||||||
|
var units = /** @type {ol.ProjectionUnits} */ proj4jsProj.units;
|
||||||
|
|
||||||
|
goog.base(this, code, units, null);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {Proj4js.Proj}
|
||||||
|
*/
|
||||||
|
this.proj4jsProj_ = proj4jsProj;
|
||||||
|
|
||||||
|
};
|
||||||
|
goog.inherits(ol.Proj4jsProjection, ol.Projection);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {Proj4js.Proj} Proj4js projection.
|
||||||
|
*/
|
||||||
|
ol.Proj4jsProjection.prototype.getProj4jsProj = function() {
|
||||||
|
return this.proj4jsProj_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {Object.<string, ol.Proj4jsProjection>}
|
||||||
|
*/
|
||||||
|
ol.Projection.proj4jsProjections_ = {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {Object.<string, ol.Projection>}
|
* @type {Object.<string, ol.Projection>}
|
||||||
@@ -116,6 +160,17 @@ ol.Projection.addEquivalentTransforms =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {ol.Proj4jsProjection} proj4jsProjection Proj4js projection.
|
||||||
|
*/
|
||||||
|
ol.Projection.addProj4jsProjection = function(proj4jsProjection) {
|
||||||
|
var proj4jsProjections = ol.Projection.proj4jsProjections_;
|
||||||
|
var code = proj4jsProjection.getCode();
|
||||||
|
goog.asserts.assert(!goog.object.containsKey(proj4jsProjections, code));
|
||||||
|
proj4jsProjections[code] = proj4jsProjection;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ol.Projection} projection Projection.
|
* @param {ol.Projection} projection Projection.
|
||||||
*/
|
*/
|
||||||
@@ -145,9 +200,7 @@ ol.Projection.addProjections = function(projections) {
|
|||||||
ol.Projection.addTransform = function(source, destination, transformFn) {
|
ol.Projection.addTransform = function(source, destination, transformFn) {
|
||||||
var projections = ol.Projection.projections_;
|
var projections = ol.Projection.projections_;
|
||||||
var sourceCode = source.getCode();
|
var sourceCode = source.getCode();
|
||||||
goog.asserts.assert(goog.object.containsKey(projections, sourceCode));
|
|
||||||
var destinationCode = destination.getCode();
|
var destinationCode = destination.getCode();
|
||||||
goog.asserts.assert(goog.object.containsKey(projections, destinationCode));
|
|
||||||
var transforms = ol.Projection.transforms_;
|
var transforms = ol.Projection.transforms_;
|
||||||
if (!goog.object.containsKey(transforms, sourceCode)) {
|
if (!goog.object.containsKey(transforms, sourceCode)) {
|
||||||
transforms[sourceCode] = {};
|
transforms[sourceCode] = {};
|
||||||
@@ -163,9 +216,32 @@ ol.Projection.addTransform = function(source, destination, transformFn) {
|
|||||||
* @return {ol.Projection} Projection.
|
* @return {ol.Projection} Projection.
|
||||||
*/
|
*/
|
||||||
ol.Projection.getFromCode = function(code) {
|
ol.Projection.getFromCode = function(code) {
|
||||||
var projections = ol.Projection.projections_;
|
var projection = ol.Projection.projections_[code];
|
||||||
goog.asserts.assert(goog.object.containsKey(projections, code));
|
if (ol.Projection.isProj4jsSupported() && !goog.isDef(projection)) {
|
||||||
return projections[code];
|
projection = ol.Projection.getProj4jsProjectionFromCode_(code);
|
||||||
|
}
|
||||||
|
if (!goog.isDef(projection)) {
|
||||||
|
goog.asserts.assert(goog.isDef(projection));
|
||||||
|
projection = null;
|
||||||
|
}
|
||||||
|
return projection;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} code Code.
|
||||||
|
* @private
|
||||||
|
* @return {ol.Proj4jsProjection} Proj4js projection.
|
||||||
|
*/
|
||||||
|
ol.Projection.getProj4jsProjectionFromCode_ = function(code) {
|
||||||
|
var proj4jsProjections = ol.Projection.proj4jsProjections_;
|
||||||
|
var proj4jsProjection = proj4jsProjections[code];
|
||||||
|
if (!goog.isDef(proj4jsProjection)) {
|
||||||
|
var proj4jsProj = new Proj4js.Proj(code);
|
||||||
|
proj4jsProjection = new ol.Proj4jsProjection(code, proj4jsProj);
|
||||||
|
proj4jsProjections[code] = proj4jsProjection;
|
||||||
|
}
|
||||||
|
return proj4jsProjection;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -195,10 +271,46 @@ ol.Projection.getTransform = function(source, destination) {
|
|||||||
var transforms = ol.Projection.transforms_;
|
var transforms = ol.Projection.transforms_;
|
||||||
var sourceCode = source.getCode();
|
var sourceCode = source.getCode();
|
||||||
var destinationCode = destination.getCode();
|
var destinationCode = destination.getCode();
|
||||||
goog.asserts.assert(goog.object.containsKey(transforms, sourceCode));
|
var transform;
|
||||||
goog.asserts.assert(
|
if (goog.object.containsKey(transforms, sourceCode) &&
|
||||||
goog.object.containsKey(transforms[sourceCode], destinationCode));
|
goog.object.containsKey(transforms[sourceCode], destinationCode)) {
|
||||||
return transforms[sourceCode][destinationCode];
|
transform = transforms[sourceCode][destinationCode];
|
||||||
|
}
|
||||||
|
if (ol.Projection.isProj4jsSupported() && !goog.isDef(transform)) {
|
||||||
|
var proj4jsSource;
|
||||||
|
if (source instanceof ol.Proj4jsProjection) {
|
||||||
|
proj4jsSource = source;
|
||||||
|
} else {
|
||||||
|
proj4jsSource =
|
||||||
|
ol.Projection.getProj4jsProjectionFromCode_(source.getCode());
|
||||||
|
}
|
||||||
|
var sourceProj4jsProj = proj4jsSource.getProj4jsProj();
|
||||||
|
var proj4jsDestination;
|
||||||
|
if (destination instanceof ol.Proj4jsProjection) {
|
||||||
|
proj4jsDestination = destination;
|
||||||
|
} else {
|
||||||
|
proj4jsDestination =
|
||||||
|
ol.Projection.getProj4jsProjectionFromCode_(source.getCode());
|
||||||
|
}
|
||||||
|
var destinationProj4jsProj = proj4jsDestination.getProj4jsProj();
|
||||||
|
transform =
|
||||||
|
/**
|
||||||
|
* @param {ol.Coordinate} coordinate Coordinate.
|
||||||
|
* @return {ol.Coordinate} Coordinate.
|
||||||
|
*/
|
||||||
|
function(coordinate) {
|
||||||
|
var proj4jsPoint = new Proj4js.Point(coordinate.x, coordinate.y);
|
||||||
|
proj4jsPoint = Proj4js.transform(
|
||||||
|
sourceProj4jsProj, destinationProj4jsProj, proj4jsPoint);
|
||||||
|
return new ol.Coordinate(proj4jsPoint.x, proj4jsPoint.y);
|
||||||
|
};
|
||||||
|
ol.Projection.addTransform(source, destination, transform);
|
||||||
|
}
|
||||||
|
if (!goog.isDef(transform)) {
|
||||||
|
goog.asserts.assert(goog.isDef(transform));
|
||||||
|
transform = ol.Projection.identityTransform;
|
||||||
|
}
|
||||||
|
return transform;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -214,6 +326,14 @@ ol.Projection.getTransformFromCodes = function(sourceCode, destinationCode) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {boolean} Has Proj4js.
|
||||||
|
*/
|
||||||
|
ol.Projection.isProj4jsSupported = function() {
|
||||||
|
return ol.ENABLE_PROJ4JS && 'Proj4js' in goog.global;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ol.Coordinate} point Point.
|
* @param {ol.Coordinate} point Point.
|
||||||
* @return {ol.Coordinate} Point.
|
* @return {ol.Coordinate} Point.
|
||||||
|
|||||||
Reference in New Issue
Block a user