Clean up directory structure
This commit is contained in:
@@ -0,0 +1,221 @@
|
||||
|
||||
/**
|
||||
* @fileoverview An implementation of Google Maps' MVCArray.
|
||||
* @see https://developers.google.com/maps/documentation/javascript/reference
|
||||
*/
|
||||
|
||||
goog.provide('ol.Array');
|
||||
goog.provide('ol.ArrayEvent');
|
||||
goog.provide('ol.ArrayEventType');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.events.Event');
|
||||
goog.require('ol.Object');
|
||||
|
||||
|
||||
/**
|
||||
* @enum {string}
|
||||
*/
|
||||
ol.ArrayEventType = {
|
||||
INSERT_AT: 'insert_at',
|
||||
REMOVE_AT: 'remove_at',
|
||||
SET_AT: 'set_at'
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {goog.events.Event}
|
||||
* @param {ol.ArrayEventType} type Type.
|
||||
* @param {number} index Index.
|
||||
* @param {*=} opt_prev Value.
|
||||
* @param {Object=} opt_target Target.
|
||||
*/
|
||||
ol.ArrayEvent = function(type, index, opt_prev, opt_target) {
|
||||
|
||||
goog.base(this, type, opt_target);
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
this.index = index;
|
||||
|
||||
/**
|
||||
* @type {*}
|
||||
*/
|
||||
this.prev = opt_prev;
|
||||
|
||||
};
|
||||
goog.inherits(ol.ArrayEvent, goog.events.Event);
|
||||
|
||||
|
||||
/**
|
||||
* @enum {string}
|
||||
*/
|
||||
ol.ArrayProperty = {
|
||||
LENGTH: 'length'
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {ol.Object}
|
||||
* @param {Array=} opt_array Array.
|
||||
*/
|
||||
ol.Array = function(opt_array) {
|
||||
|
||||
goog.base(this);
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Array}
|
||||
*/
|
||||
this.array_ = goog.isDefAndNotNull(opt_array) ? opt_array : [];
|
||||
|
||||
this.updateLength_();
|
||||
|
||||
};
|
||||
goog.inherits(ol.Array, ol.Object);
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Array|Array} arg Argument.
|
||||
* @return {ol.Array} Array.
|
||||
*/
|
||||
ol.Array.create = function(arg) {
|
||||
if (arg instanceof ol.Array) {
|
||||
return arg;
|
||||
} else {
|
||||
return new ol.Array(arg);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
ol.Array.prototype.clear = function() {
|
||||
while (this[ol.ArrayProperty.LENGTH]) {
|
||||
this.pop();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {function(this: T, *, number)} f Function.
|
||||
* @param {T=} opt_obj The object to be used for the value of 'this' within f.
|
||||
* @template T
|
||||
*/
|
||||
ol.Array.prototype.forEach = function(f, opt_obj) {
|
||||
goog.array.forEach(this.array_, f, opt_obj);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {Array} Array.
|
||||
*/
|
||||
ol.Array.prototype.getArray = function() {
|
||||
return this.array_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {number} index Index.
|
||||
* @return {*} Element.
|
||||
*/
|
||||
ol.Array.prototype.getAt = function(index) {
|
||||
return this.array_[index];
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {number} Length.
|
||||
*/
|
||||
ol.Array.prototype.getLength = function() {
|
||||
return /** @type {number} */ (this.get(ol.ArrayProperty.LENGTH));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {number} index Index.
|
||||
* @param {*} elem Element.
|
||||
*/
|
||||
ol.Array.prototype.insertAt = function(index, elem) {
|
||||
goog.array.insertAt(this.array_, elem, index);
|
||||
this.updateLength_();
|
||||
this.dispatchEvent(new ol.ArrayEvent(
|
||||
ol.ArrayEventType.INSERT_AT, index, undefined, this));
|
||||
if (this[ol.ArrayEventType.INSERT_AT]) {
|
||||
this[ol.ArrayEventType.INSERT_AT](index);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {*} Element.
|
||||
*/
|
||||
ol.Array.prototype.pop = function() {
|
||||
return this.removeAt(this.getLength() - 1);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {*} elem Element.
|
||||
* @return {number} Length.
|
||||
*/
|
||||
ol.Array.prototype.push = function(elem) {
|
||||
var n = this.array_.length;
|
||||
this.insertAt(n, elem);
|
||||
return n;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {number} index Index.
|
||||
* @return {*} Value.
|
||||
*/
|
||||
ol.Array.prototype.removeAt = function(index) {
|
||||
var prev = this.array_[index];
|
||||
goog.array.removeAt(this.array_, index);
|
||||
this.updateLength_();
|
||||
this.dispatchEvent(new ol.ArrayEvent(ol.ArrayEventType.REMOVE_AT,
|
||||
index, prev, this));
|
||||
if (this[ol.ArrayEventType.REMOVE_AT]) {
|
||||
this[ol.ArrayEventType.REMOVE_AT](index);
|
||||
}
|
||||
return prev;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {number} index Index.
|
||||
* @param {*} elem Element.
|
||||
*/
|
||||
ol.Array.prototype.setAt = function(index, elem) {
|
||||
var n = this[ol.ArrayProperty.LENGTH];
|
||||
if (index < n) {
|
||||
var prev = this.array_[index];
|
||||
this.array_[index] = elem;
|
||||
this.dispatchEvent(new ol.ArrayEvent(ol.ArrayEventType.SET_AT,
|
||||
index, prev, this));
|
||||
if (this[ol.ArrayEventType.SET_AT]) {
|
||||
this[ol.ArrayEventType.SET_AT](index, prev);
|
||||
}
|
||||
} else {
|
||||
var j;
|
||||
for (j = n; j < index; ++j) {
|
||||
this.insertAt(j, undefined);
|
||||
}
|
||||
this.insertAt(index, elem);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
ol.Array.prototype.updateLength_ = function() {
|
||||
this.set('length', this.array_.length);
|
||||
};
|
||||
@@ -0,0 +1,215 @@
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.testing.jsunit');
|
||||
goog.require('ol.Array');
|
||||
goog.require('ol.ArrayEventType');
|
||||
|
||||
|
||||
function testEmpty() {
|
||||
var a = new ol.Array();
|
||||
assertEquals(0, a.getLength());
|
||||
assertTrue(goog.array.equals(a.getArray(), []));
|
||||
assertUndefined(a.getAt(0));
|
||||
}
|
||||
|
||||
|
||||
function testConstruct() {
|
||||
var array = [0, 1, 2];
|
||||
var a = new ol.Array(array);
|
||||
assertEquals(0, a.getAt(0));
|
||||
assertEquals(1, a.getAt(1));
|
||||
assertEquals(2, a.getAt(2));
|
||||
}
|
||||
|
||||
|
||||
function testPush() {
|
||||
var a = new ol.Array();
|
||||
a.push(1);
|
||||
assertEquals(1, a.getLength());
|
||||
assertTrue(goog.array.equals(a.getArray(), [1]));
|
||||
assertEquals(1, a.getAt(0));
|
||||
}
|
||||
|
||||
|
||||
function testPushPop() {
|
||||
var a = new ol.Array();
|
||||
a.push(1);
|
||||
a.pop();
|
||||
assertEquals(0, a.getLength());
|
||||
assertTrue(goog.array.equals(a.getArray(), []));
|
||||
assertUndefined(a.getAt(0));
|
||||
}
|
||||
|
||||
|
||||
function testInsertAt() {
|
||||
var a = new ol.Array([0, 2]);
|
||||
a.insertAt(1, 1);
|
||||
assertEquals(0, a.getAt(0));
|
||||
assertEquals(1, a.getAt(1));
|
||||
assertEquals(2, a.getAt(2));
|
||||
}
|
||||
|
||||
|
||||
function testSetAt() {
|
||||
var a = new ol.Array();
|
||||
a.setAt(1, 1);
|
||||
assertEquals(2, a.getLength());
|
||||
assertUndefined(a.getAt(0));
|
||||
assertEquals(1, a.getAt(1));
|
||||
}
|
||||
|
||||
|
||||
function testRemoveAt() {
|
||||
var a = new ol.Array([0, 1, 2]);
|
||||
a.removeAt(1);
|
||||
assertEquals(0, a.getAt(0));
|
||||
assertEquals(2, a.getAt(1));
|
||||
}
|
||||
|
||||
|
||||
function testForEachEmpty() {
|
||||
var a = new ol.Array();
|
||||
var forEachCalled = false;
|
||||
a.forEach(function() {
|
||||
forEachCalled = true;
|
||||
});
|
||||
assertFalse(forEachCalled);
|
||||
}
|
||||
|
||||
|
||||
function testForEachPopulated() {
|
||||
var a = new ol.Array();
|
||||
a.push(1);
|
||||
a.push(2);
|
||||
var forEachCount = 0;
|
||||
a.forEach(function() {
|
||||
++forEachCount;
|
||||
});
|
||||
assertEquals(2, forEachCount);
|
||||
}
|
||||
|
||||
|
||||
function testSetAtEvent() {
|
||||
var a = new ol.Array(['a', 'b']);
|
||||
var index, prev;
|
||||
goog.events.listen(a, ol.ArrayEventType.SET_AT, function(e) {
|
||||
index = e.index;
|
||||
prev = e.prev;
|
||||
});
|
||||
a.setAt(1, 1);
|
||||
assertEquals(1, index);
|
||||
assertEquals('b', prev);
|
||||
}
|
||||
|
||||
|
||||
function testRemoveAtEvent() {
|
||||
var a = new ol.Array(['a']);
|
||||
var index, prev;
|
||||
goog.events.listen(a, ol.ArrayEventType.REMOVE_AT, function(e) {
|
||||
index = e.index;
|
||||
prev = e.prev;
|
||||
});
|
||||
a.pop();
|
||||
assertEquals(0, index);
|
||||
assertEquals('a', prev);
|
||||
}
|
||||
|
||||
|
||||
function testInsertAtEvent() {
|
||||
var a = new ol.Array([0, 2]);
|
||||
var index;
|
||||
goog.events.listen(a, ol.ArrayEventType.INSERT_AT, function(e) {
|
||||
index = e.index;
|
||||
});
|
||||
a.insertAt(1, 1);
|
||||
assertEquals(1, index);
|
||||
}
|
||||
|
||||
|
||||
function testSetAtBeyondEnd() {
|
||||
var a = new ol.Array();
|
||||
var inserts = [];
|
||||
a.insert_at = function(index) {
|
||||
inserts.push(index);
|
||||
};
|
||||
a.setAt(2, 0);
|
||||
assertEquals(3, a.getLength());
|
||||
assertUndefined(a.getAt(0));
|
||||
assertUndefined(a.getAt(1));
|
||||
assertEquals(0, a.getAt(2));
|
||||
assertEquals(3, inserts.length);
|
||||
assertEquals(0, inserts[0]);
|
||||
assertEquals(1, inserts[1]);
|
||||
assertEquals(2, inserts[2]);
|
||||
}
|
||||
|
||||
|
||||
function testCreateFromArray() {
|
||||
var a = [0, 1, 2];
|
||||
var array = ol.Array.create(a);
|
||||
assertTrue(array instanceof ol.Array);
|
||||
assertEquals(3, array.getLength());
|
||||
assertEquals(0, array.getAt(0));
|
||||
assertEquals(1, array.getAt(1));
|
||||
assertEquals(2, array.getAt(2));
|
||||
}
|
||||
|
||||
|
||||
function testCreateFromArray() {
|
||||
var array1 = new ol.Array();
|
||||
var array2 = ol.Array.create(array1);
|
||||
assertTrue(array1 === array2);
|
||||
}
|
||||
|
||||
|
||||
function testLengthChangeInsertAt() {
|
||||
var array = ol.Array.create([0, 1, 2]);
|
||||
var lengthChangedCalled;
|
||||
array.length_changed = function() {
|
||||
lengthChangedCalled = true;
|
||||
};
|
||||
array.insertAt(2, 3);
|
||||
assertTrue(lengthChangedCalled);
|
||||
}
|
||||
|
||||
|
||||
function testLengthChangeRemoveAt() {
|
||||
var array = ol.Array.create([0, 1, 2]);
|
||||
var lengthChangedCalled;
|
||||
array.length_changed = function() {
|
||||
lengthChangedCalled = true;
|
||||
};
|
||||
array.removeAt(0);
|
||||
assertTrue(lengthChangedCalled);
|
||||
}
|
||||
|
||||
|
||||
function testLengthChangeSetAt() {
|
||||
var array = ol.Array.create([0, 1, 2]);
|
||||
var lengthChangedCalled;
|
||||
array.length_changed = function() {
|
||||
lengthChangedCalled = true;
|
||||
};
|
||||
array.setAt(1, 1);
|
||||
assertUndefined(lengthChangedCalled);
|
||||
}
|
||||
|
||||
|
||||
function testForEach() {
|
||||
var array = ol.Array.create([1, 2, 4]);
|
||||
var sum = 0;
|
||||
array.forEach(function(elem) {
|
||||
sum += elem;
|
||||
});
|
||||
assertEquals(7, sum);
|
||||
}
|
||||
|
||||
|
||||
function testForEachScope() {
|
||||
var array = ol.Array.create([0]);
|
||||
var that;
|
||||
var uniqueObj = {};
|
||||
array.forEach(function(elem) {
|
||||
that = this;
|
||||
}, uniqueObj);
|
||||
assertTrue(that === uniqueObj);
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
goog.provide('ol.Color');
|
||||
|
||||
goog.require('goog.color');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @param {number} r Red.
|
||||
* @param {number} g Green.
|
||||
* @param {number} b Blue.
|
||||
* @param {number} a Alpha.
|
||||
*/
|
||||
ol.Color = function(r, g, b, a) {
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
this.r = r;
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
this.g = g;
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
this.b = b;
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
this.a = a;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} str String.
|
||||
* @param {number=} opt_a Alpha.
|
||||
* @return {ol.Color} Color.
|
||||
*/
|
||||
ol.Color.createFromString = function(str, opt_a) {
|
||||
var rgb = goog.color.hexToRgb(goog.color.parse(str).hex);
|
||||
var a = goog.isDef(opt_a) ? opt_a : 255;
|
||||
return new ol.Color(rgb[0], rgb[1], rgb[2], a);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Color} Clone.
|
||||
*/
|
||||
ol.Color.prototype.clone = function() {
|
||||
return new ol.Color(this.r, this.g, this.b, this.a);
|
||||
};
|
||||
@@ -0,0 +1,24 @@
|
||||
goog.provide('ol.Coordinate');
|
||||
|
||||
goog.require('goog.math.Coordinate');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {goog.math.Coordinate}
|
||||
* @param {number} x X.
|
||||
* @param {number} y Y.
|
||||
*/
|
||||
ol.Coordinate = function(x, y) {
|
||||
goog.base(this, x, y);
|
||||
};
|
||||
goog.inherits(ol.Coordinate, goog.math.Coordinate);
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Coordinate} Clone.
|
||||
*/
|
||||
ol.Coordinate.prototype.clone = function() {
|
||||
return new ol.Coordinate(this.x, this.y);
|
||||
};
|
||||
@@ -0,0 +1,128 @@
|
||||
goog.provide('ol.RendererHint');
|
||||
goog.provide('ol.createMap');
|
||||
|
||||
goog.require('goog.object');
|
||||
goog.require('ol.Array');
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.MapProperty');
|
||||
goog.require('ol.Projection');
|
||||
goog.require('ol.control.DblClickZoom');
|
||||
goog.require('ol.control.DragPan');
|
||||
goog.require('ol.control.DragZoom');
|
||||
goog.require('ol.control.MouseWheelZoom');
|
||||
goog.require('ol.dom');
|
||||
goog.require('ol.dom.Map');
|
||||
goog.require('ol.webgl');
|
||||
goog.require('ol.webgl.Map');
|
||||
|
||||
|
||||
/**
|
||||
* @define {string} Default projection code.
|
||||
*/
|
||||
ol.DEFAULT_PROJECTION_CODE = 'EPSG:3857';
|
||||
|
||||
|
||||
/**
|
||||
* @define {string} Default user projection code.
|
||||
*/
|
||||
ol.DEFAULT_USER_PROJECTION_CODE = 'EPSG:4326';
|
||||
|
||||
|
||||
/**
|
||||
* @define {boolean} Whether to enable DOM.
|
||||
*/
|
||||
ol.ENABLE_DOM = true;
|
||||
|
||||
|
||||
/**
|
||||
* @define {boolean} Whether to enable WebGL.
|
||||
*/
|
||||
ol.ENABLE_WEBGL = true;
|
||||
|
||||
|
||||
/**
|
||||
* @enum {string}
|
||||
*/
|
||||
ol.RendererHint = {
|
||||
DOM: 'dom',
|
||||
WEBGL: 'webgl'
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @type {Array.<ol.RendererHint>}}
|
||||
*/
|
||||
ol.DEFAULT_RENDERER_HINT = [
|
||||
ol.RendererHint.WEBGL,
|
||||
ol.RendererHint.DOM
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* @param {!HTMLDivElement} target Target.
|
||||
* @param {Object.<string, *>=} opt_values Values.
|
||||
* @param {ol.RendererHint|Array.<ol.RendererHint>=} opt_rendererHints
|
||||
* Renderer hints.
|
||||
* @return {ol.Map} Map.
|
||||
*/
|
||||
ol.createMap = function(target, opt_values, opt_rendererHints) {
|
||||
|
||||
var values = {};
|
||||
if (goog.isDef(opt_values)) {
|
||||
goog.object.extend(values, opt_values);
|
||||
}
|
||||
|
||||
if (!goog.object.containsKey(values, ol.MapProperty.CONTROLS)) {
|
||||
var controls = new ol.Array();
|
||||
controls.push(new ol.control.DblClickZoom());
|
||||
controls.push(new ol.control.DragPan());
|
||||
controls.push(new ol.control.DragZoom());
|
||||
controls.push(new ol.control.MouseWheelZoom());
|
||||
values[ol.MapProperty.CONTROLS] = controls;
|
||||
}
|
||||
|
||||
if (!goog.object.containsKey(values, ol.MapProperty.LAYERS)) {
|
||||
values[ol.MapProperty.LAYERS] = new ol.Array();
|
||||
}
|
||||
|
||||
if (!goog.object.containsKey(values, ol.MapProperty.PROJECTION)) {
|
||||
values[ol.MapProperty.PROJECTION] =
|
||||
ol.Projection.getFromCode(ol.DEFAULT_PROJECTION_CODE);
|
||||
}
|
||||
|
||||
if (!goog.object.containsKey(values, ol.MapProperty.USER_PROJECTION)) {
|
||||
values[ol.MapProperty.USER_PROJECTION] =
|
||||
ol.Projection.getFromCode(ol.DEFAULT_USER_PROJECTION_CODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @type {Array.<ol.RendererHint>}
|
||||
*/
|
||||
var rendererHints;
|
||||
if (goog.isDef(opt_rendererHints)) {
|
||||
if (goog.isArray(opt_rendererHints)) {
|
||||
rendererHints = opt_rendererHints;
|
||||
} else {
|
||||
rendererHints = [opt_rendererHints];
|
||||
}
|
||||
} else {
|
||||
rendererHints = ol.DEFAULT_RENDERER_HINT;
|
||||
}
|
||||
|
||||
var i, rendererHint;
|
||||
for (i = 0; i < rendererHints.length; ++i) {
|
||||
rendererHint = rendererHints[i];
|
||||
if (rendererHint == ol.RendererHint.DOM) {
|
||||
if (ol.ENABLE_DOM && ol.dom.isSupported()) {
|
||||
return new ol.dom.Map(target, values);
|
||||
}
|
||||
} else if (rendererHint == ol.RendererHint.WEBGL) {
|
||||
if (ol.ENABLE_WEBGL && ol.webgl.isSupported()) {
|
||||
return new ol.webgl.Map(target, values);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
};
|
||||
@@ -0,0 +1,59 @@
|
||||
goog.provide('ol.Extent');
|
||||
|
||||
goog.require('ol.Coordinate');
|
||||
goog.require('ol.Rectangle');
|
||||
goog.require('ol.TransformFunction');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {ol.Rectangle}
|
||||
* @param {number} minX Minimum X.
|
||||
* @param {number} minY Minimum Y.
|
||||
* @param {number} maxX Maximum X.
|
||||
* @param {number} maxY Maximum Y.
|
||||
*/
|
||||
ol.Extent = function(minX, minY, maxX, maxY) {
|
||||
goog.base(this, minX, minY, maxX, maxY);
|
||||
};
|
||||
goog.inherits(ol.Extent, ol.Rectangle);
|
||||
|
||||
|
||||
/**
|
||||
* @param {...ol.Coordinate} var_args Coordinates.
|
||||
* @return {!ol.Extent} Bounding extent.
|
||||
*/
|
||||
ol.Extent.boundingExtent = function(var_args) {
|
||||
var coordinate0 = arguments[0];
|
||||
var extent = new ol.Extent(coordinate0.x, coordinate0.y,
|
||||
coordinate0.x, coordinate0.y);
|
||||
var i;
|
||||
for (i = 1; i < arguments.length; ++i) {
|
||||
var coordinate = arguments[i];
|
||||
extent.minX = Math.min(extent.minX, coordinate.x);
|
||||
extent.minY = Math.min(extent.minY, coordinate.y);
|
||||
extent.maxX = Math.max(extent.maxX, coordinate.x);
|
||||
extent.maxY = Math.max(extent.maxY, coordinate.y);
|
||||
}
|
||||
return extent;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Extent} Extent.
|
||||
*/
|
||||
ol.Extent.prototype.clone = function() {
|
||||
return new ol.Extent(this.minX, this.minY, this.maxX, this.maxY);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.TransformFunction} transform Transform.
|
||||
* @return {ol.Extent} Extent.
|
||||
*/
|
||||
ol.Extent.prototype.transform = function(transform) {
|
||||
var min = transform(new ol.Coordinate(this.minX, this.minY));
|
||||
var max = transform(new ol.Coordinate(this.maxX, this.maxY));
|
||||
return new ol.Extent(min.x, min.y, max.x, max.y);
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
goog.require('goog.testing.jsunit');
|
||||
goog.require('ol.Extent');
|
||||
goog.require('ol.Projection');
|
||||
|
||||
|
||||
function testClone() {
|
||||
var extent = new ol.Extent(1, 2, 3, 4);
|
||||
var clonedExtent = extent.clone();
|
||||
assertTrue(clonedExtent instanceof ol.Extent);
|
||||
assertFalse(clonedExtent === extent);
|
||||
assertEquals(extent.minX, clonedExtent.minX);
|
||||
assertEquals(extent.minY, clonedExtent.minY);
|
||||
assertEquals(extent.maxX, clonedExtent.maxX);
|
||||
assertEquals(extent.maxY, clonedExtent.maxY);
|
||||
}
|
||||
|
||||
|
||||
function testTransform() {
|
||||
var transform = ol.Projection.getTransformFromCodes('EPSG:4326', 'EPSG:3857');
|
||||
var sourceExtent = new ol.Extent(-15, -30, 45, 60);
|
||||
var destinationExtent = sourceExtent.transform(transform);
|
||||
assertNotNullNorUndefined(destinationExtent);
|
||||
// FIXME check values with third-party tool
|
||||
assertRoughlyEquals(-1669792.3618991037, destinationExtent.minX, 1e-9);
|
||||
assertRoughlyEquals(-3503549.843504376, destinationExtent.minY, 1e-9);
|
||||
assertRoughlyEquals(5009377.085697311, destinationExtent.maxX, 1e-9);
|
||||
assertRoughlyEquals(8399737.889818361, destinationExtent.maxY, 1e-9);
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
goog.provide('ol.Layer');
|
||||
goog.provide('ol.LayerProperty');
|
||||
|
||||
goog.require('ol.Object');
|
||||
goog.require('ol.Store');
|
||||
|
||||
|
||||
/**
|
||||
* @enum {string}
|
||||
*/
|
||||
ol.LayerProperty = {
|
||||
OPACITY: 'opacity',
|
||||
VISIBLE: 'visible'
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {ol.Object}
|
||||
* @param {ol.Store} store Store.
|
||||
* @param {Object.<string, *>=} opt_values Values.
|
||||
*/
|
||||
ol.Layer = function(store, opt_values) {
|
||||
|
||||
goog.base(this);
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {ol.Store}
|
||||
*/
|
||||
this.store_ = store;
|
||||
|
||||
this.setVisible(true);
|
||||
this.setOpacity(1);
|
||||
|
||||
if (goog.isDef(opt_values)) {
|
||||
this.setValues(opt_values);
|
||||
}
|
||||
|
||||
};
|
||||
goog.inherits(ol.Layer, ol.Object);
|
||||
|
||||
|
||||
/**
|
||||
* @return {number} Opacity.
|
||||
*/
|
||||
ol.Layer.prototype.getOpacity = function() {
|
||||
return /** @type {number} */ (
|
||||
this.get(ol.LayerProperty.OPACITY));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Store} Store.
|
||||
*/
|
||||
ol.Layer.prototype.getStore = function() {
|
||||
return this.store_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {boolean} Visible.
|
||||
*/
|
||||
ol.Layer.prototype.getVisible = function() {
|
||||
return /** @type {boolean} */ (
|
||||
this.get(ol.LayerProperty.VISIBLE));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {number} opacity Opacity.
|
||||
*/
|
||||
ol.Layer.prototype.setOpacity = function(opacity) {
|
||||
this.set(ol.LayerProperty.OPACITY, opacity);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {boolean} visible Visible.
|
||||
*/
|
||||
ol.Layer.prototype.setVisible = function(visible) {
|
||||
this.set(ol.LayerProperty.VISIBLE, visible);
|
||||
};
|
||||
@@ -0,0 +1,818 @@
|
||||
// FIXME rename freeze/thaw to freezeRendering/unfreezeRendering
|
||||
// FIXME add change resolution by zoom step function
|
||||
// FIXME recheck layer/map projection compatability when projection changes
|
||||
// FIXME layer renderers should skip when they can't reproject
|
||||
|
||||
goog.provide('ol.Map');
|
||||
goog.provide('ol.MapProperty');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.dom.ViewportSizeMonitor');
|
||||
goog.require('goog.events');
|
||||
goog.require('goog.events.BrowserEvent');
|
||||
goog.require('goog.events.Event');
|
||||
goog.require('goog.events.EventType');
|
||||
goog.require('goog.events.MouseWheelEvent');
|
||||
goog.require('goog.events.MouseWheelHandler');
|
||||
goog.require('goog.events.MouseWheelHandler.EventType');
|
||||
goog.require('goog.fx.anim');
|
||||
goog.require('goog.fx.anim.Animated');
|
||||
goog.require('goog.object');
|
||||
goog.require('ol.Array');
|
||||
goog.require('ol.Color');
|
||||
goog.require('ol.Control');
|
||||
goog.require('ol.Coordinate');
|
||||
goog.require('ol.Extent');
|
||||
goog.require('ol.LayerRenderer');
|
||||
goog.require('ol.Object');
|
||||
goog.require('ol.Projection');
|
||||
goog.require('ol.Size');
|
||||
goog.require('ol.TransformFunction');
|
||||
|
||||
|
||||
/**
|
||||
* @enum {string}
|
||||
*/
|
||||
ol.MapProperty = {
|
||||
BACKGROUND_COLOR: 'backgroundColor',
|
||||
CENTER: 'center',
|
||||
CONTROLS: 'controls',
|
||||
EXTENT: 'extent',
|
||||
LAYERS: 'layers',
|
||||
PROJECTION: 'projection',
|
||||
RESOLUTION: 'resolution',
|
||||
SIZE: 'size',
|
||||
USER_PROJECTION: 'userProjection'
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @enum {number}
|
||||
*/
|
||||
ol.MapPaneZIndex = {
|
||||
EVENTS: 1000
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {ol.Object}
|
||||
* @param {HTMLDivElement} target Target.
|
||||
* @param {Object=} opt_values Values.
|
||||
* @param {goog.dom.ViewportSizeMonitor=} opt_viewportSizeMonitor
|
||||
* Viewport size monitor.
|
||||
*/
|
||||
ol.Map = function(target, opt_values, opt_viewportSizeMonitor) {
|
||||
|
||||
goog.base(this);
|
||||
|
||||
/**
|
||||
* @type {ol.TransformFunction}
|
||||
* @private
|
||||
*/
|
||||
this.userToMapTransform_ = ol.Projection.identityTransform;
|
||||
|
||||
/**
|
||||
* @type {ol.TransformFunction}
|
||||
* @private
|
||||
*/
|
||||
this.mapToUserTransform_ = ol.Projection.cloneTransform;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {HTMLDivElement}
|
||||
*/
|
||||
this.eventsPane_ = /** @type {HTMLDivElement} */ (
|
||||
goog.dom.createElement(goog.dom.TagName.DIV));
|
||||
this.eventsPane_.className = 'ol-pane-events';
|
||||
this.eventsPane_.style.position = 'absolute';
|
||||
this.eventsPane_.style.width = '100%';
|
||||
this.eventsPane_.style.height = '100%';
|
||||
this.eventsPane_.style.zIndex = ol.MapPaneZIndex.EVENTS;
|
||||
target.appendChild(this.eventsPane_);
|
||||
|
||||
goog.events.listen(this.eventsPane_, [
|
||||
goog.events.EventType.DBLCLICK,
|
||||
goog.events.EventType.MOUSEDOWN,
|
||||
goog.events.EventType.MOUSEMOVE,
|
||||
goog.events.EventType.MOUSEOUT,
|
||||
goog.events.EventType.MOUSEUP
|
||||
], this.handleBrowserEvent, false, this);
|
||||
|
||||
var mouseWheelHandler = new goog.events.MouseWheelHandler(this.eventsPane_);
|
||||
goog.events.listen(mouseWheelHandler,
|
||||
goog.events.MouseWheelHandler.EventType.MOUSEWHEEL,
|
||||
this.handleBrowserEvent, false, this);
|
||||
this.registerDisposable(mouseWheelHandler);
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {goog.fx.anim.Animated}
|
||||
*/
|
||||
this.animation_ = new ol.MapAnimation(this);
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.animating_ = false;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {number}
|
||||
*/
|
||||
this.freezeCount_ = 0;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {HTMLDivElement}
|
||||
*/
|
||||
this.target_ = target;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Array.<number>}
|
||||
*/
|
||||
this.layersListenerKeys_ = null;
|
||||
|
||||
/**
|
||||
* @protected
|
||||
* @type {Object.<number, ol.LayerRenderer>}
|
||||
*/
|
||||
this.layerRenderers = {};
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {goog.dom.ViewportSizeMonitor}
|
||||
*/
|
||||
this.viewportSizeMonitor_ = goog.isDef(opt_viewportSizeMonitor) ?
|
||||
opt_viewportSizeMonitor : new goog.dom.ViewportSizeMonitor();
|
||||
|
||||
goog.events.listen(this.viewportSizeMonitor_, goog.events.EventType.RESIZE,
|
||||
this.handleViewportResize, false, this);
|
||||
|
||||
goog.events.listen(this,
|
||||
ol.Object.getChangedEventType(ol.MapProperty.BACKGROUND_COLOR),
|
||||
this.handleBackgroundColorChanged, false, this);
|
||||
|
||||
goog.events.listen(
|
||||
this, ol.Object.getChangedEventType(ol.MapProperty.CENTER),
|
||||
this.handleCenterChanged, false, this);
|
||||
|
||||
goog.events.listen(
|
||||
this, ol.Object.getChangedEventType(ol.MapProperty.LAYERS),
|
||||
this.handleLayersChanged, false, this);
|
||||
|
||||
goog.events.listen(
|
||||
this, ol.Object.getChangedEventType(ol.MapProperty.PROJECTION),
|
||||
this.handleProjectionChanged, false, this);
|
||||
|
||||
goog.events.listen(
|
||||
this, ol.Object.getChangedEventType(ol.MapProperty.RESOLUTION),
|
||||
this.handleResolutionChanged, false, this);
|
||||
|
||||
goog.events.listen(
|
||||
this, ol.Object.getChangedEventType(ol.MapProperty.SIZE),
|
||||
this.handleSizeChanged, false, this);
|
||||
|
||||
goog.events.listen(
|
||||
this, ol.Object.getChangedEventType(ol.MapProperty.USER_PROJECTION),
|
||||
this.handleUserProjectionChanged, false, this);
|
||||
|
||||
if (goog.isDef(opt_values)) {
|
||||
this.setValues(opt_values);
|
||||
}
|
||||
|
||||
};
|
||||
goog.inherits(ol.Map, ol.Object);
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
ol.Map.prototype.animate_ = function() {
|
||||
goog.asserts.assert(!this.animating_);
|
||||
goog.fx.anim.registerAnimation(this.animation_);
|
||||
this.animating_ = true;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Layer} layer Layer.
|
||||
* @protected
|
||||
* @return {ol.LayerRenderer} layerRenderer Layer renderer.
|
||||
*/
|
||||
ol.Map.prototype.createLayerRenderer = goog.abstractMethod;
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
ol.Map.prototype.freeze = function() {
|
||||
++this.freezeCount_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.Map.prototype.disposeInternal = function() {
|
||||
goog.object.forEach(this.layerRenderers, function(layerRenderer) {
|
||||
goog.dispose(layerRenderer);
|
||||
});
|
||||
goog.base(this, 'disposeInternal');
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Extent} extent Extent.
|
||||
*/
|
||||
ol.Map.prototype.fitExtent = function(extent) {
|
||||
this.whileFrozen(function() {
|
||||
this.setCenter(extent.getCenter());
|
||||
this.setResolution(this.getResolutionForExtent(extent));
|
||||
}, this);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Extent} userExtent Extent in user projection.
|
||||
*/
|
||||
ol.Map.prototype.fitUserExtent = function(userExtent) {
|
||||
this.fitExtent(userExtent.transform(this.userToMapTransform_));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {function(this: T, ol.Layer, ol.LayerRenderer, number)} f Function.
|
||||
* @param {T=} opt_obj Object.
|
||||
* @template T
|
||||
*/
|
||||
ol.Map.prototype.forEachVisibleLayer = function(f, opt_obj) {
|
||||
var layers = this.getLayers();
|
||||
layers.forEach(function(layer, index) {
|
||||
if (layer.getVisible()) {
|
||||
var layerRenderer = this.getLayerRenderer(layer);
|
||||
f.call(opt_obj, layer, layerRenderer, index);
|
||||
}
|
||||
}, this);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Color|undefined} Background color.
|
||||
*/
|
||||
ol.Map.prototype.getBackgroundColor = function() {
|
||||
return /** @type {ol.Color|undefined} */ (
|
||||
this.get(ol.MapProperty.BACKGROUND_COLOR));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Coordinate|undefined} Center.
|
||||
*/
|
||||
ol.Map.prototype.getCenter = function() {
|
||||
return /** @type {ol.Coordinate} */ (this.get(ol.MapProperty.CENTER));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Array} Controls.
|
||||
*/
|
||||
ol.Map.prototype.getControls = function() {
|
||||
return /** @type {ol.Array} */ this.get(ol.MapProperty.CONTROLS);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Coordinate} pixel Pixel.
|
||||
* @return {ol.Coordinate} Coordinate.
|
||||
*/
|
||||
ol.Map.prototype.getCoordinateFromPixel = function(pixel) {
|
||||
var center = this.getCenter();
|
||||
goog.asserts.assert(goog.isDef(center));
|
||||
var resolution = this.getResolution();
|
||||
goog.asserts.assert(goog.isDef(resolution));
|
||||
var size = this.getSize();
|
||||
goog.asserts.assert(goog.isDef(size));
|
||||
var x = center.x + resolution * (pixel.x - size.width / 2);
|
||||
var y = center.y - resolution * (pixel.y - size.height / 2);
|
||||
return new ol.Coordinate(x, y);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Extent|undefined} Extent.
|
||||
*/
|
||||
ol.Map.prototype.getExtent = function() {
|
||||
return /** @type {ol.Extent} */ (this.get(ol.MapProperty.EXTENT));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Layer} layer Layer.
|
||||
* @protected
|
||||
* @return {ol.LayerRenderer} Layer renderer.
|
||||
*/
|
||||
ol.Map.prototype.getLayerRenderer = function(layer) {
|
||||
var key = goog.getUid(layer);
|
||||
var layerRenderer = this.layerRenderers[key];
|
||||
goog.asserts.assert(goog.isDef(layerRenderer));
|
||||
return layerRenderer;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Array} Layers.
|
||||
*/
|
||||
ol.Map.prototype.getLayers = function() {
|
||||
return /** @type {ol.Array} */ (this.get(ol.MapProperty.LAYERS));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Coordinate} coordinate Coordinate.
|
||||
* @return {ol.Coordinate} Pixel.
|
||||
*/
|
||||
ol.Map.prototype.getPixelFromCoordinate = function(coordinate) {
|
||||
var center = this.getCenter();
|
||||
goog.asserts.assert(goog.isDef(center));
|
||||
var resolution = this.getResolution();
|
||||
goog.asserts.assert(goog.isDef(resolution));
|
||||
var size = this.getSize();
|
||||
goog.asserts.assert(goog.isDef(size));
|
||||
var x = (coordinate.x - center.x) / resolution + size.width / 2;
|
||||
var y = (center.y - coordinate.y) / resolution + size.height / 2;
|
||||
return new ol.Coordinate(x, y);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Projection|undefined} Projection.
|
||||
*/
|
||||
ol.Map.prototype.getProjection = function() {
|
||||
return /** @type {ol.Projection} */ (this.get(ol.MapProperty.PROJECTION));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {number|undefined} Resolution.
|
||||
*/
|
||||
ol.Map.prototype.getResolution = function() {
|
||||
return /** @type {number} */ (this.get(ol.MapProperty.RESOLUTION));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Extent} extent Extent.
|
||||
* @return {number} Resolution.
|
||||
*/
|
||||
ol.Map.prototype.getResolutionForExtent = function(extent) {
|
||||
var size = this.getSize();
|
||||
goog.asserts.assert(goog.isDef(size));
|
||||
var xResolution = (extent.maxX - extent.minX) / size.width;
|
||||
var yResolution = (extent.maxY - extent.minY) / size.height;
|
||||
return Math.max(xResolution, yResolution);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Size|undefined} Size.
|
||||
*/
|
||||
ol.Map.prototype.getSize = function() {
|
||||
return /** @type {ol.Size|undefined} */ this.get(ol.MapProperty.SIZE);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {HTMLDivElement} Target.
|
||||
*/
|
||||
ol.Map.prototype.getTarget = function() {
|
||||
return this.target_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Coordinate|undefined} Center in user projection.
|
||||
*/
|
||||
ol.Map.prototype.getUserCenter = function() {
|
||||
var center = this.getCenter();
|
||||
if (goog.isDef(center)) {
|
||||
return this.mapToUserTransform_(center);
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Extent|undefined} Extent in user projection.
|
||||
*/
|
||||
ol.Map.prototype.getUserExtent = function() {
|
||||
var extent = this.getExtent();
|
||||
if (goog.isDef(extent)) {
|
||||
return extent.transform(this.mapToUserTransform_);
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Projection|undefined} Projection.
|
||||
*/
|
||||
ol.Map.prototype.getUserProjection = function() {
|
||||
return /** @type {ol.Projection} */ this.get(ol.MapProperty.USER_PROJECTION);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
ol.Map.prototype.handleBackgroundColorChanged = goog.nullFunction;
|
||||
|
||||
|
||||
/**
|
||||
* @param {goog.events.BrowserEvent} event Event.
|
||||
*/
|
||||
ol.Map.prototype.handleBrowserEvent = function(event) {
|
||||
var mapBrowserEvent = new ol.MapBrowserEvent(event.type, this, event);
|
||||
var controls = this.getControls();
|
||||
var controlsArray = /** @type {Array.<ol.Control>} */ controls.getArray();
|
||||
goog.array.every(controlsArray, function(control) {
|
||||
control.handleMapBrowserEvent(mapBrowserEvent);
|
||||
return !mapBrowserEvent.defaultPrevented;
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.handleCenterChanged = function() {
|
||||
this.recalculateExtent_();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Layer} layer Layer.
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.handleLayerAdd = function(layer) {
|
||||
var projection = this.getProjection();
|
||||
var storeProjection = layer.getStore().getProjection();
|
||||
if (goog.isDef(projection)) {
|
||||
goog.asserts.assert(ol.Projection.equivalent(projection, storeProjection));
|
||||
}
|
||||
var layerRenderer = this.createLayerRenderer(layer);
|
||||
this.setLayerRenderer(layer, layerRenderer);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Layer} layer Layer.
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.handleLayerRemove = function(layer) {
|
||||
this.removeLayerRenderer(layer);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.ArrayEvent} event Event.
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.handleLayersInsertAt = function(event) {
|
||||
var layers = /** @type {ol.Array} */ (event.target);
|
||||
var layer = /** @type {ol.Layer} */ layers.getAt(event.index);
|
||||
this.handleLayerAdd(layer);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.ArrayEvent} event Event.
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.handleLayersRemoveAt = function(event) {
|
||||
var layer = /** @type {ol.Layer} */ (event.prev);
|
||||
this.handleLayerRemove(layer);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.ArrayEvent} event Event.
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.handleLayersSetAt = function(event) {
|
||||
var prevLayer = /** @type {ol.Layer} */ (event.prev);
|
||||
this.handleLayerRemove(prevLayer);
|
||||
var layers = /** @type {ol.Array} */ (event.target);
|
||||
var layer = /** @type {ol.Layer} */ layers.getAt(event.index);
|
||||
this.handleLayerAdd(layer);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
ol.Map.prototype.handleLayersChanged = function() {
|
||||
var layerRenderers = goog.object.getValues(this.layerRenderers);
|
||||
goog.array.forEach(layerRenderers, function(layerRenderer) {
|
||||
this.removeLayerRenderer(layerRenderer);
|
||||
}, this);
|
||||
this.layerRenderers = {};
|
||||
if (!goog.isNull(this.layersListenerKeys_)) {
|
||||
goog.array.forEach(this.layersListenerKeys_, goog.events.unlistenByKey);
|
||||
this.layersListenerKeys_ = null;
|
||||
}
|
||||
var layers = this.getLayers();
|
||||
if (goog.isDefAndNotNull(layers)) {
|
||||
goog.array.forEach(layers.getArray(), function(layer) {
|
||||
var layerRenderer = this.createLayerRenderer(layer);
|
||||
this.setLayerRenderer(layer, layerRenderer);
|
||||
}, this);
|
||||
this.layersListenerKeys_ = [
|
||||
goog.events.listen(layers, ol.ArrayEventType.INSERT_AT,
|
||||
this.handleLayersInsertAt, false, this),
|
||||
goog.events.listen(layers, ol.ArrayEventType.REMOVE_AT,
|
||||
this.handleLayersRemoveAt, false, this),
|
||||
goog.events.listen(layers, ol.ArrayEventType.SET_AT,
|
||||
this.handleLayersSetAt, false, this)
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.handleProjectionChanged = function() {
|
||||
this.recalculateTransforms_();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.handleResolutionChanged = function() {
|
||||
this.recalculateExtent_();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.handleSizeChanged = function() {
|
||||
this.recalculateExtent_();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.handleUserProjectionChanged = function() {
|
||||
this.recalculateTransforms_();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.handleViewportResize = function() {
|
||||
var size = new ol.Size(this.target_.clientWidth, this.target_.clientHeight);
|
||||
this.setSize(size);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
ol.Map.prototype.recalculateExtent_ = function() {
|
||||
var size = this.getSize();
|
||||
var center = this.getCenter();
|
||||
var resolution = this.getResolution();
|
||||
if (!goog.isDef(size) || !goog.isDef(center) || !goog.isDef(resolution)) {
|
||||
if (goog.isDef(this.getExtent())) {
|
||||
this.set(ol.MapProperty.EXTENT, undefined);
|
||||
}
|
||||
} else {
|
||||
var minX = center.x - resolution * size.width / 2;
|
||||
var minY = center.y - resolution * size.height / 2;
|
||||
var maxX = center.x + resolution * size.width / 2;
|
||||
var maxY = center.y + resolution * size.height / 2;
|
||||
var extent = new ol.Extent(minX, minY, maxX, maxY);
|
||||
this.set(ol.MapProperty.EXTENT, extent);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
ol.Map.prototype.recalculateTransforms_ = function() {
|
||||
var projection = this.getProjection();
|
||||
var userProjection = this.getUserProjection();
|
||||
if (goog.isDefAndNotNull(projection) &&
|
||||
goog.isDefAndNotNull(userProjection)) {
|
||||
this.mapToUserTransform_ = ol.Projection.getTransform(
|
||||
projection, userProjection);
|
||||
this.userToMapTransform_ = ol.Projection.getTransform(
|
||||
userProjection, projection);
|
||||
} else {
|
||||
this.mapToUserTransform_ = ol.Projection.cloneTransform;
|
||||
this.userToMapTransform_ = ol.Projection.identityTransform;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
ol.Map.prototype.render = function() {
|
||||
if (!this.animating_) {
|
||||
if (this.freezeCount_ === 0) {
|
||||
if (this.renderInternal()) {
|
||||
this.animate_();
|
||||
}
|
||||
} else {
|
||||
this.dirty_ = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @protected
|
||||
* @return {boolean} Animating.
|
||||
*/
|
||||
ol.Map.prototype.renderInternal = function() {
|
||||
|
||||
this.dirty_ = false;
|
||||
|
||||
var animate = false;
|
||||
|
||||
this.forEachVisibleLayer(function(layer, layerRenderer) {
|
||||
if (layerRenderer.render()) {
|
||||
animate = true;
|
||||
}
|
||||
});
|
||||
|
||||
return animate;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Layer} layer Layer.
|
||||
* @return {ol.LayerRenderer} Layer renderer.
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.removeLayerRenderer = function(layer) {
|
||||
var key = goog.getUid(layer);
|
||||
if (key in this.layerRenderers) {
|
||||
var layerRenderer = this.layerRenderers[key];
|
||||
delete this.layerRenderers[key];
|
||||
return layerRenderer;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Color} backgroundColor Background color.
|
||||
*/
|
||||
ol.Map.prototype.setBackgroundColor = function(backgroundColor) {
|
||||
this.set(ol.MapProperty.BACKGROUND_COLOR, backgroundColor);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Coordinate} center Center.
|
||||
*/
|
||||
ol.Map.prototype.setCenter = function(center) {
|
||||
this.set(ol.MapProperty.CENTER, center);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Array} controls Controls.
|
||||
*/
|
||||
ol.Map.prototype.setControls = function(controls) {
|
||||
this.set(ol.MapProperty.CONTROLS, controls);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Layer} layer Layer.
|
||||
* @param {ol.LayerRenderer} layerRenderer Layer renderer.
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.setLayerRenderer = function(layer, layerRenderer) {
|
||||
var key = goog.getUid(layer);
|
||||
goog.asserts.assert(!(key in this.layerRenderers));
|
||||
this.layerRenderers[key] = layerRenderer;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Array} layers Layers.
|
||||
*/
|
||||
ol.Map.prototype.setLayers = function(layers) {
|
||||
this.set(ol.MapProperty.LAYERS, layers);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {number} resolution Resolution.
|
||||
*/
|
||||
ol.Map.prototype.setResolution = function(resolution) {
|
||||
this.set(ol.MapProperty.RESOLUTION, resolution);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Size} size Size.
|
||||
*/
|
||||
ol.Map.prototype.setSize = function(size) {
|
||||
var currentSize = this.getSize();
|
||||
if (!goog.isDef(currentSize) || !currentSize.equals(size)) {
|
||||
this.set(ol.MapProperty.SIZE, size);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Projection} projection Projection.
|
||||
*/
|
||||
ol.Map.prototype.setProjection = function(projection) {
|
||||
this.set(ol.MapProperty.PROJECTION, projection);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Coordinate} userCenter Center in user projection.
|
||||
*/
|
||||
ol.Map.prototype.setUserCenter = function(userCenter) {
|
||||
this.setCenter(this.userToMapTransform_(userCenter));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Projection} userProjection User projection.
|
||||
*/
|
||||
ol.Map.prototype.setUserProjection = function(userProjection) {
|
||||
this.set(ol.MapProperty.USER_PROJECTION, userProjection);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {function(this: T)} f Function.
|
||||
* @param {T=} opt_obj Object.
|
||||
* @template T
|
||||
*/
|
||||
ol.Map.prototype.whileFrozen = function(f, opt_obj) {
|
||||
this.freeze();
|
||||
try {
|
||||
f.call(opt_obj);
|
||||
} finally {
|
||||
this.thaw();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
ol.Map.prototype.thaw = function() {
|
||||
goog.asserts.assert(this.freezeCount_ > 0);
|
||||
if (--this.freezeCount_ === 0) {
|
||||
if (!this.animating_ && this.dirty_) {
|
||||
if (this.renderInternal()) {
|
||||
this.animate_();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @implements {goog.fx.anim.Animated}
|
||||
* @param {!ol.Map} map Map.
|
||||
*/
|
||||
ol.MapAnimation = function(map) {
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {ol.Map}
|
||||
*/
|
||||
this.map_ = map;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.MapAnimation.prototype.onAnimationFrame = function() {
|
||||
if (!this.map_.renderInternal()) {
|
||||
goog.fx.anim.unregisterAnimation(this);
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,59 @@
|
||||
goog.provide('ol.MapBrowserEvent');
|
||||
|
||||
goog.require('goog.events.BrowserEvent');
|
||||
goog.require('ol.Coordinate');
|
||||
goog.require('ol.MapEvent');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {ol.MapEvent}
|
||||
* @param {string} type Event type.
|
||||
* @param {ol.Map} map Map.
|
||||
* @param {goog.events.BrowserEvent} browserEventObject Browser event object.
|
||||
*/
|
||||
ol.MapBrowserEvent = function(type, map, browserEventObject) {
|
||||
|
||||
goog.base(this, type, map);
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {goog.events.BrowserEvent}
|
||||
*/
|
||||
this.browserEventObject_ = browserEventObject;
|
||||
|
||||
};
|
||||
goog.inherits(ol.MapBrowserEvent, ol.MapEvent);
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {ol.Coordinate}
|
||||
*/
|
||||
ol.MapBrowserEvent.prototype.coordinate_;
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Coordinate} Coordinate.
|
||||
*/
|
||||
ol.MapBrowserEvent.prototype.getCoordinate = function() {
|
||||
if (goog.isDef(this.coordinate_)) {
|
||||
return this.coordinate_;
|
||||
} else {
|
||||
var browserEventObject = this.getBrowserEventObject();
|
||||
var pixel = new ol.Coordinate(
|
||||
browserEventObject.offsetX, browserEventObject.offsetY);
|
||||
var coordinate = this.map.getCoordinateFromPixel(pixel);
|
||||
this.coordinate_ = coordinate;
|
||||
return coordinate;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {goog.events.BrowserEvent} Browser event object.
|
||||
*/
|
||||
ol.MapBrowserEvent.prototype.getBrowserEventObject = function() {
|
||||
return this.browserEventObject_;
|
||||
};
|
||||
@@ -0,0 +1,36 @@
|
||||
goog.provide('ol.MapEvent');
|
||||
|
||||
goog.require('goog.events.Event');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {goog.events.Event}
|
||||
* @param {string} type Event type.
|
||||
* @param {ol.Map} map Map.
|
||||
*/
|
||||
ol.MapEvent = function(type, map) {
|
||||
|
||||
goog.base(this, type);
|
||||
|
||||
/**
|
||||
* @type {ol.Map}
|
||||
*/
|
||||
this.map = map;
|
||||
|
||||
/**
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.defaultPrevented = false;
|
||||
|
||||
};
|
||||
goog.inherits(ol.MapEvent, goog.events.Event);
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
ol.MapEvent.prototype.preventDefault = function() {
|
||||
goog.base(this, 'preventDefault');
|
||||
this.defaultPrevented = true;
|
||||
};
|
||||
@@ -0,0 +1,306 @@
|
||||
|
||||
/**
|
||||
* @fileoverview An implementation of Google Maps' MVCObject.
|
||||
* @see https://developers.google.com/maps/articles/mvcfun
|
||||
* @see https://developers.google.com/maps/documentation/javascript/reference
|
||||
*/
|
||||
|
||||
goog.provide('ol.Object');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.events');
|
||||
goog.require('goog.events.EventTarget');
|
||||
goog.require('goog.object');
|
||||
|
||||
|
||||
/**
|
||||
* @enum {string}
|
||||
*/
|
||||
ol.ObjectProperty = {
|
||||
ACCESSORS: 'ol_accessors_',
|
||||
BINDINGS: 'ol_bindings_'
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {goog.events.EventTarget}
|
||||
* @param {Object.<string, *>=} opt_values Values.
|
||||
*/
|
||||
ol.Object = function(opt_values) {
|
||||
goog.base(this);
|
||||
if (goog.isDef(opt_values)) {
|
||||
this.setValues(opt_values);
|
||||
}
|
||||
};
|
||||
goog.inherits(ol.Object, goog.events.EventTarget);
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} str String.
|
||||
* @return {string} Capitalized string.
|
||||
*/
|
||||
ol.Object.capitalize = function(str) {
|
||||
return str.substr(0, 1).toUpperCase() + str.substr(1);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Object|Object} arg Argument.
|
||||
* @return {ol.Object} Object.
|
||||
*/
|
||||
ol.Object.create = function(arg) {
|
||||
if (arg instanceof ol.Object) {
|
||||
return arg;
|
||||
} else {
|
||||
var object = new ol.Object();
|
||||
object.setOptions(arg);
|
||||
return object;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Object.<string, string>}
|
||||
*/
|
||||
ol.Object.changedEventTypeCache_ = {};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} key Key.
|
||||
* @return {string} Changed name.
|
||||
*/
|
||||
ol.Object.getChangedEventType = function(key) {
|
||||
return ol.Object.changedEventTypeCache_[key] ||
|
||||
(ol.Object.changedEventTypeCache_[key] = key.toLowerCase() + '_changed');
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Object.<string, string>}
|
||||
*/
|
||||
ol.Object.getterNameCache_ = {};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} key String.
|
||||
* @return {string} Getter name.
|
||||
*/
|
||||
ol.Object.getGetterName = function(key) {
|
||||
return ol.Object.getterNameCache_[key] ||
|
||||
(ol.Object.getterNameCache_[key] = 'get' + ol.Object.capitalize(key));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Object.<string, string>}
|
||||
*/
|
||||
ol.Object.changedMethodNameCache_ = {};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} key String.
|
||||
* @return {string} Changed method name.
|
||||
*/
|
||||
ol.Object.getChangedMethodName = function(key) {
|
||||
return ol.Object.changedMethodNameCache_[key] ||
|
||||
(ol.Object.changedMethodNameCache_[key] = key + '_changed');
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Object.<string, string>}
|
||||
*/
|
||||
ol.Object.setterNameCache_ = {};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} key String.
|
||||
* @return {string} Setter name.
|
||||
*/
|
||||
ol.Object.getSetterName = function(key) {
|
||||
return ol.Object.setterNameCache_[key] ||
|
||||
(ol.Object.setterNameCache_[key] = 'set' + ol.Object.capitalize(key));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Object} obj Object.
|
||||
* @return {Object.<string, {target: ol.Object, key: string}>} Accessors.
|
||||
*/
|
||||
ol.Object.getAccessors = function(obj) {
|
||||
return obj[ol.ObjectProperty.ACCESSORS] ||
|
||||
(obj[ol.ObjectProperty.ACCESSORS] = {});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Object} obj Object.
|
||||
* @return {Object.<string, ?number>} Listeners.
|
||||
*/
|
||||
ol.Object.getListeners = function(obj) {
|
||||
return obj[ol.ObjectProperty.BINDINGS] ||
|
||||
(obj[ol.ObjectProperty.BINDINGS] = {});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} key Key.
|
||||
* @param {ol.Object} target Target.
|
||||
* @param {string=} opt_targetKey Target key.
|
||||
* @param {boolean=} opt_noNotify No notify.
|
||||
*/
|
||||
ol.Object.prototype.bindTo =
|
||||
function(key, target, opt_targetKey, opt_noNotify) {
|
||||
var targetKey = goog.isDef(opt_targetKey) ? opt_targetKey : key;
|
||||
this.unbind(key);
|
||||
var eventType = ol.Object.getChangedEventType(targetKey);
|
||||
var listeners = ol.Object.getListeners(this);
|
||||
listeners[key] = goog.events.listen(target, eventType, function() {
|
||||
this.notifyInternal_(key);
|
||||
}, undefined, this);
|
||||
var accessors = ol.Object.getAccessors(this);
|
||||
accessors[key] = {target: target, key: targetKey};
|
||||
var noNotify = goog.isDef(opt_noNotify) ? opt_noNotify : false;
|
||||
if (!noNotify) {
|
||||
this.notifyInternal_(key);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} key Key.
|
||||
*/
|
||||
ol.Object.prototype.changed = function(key) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} key Key.
|
||||
* @return {*} Value.
|
||||
*/
|
||||
ol.Object.prototype.get = function(key) {
|
||||
var accessors = ol.Object.getAccessors(this);
|
||||
if (goog.object.containsKey(accessors, key)) {
|
||||
var accessor = accessors[key];
|
||||
var target = accessor.target;
|
||||
var targetKey = accessor.key;
|
||||
var getterName = ol.Object.getGetterName(targetKey);
|
||||
if (target[getterName]) {
|
||||
return target[getterName]();
|
||||
} else {
|
||||
return target.get(targetKey);
|
||||
}
|
||||
} else {
|
||||
return this[key];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} key Key.
|
||||
*/
|
||||
ol.Object.prototype.notify = function(key) {
|
||||
var accessors = ol.Object.getAccessors(this);
|
||||
if (goog.object.containsKey(accessors, key)) {
|
||||
var accessor = accessors[key];
|
||||
var target = accessor.target;
|
||||
var targetKey = accessor.key;
|
||||
target.notify(targetKey);
|
||||
} else {
|
||||
this.notifyInternal_(key);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} key Key.
|
||||
* @private
|
||||
*/
|
||||
ol.Object.prototype.notifyInternal_ = function(key) {
|
||||
var changedMethodName = ol.Object.getChangedMethodName(key);
|
||||
if (this[changedMethodName]) {
|
||||
this[changedMethodName]();
|
||||
} else {
|
||||
this.changed(key);
|
||||
}
|
||||
var eventType = ol.Object.getChangedEventType(key);
|
||||
this.dispatchEvent(eventType);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} key Key.
|
||||
* @param {*} value Value.
|
||||
*/
|
||||
ol.Object.prototype.set = function(key, value) {
|
||||
var accessors = ol.Object.getAccessors(this);
|
||||
if (goog.object.containsKey(accessors, key)) {
|
||||
var accessor = accessors[key];
|
||||
var target = accessor.target;
|
||||
var targetKey = accessor.key;
|
||||
var setterName = ol.Object.getSetterName(targetKey);
|
||||
if (target[setterName]) {
|
||||
target[setterName](value);
|
||||
} else {
|
||||
target.set(targetKey, value);
|
||||
}
|
||||
} else {
|
||||
this[key] = value;
|
||||
this.notifyInternal_(key);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Object.<string, *>} options Options.
|
||||
*/
|
||||
ol.Object.prototype.setOptions = function(options) {
|
||||
goog.object.forEach(options, function(value, key) {
|
||||
var setterName = ol.Object.getSetterName(key);
|
||||
if (this[setterName]) {
|
||||
this[setterName](value);
|
||||
} else {
|
||||
this.set(key, value);
|
||||
}
|
||||
}, this);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Object.<string, *>} values Values.
|
||||
*/
|
||||
ol.Object.prototype.setValues = ol.Object.prototype.setOptions;
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} key Key.
|
||||
*/
|
||||
ol.Object.prototype.unbind = function(key) {
|
||||
var listeners = ol.Object.getListeners(this);
|
||||
var listener = listeners[key];
|
||||
if (listener) {
|
||||
delete listeners[key];
|
||||
goog.events.unlistenByKey(listener);
|
||||
var value = this.get(key);
|
||||
var accessors = ol.Object.getAccessors(this);
|
||||
delete accessors[key];
|
||||
this[key] = value;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
ol.Object.prototype.unbindAll = function() {
|
||||
var listeners = ol.Object.getListeners(this);
|
||||
var keys = goog.object.getKeys(listeners);
|
||||
goog.array.forEach(keys, function(key) {
|
||||
this.unbind(key);
|
||||
}, this);
|
||||
};
|
||||
@@ -0,0 +1,482 @@
|
||||
goog.require('goog.testing.jsunit');
|
||||
goog.require('ol.Object');
|
||||
|
||||
|
||||
function testModel() {
|
||||
var m = new ol.Object();
|
||||
assertNotNullNorUndefined(m);
|
||||
}
|
||||
|
||||
|
||||
function testGetUndefined() {
|
||||
var m = new ol.Object();
|
||||
assertUndefined(m.get('k'));
|
||||
}
|
||||
|
||||
|
||||
function testGetSetGet() {
|
||||
var m = new ol.Object();
|
||||
assertUndefined(m.get('k'));
|
||||
m.set('k', 1);
|
||||
assertEquals(1, m.get('k'));
|
||||
}
|
||||
|
||||
|
||||
function testSetValues() {
|
||||
var m = new ol.Object();
|
||||
m.setValues({
|
||||
k1: 1,
|
||||
k2: 2
|
||||
});
|
||||
assertEquals(1, m.get('k1'));
|
||||
assertEquals(2, m.get('k2'));
|
||||
}
|
||||
|
||||
function testNotifyCallback() {
|
||||
var m = new ol.Object();
|
||||
var callbackCalled;
|
||||
m.changed = function() {
|
||||
callbackCalled = true;
|
||||
};
|
||||
m.notify('k');
|
||||
assertTrue(callbackCalled);
|
||||
}
|
||||
|
||||
|
||||
function testNotifyKeyCallback() {
|
||||
var m = new ol.Object();
|
||||
var callbackCalled = false;
|
||||
m.k_changed = function() {
|
||||
callbackCalled = true;
|
||||
};
|
||||
m.notify('k');
|
||||
assertTrue(callbackCalled);
|
||||
}
|
||||
|
||||
|
||||
function testNotifyKeyEvent() {
|
||||
var m = new ol.Object();
|
||||
var eventDispatched = false;
|
||||
goog.events.listen(m, 'k_changed', function() {
|
||||
eventDispatched = true;
|
||||
});
|
||||
m.notify('k');
|
||||
assertTrue(eventDispatched);
|
||||
}
|
||||
|
||||
|
||||
function testSetNotifyCallback() {
|
||||
var m = new ol.Object();
|
||||
var callbackCalled;
|
||||
m.changed = function() {
|
||||
callbackCalled = true;
|
||||
};
|
||||
m.set('k', 1);
|
||||
assertTrue(callbackCalled);
|
||||
}
|
||||
|
||||
|
||||
function testSetNotifyKeyCallback() {
|
||||
var m = new ol.Object();
|
||||
var callbackCalled = false;
|
||||
m.k_changed = function(v) {
|
||||
callbackCalled = true;
|
||||
};
|
||||
m.set('k', 1);
|
||||
assertTrue(callbackCalled);
|
||||
}
|
||||
|
||||
|
||||
function testBindSetNotifyKeyCallback() {
|
||||
var m = new ol.Object();
|
||||
var n = new ol.Object();
|
||||
var callbackCalled = false;
|
||||
n.k_changed = function(v) {
|
||||
callbackCalled = true;
|
||||
};
|
||||
n.bindTo('k', m);
|
||||
m.set('k', 1);
|
||||
assertTrue(callbackCalled);
|
||||
}
|
||||
|
||||
|
||||
function testSetNotifyKeyEvent() {
|
||||
var m = new ol.Object();
|
||||
var eventDispatched = false;
|
||||
goog.events.listen(m, 'k_changed', function() {
|
||||
eventDispatched = true;
|
||||
});
|
||||
m.set('k', 1);
|
||||
assertTrue(eventDispatched);
|
||||
}
|
||||
|
||||
|
||||
function testSetBind() {
|
||||
var m = new ol.Object();
|
||||
var n = new ol.Object();
|
||||
m.set('k', 1);
|
||||
assertEquals(1, m.get('k'));
|
||||
assertUndefined(n.get('k'));
|
||||
n.bindTo('k', m);
|
||||
assertEquals(1, m.get('k'));
|
||||
assertEquals(1, n.get('k'));
|
||||
}
|
||||
|
||||
|
||||
function testBindSet() {
|
||||
var m = new ol.Object();
|
||||
var n = new ol.Object();
|
||||
n.bindTo('k', m);
|
||||
m.set('k', 1);
|
||||
assertEquals(1, m.get('k'));
|
||||
assertEquals(1, n.get('k'));
|
||||
}
|
||||
|
||||
|
||||
function testBindSetBackwards() {
|
||||
var m = new ol.Object();
|
||||
var n = new ol.Object();
|
||||
n.bindTo('k', m);
|
||||
n.set('k', 1);
|
||||
assertEquals(1, m.get('k'));
|
||||
assertEquals(1, n.get('k'));
|
||||
}
|
||||
|
||||
|
||||
function testSetBindBackwards() {
|
||||
var m = new ol.Object();
|
||||
var n = new ol.Object();
|
||||
n.set('k', 1);
|
||||
n.bindTo('k', m);
|
||||
assertUndefined(m.get('k'));
|
||||
assertUndefined(n.get('k'));
|
||||
}
|
||||
|
||||
|
||||
function testBindSetUnbind() {
|
||||
var m = new ol.Object();
|
||||
var n = new ol.Object();
|
||||
n.bindTo('k', m);
|
||||
n.set('k', 1);
|
||||
assertEquals(1, m.get('k'));
|
||||
assertEquals(1, n.get('k'));
|
||||
n.unbind('k');
|
||||
assertEquals(1, m.get('k'));
|
||||
assertEquals(1, n.get('k'));
|
||||
n.set('k', 2);
|
||||
assertEquals(1, m.get('k'));
|
||||
assertEquals(2, n.get('k'));
|
||||
}
|
||||
|
||||
|
||||
function testUnbindAll() {
|
||||
var m = new ol.Object();
|
||||
var n = new ol.Object();
|
||||
n.bindTo('k', m);
|
||||
n.set('k', 1);
|
||||
assertEquals(m.get('k'), 1);
|
||||
assertEquals(n.get('k'), 1);
|
||||
n.unbindAll();
|
||||
assertEquals(m.get('k'), 1);
|
||||
assertEquals(n.get('k'), 1);
|
||||
n.set('k', 2);
|
||||
assertEquals(m.get('k'), 1);
|
||||
assertEquals(n.get('k'), 2);
|
||||
}
|
||||
|
||||
|
||||
function testBindNotify() {
|
||||
var m = new ol.Object();
|
||||
var n = new ol.Object();
|
||||
m.bindTo('k', n);
|
||||
mCallbackCalled = false;
|
||||
m.k_changed = function() {
|
||||
mCallbackCalled = true;
|
||||
};
|
||||
nCallbackCalled = false;
|
||||
n.k_changed = function() {
|
||||
nCallbackCalled = true;
|
||||
};
|
||||
n.set('k', 1);
|
||||
assertTrue(mCallbackCalled);
|
||||
assertTrue(nCallbackCalled);
|
||||
}
|
||||
|
||||
|
||||
function testBindBackwardsNotify() {
|
||||
var m = new ol.Object();
|
||||
var n = new ol.Object();
|
||||
n.bindTo('k', m);
|
||||
mCallbackCalled = false;
|
||||
m.k_changed = function() {
|
||||
mCallbackCalled = true;
|
||||
};
|
||||
nCallbackCalled = false;
|
||||
n.k_changed = function() {
|
||||
nCallbackCalled = true;
|
||||
};
|
||||
n.set('k', 1);
|
||||
assertTrue(mCallbackCalled);
|
||||
assertTrue(nCallbackCalled);
|
||||
}
|
||||
|
||||
|
||||
function testBindRename() {
|
||||
var m = new ol.Object();
|
||||
var n = new ol.Object();
|
||||
n.bindTo('kn', m, 'km');
|
||||
m.set('km', 1);
|
||||
assertEquals(m.get('km'), 1);
|
||||
assertEquals(n.get('kn'), 1);
|
||||
}
|
||||
|
||||
|
||||
function testBindRenameCallbacks() {
|
||||
var m = new ol.Object();
|
||||
var n = new ol.Object();
|
||||
var kmCallbackCalled = false;
|
||||
m.km_changed = function() {
|
||||
kmCallbackCalled = true;
|
||||
};
|
||||
var knCallbackCalled = false;
|
||||
n.kn_changed = function() {
|
||||
knCallbackCalled = true;
|
||||
};
|
||||
n.bindTo('kn', m, 'km');
|
||||
m.set('km', 1);
|
||||
assertEquals(m.get('km'), 1);
|
||||
assertEquals(n.get('kn'), 1);
|
||||
assertTrue(kmCallbackCalled);
|
||||
assertTrue(knCallbackCalled);
|
||||
}
|
||||
|
||||
|
||||
function testTransitiveBindForwards() {
|
||||
var m = new ol.Object();
|
||||
var n = new ol.Object();
|
||||
var o = new ol.Object();
|
||||
n.bindTo('kn', m, 'km');
|
||||
o.bindTo('ko', n, 'kn');
|
||||
m.set('km', 1);
|
||||
assertEquals(1, m.get('km'));
|
||||
assertEquals(1, n.get('kn'));
|
||||
assertEquals(1, o.get('ko'));
|
||||
}
|
||||
|
||||
|
||||
function testTransitiveBindBackwards() {
|
||||
var m = new ol.Object();
|
||||
var n = new ol.Object();
|
||||
var o = new ol.Object();
|
||||
n.bindTo('kn', m, 'km');
|
||||
o.bindTo('ko', n, 'kn');
|
||||
o.set('ko', 1);
|
||||
assertEquals(1, m.get('km'));
|
||||
assertEquals(1, n.get('kn'));
|
||||
assertEquals(1, o.get('ko'));
|
||||
}
|
||||
|
||||
|
||||
function testInheritance() {
|
||||
var C = function() {};
|
||||
C.prototype = new ol.Object();
|
||||
var callbackCalled;
|
||||
C.prototype.k_changed = function() {
|
||||
callbackCalled = true;
|
||||
};
|
||||
var c = new C();
|
||||
c.set('k', 1);
|
||||
assertEquals(1, c.get('k'));
|
||||
assertTrue(callbackCalled);
|
||||
}
|
||||
|
||||
|
||||
function testMrideyAccessors() {
|
||||
// http://blog.mridey.com/2010/03/maps-javascript-api-v3-more-about.html
|
||||
var a = new ol.Object();
|
||||
a.set('level', 2);
|
||||
assertEquals(2, a.get('level'));
|
||||
var b = new ol.Object();
|
||||
b.setValues({
|
||||
level: 2,
|
||||
index: 3,
|
||||
description: 'Hello world.'
|
||||
});
|
||||
assertEquals(3, b.get('index'));
|
||||
}
|
||||
|
||||
|
||||
function testMrideyBinding() {
|
||||
// http://blog.mridey.com/2010/03/maps-javascript-api-v3-more-about.html
|
||||
var a = new ol.Object();
|
||||
a.set('level', 2);
|
||||
var b = new ol.Object();
|
||||
b.bindTo('index', a, 'level');
|
||||
assertEquals(2, b.get('index'));
|
||||
a.set('level', 3);
|
||||
assertEquals(3, b.get('index'));
|
||||
b.set('index', 4);
|
||||
assertEquals(4, a.get('level'));
|
||||
var c = new ol.Object();
|
||||
c.bindTo('zoom', a, 'level');
|
||||
assertEquals(4, c.get('zoom'));
|
||||
b.unbind('index');
|
||||
assertEquals(4, b.get('index'));
|
||||
c.set('zoom', 5);
|
||||
assertEquals(5, a.get('level'));
|
||||
assertEquals(4, b.get('index'));
|
||||
}
|
||||
|
||||
|
||||
function testCircularBind() {
|
||||
var a = new ol.Object();
|
||||
var b = new ol.Object();
|
||||
a.bindTo('k', b);
|
||||
assertThrows(function() {
|
||||
b.bindTo('k', a);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function testPriority() {
|
||||
var a = new ol.Object();
|
||||
var b = new ol.Object();
|
||||
a.set('k', 1);
|
||||
b.set('k', 2);
|
||||
a.bindTo('k', b);
|
||||
assertEquals(2, a.get('k'));
|
||||
assertEquals(2, b.get('k'));
|
||||
}
|
||||
|
||||
|
||||
function testPriorityUndefined() {
|
||||
var a = new ol.Object();
|
||||
var b = new ol.Object();
|
||||
a.set('k', 1);
|
||||
a.bindTo('k', b);
|
||||
assertUndefined(a.get('k'));
|
||||
assertUndefined(b.get('k'));
|
||||
}
|
||||
|
||||
|
||||
function testSetter() {
|
||||
var a = new ol.Object();
|
||||
var x;
|
||||
var setterCalled;
|
||||
a.setX = function(value) {
|
||||
this.x = value;
|
||||
setterCalled = true;
|
||||
};
|
||||
a.set('x', 1);
|
||||
assertEquals(1, a.get('x'));
|
||||
assertUndefined(setterCalled);
|
||||
}
|
||||
|
||||
|
||||
function testSetterBind() {
|
||||
var a = new ol.Object();
|
||||
var x;
|
||||
var setterCalled;
|
||||
a.setX = function(value) {
|
||||
this.x = value;
|
||||
setterCalled = true;
|
||||
};
|
||||
var b = new ol.Object();
|
||||
b.bindTo('x', a);
|
||||
b.set('x', 1);
|
||||
assertEquals(1, a.get('x'));
|
||||
assertEquals(1, b.get('x'));
|
||||
assertTrue(setterCalled);
|
||||
}
|
||||
|
||||
|
||||
function testGetter() {
|
||||
var a = new ol.Object();
|
||||
var getterCalled;
|
||||
a.getX = function() {
|
||||
getterCalled = true;
|
||||
return 1;
|
||||
};
|
||||
assertUndefined(a.get('x'));
|
||||
assertUndefined(getterCalled);
|
||||
}
|
||||
|
||||
|
||||
function testGetterBind() {
|
||||
var a = new ol.Object();
|
||||
var getterCalled;
|
||||
a.getX = function() {
|
||||
getterCalled = true;
|
||||
return 1;
|
||||
};
|
||||
var b = new ol.Object();
|
||||
b.bindTo('x', a);
|
||||
assertEquals(1, b.get('x'));
|
||||
assertTrue(getterCalled);
|
||||
}
|
||||
|
||||
|
||||
function testBindSelf() {
|
||||
var a = new ol.Object();
|
||||
assertThrows(function() {
|
||||
a.bindTo('k', a);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function testChangedKey() {
|
||||
var a = new ol.Object();
|
||||
var changedKey;
|
||||
a.changed = function(key) {
|
||||
changedKey = key;
|
||||
};
|
||||
a.set('k', 1);
|
||||
assertEquals('k', changedKey);
|
||||
}
|
||||
|
||||
|
||||
function testCreateFromObject() {
|
||||
var obj = {k: 1};
|
||||
var obj = ol.Object.create(obj);
|
||||
assertTrue(obj instanceof ol.Object);
|
||||
assertEquals(1, obj.get('k'));
|
||||
}
|
||||
|
||||
|
||||
function testCreateFromObject() {
|
||||
var obj1 = new ol.Object();
|
||||
var obj2 = ol.Object.create(obj1);
|
||||
assertTrue(obj2 === obj1);
|
||||
}
|
||||
|
||||
|
||||
function testCreateWithOptions() {
|
||||
var obj = new ol.Object({k: 1});
|
||||
assertEquals(1, obj.get('k'));
|
||||
}
|
||||
|
||||
|
||||
function testEventTypeCaseSensitivity() {
|
||||
var obj = new ol.Object();
|
||||
var lowercaseChangedMethodCalled = false;
|
||||
obj.k_changed = function() {
|
||||
lowercaseChangedMethodCalled = true;
|
||||
};
|
||||
var uppercaseChangedMethodCalled = false;
|
||||
obj.K_changed = function() {
|
||||
uppercaseChangedMethodCalled = true;
|
||||
};
|
||||
var lowercaseEventDispatched = false;
|
||||
goog.events.listen(obj, 'k_changed', function() {
|
||||
lowercaseEventDispatched = true;
|
||||
});
|
||||
var uppercaseEventDispatched = false;
|
||||
goog.events.listen(obj, 'K_changed', function() {
|
||||
uppercaseEventDispatched = true;
|
||||
});
|
||||
obj.set('K', 1);
|
||||
assertTrue(lowercaseEventDispatched);
|
||||
assertFalse(uppercaseEventDispatched);
|
||||
assertFalse(lowercaseChangedMethodCalled);
|
||||
assertTrue(uppercaseChangedMethodCalled);
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
goog.provide('ol.PixelBounds');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('ol.Rectangle');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {ol.Rectangle}
|
||||
* @param {number} minX Minimum X.
|
||||
* @param {number} minY Minimum Y.
|
||||
* @param {number} maxX Maximum X.
|
||||
* @param {number} maxY Maximum Y.
|
||||
*/
|
||||
ol.PixelBounds = function(minX, minY, maxX, maxY) {
|
||||
goog.base(this, minX, minY, maxX, maxY);
|
||||
};
|
||||
goog.inherits(ol.PixelBounds, ol.Rectangle);
|
||||
@@ -0,0 +1,374 @@
|
||||
goog.provide('ol.Projection');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.object');
|
||||
goog.require('ol.Coordinate');
|
||||
goog.require('ol.Extent');
|
||||
goog.require('ol.TransformFunction');
|
||||
|
||||
|
||||
/**
|
||||
* @enum {string}
|
||||
*/
|
||||
ol.ProjectionUnits = {
|
||||
DEGREES: 'degrees',
|
||||
METERS: 'm'
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @param {string} code Code.
|
||||
* @param {ol.ProjectionUnits} units Units.
|
||||
* @param {ol.Extent} extent Extent.
|
||||
*/
|
||||
ol.Projection = function(code, units, extent) {
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {string}
|
||||
*/
|
||||
this.code_ = code;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {ol.ProjectionUnits}
|
||||
*/
|
||||
this.units_ = units;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {ol.Extent}
|
||||
*/
|
||||
this.extent_ = extent;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {string} Code.
|
||||
*/
|
||||
ol.Projection.prototype.getCode = function() {
|
||||
return this.code_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Extent} Extent.
|
||||
*/
|
||||
ol.Projection.prototype.getExtent = function() {
|
||||
return this.extent_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.ProjectionUnits} Units.
|
||||
*/
|
||||
ol.Projection.prototype.getUnits = function() {
|
||||
return this.units_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Object.<string, ol.Projection>}
|
||||
*/
|
||||
ol.Projection.projections_ = {};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Object.<string, Object.<string, ol.TransformFunction>>}
|
||||
*/
|
||||
ol.Projection.transforms_ = {};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Array.<ol.Projection>} projections Projections.
|
||||
*/
|
||||
ol.Projection.addEquivalentProjections = function(projections) {
|
||||
ol.Projection.addProjections(projections);
|
||||
goog.array.forEach(projections, function(source) {
|
||||
goog.array.forEach(projections, function(destination) {
|
||||
ol.Projection.addTransform(
|
||||
source, destination, ol.Projection.cloneTransform);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Array.<ol.Projection>} projections1 Projections.
|
||||
* @param {Array.<ol.Projection>} projections2 Projections.
|
||||
* @param {ol.TransformFunction} forwardTransform Forward transform.
|
||||
* @param {ol.TransformFunction} inverseTransform Inverse transform.
|
||||
*/
|
||||
ol.Projection.addEquivalentTransforms =
|
||||
function(projections1, projections2, forwardTransform, inverseTransform) {
|
||||
goog.array.forEach(projections1, function(projection1) {
|
||||
goog.array.forEach(projections2, function(projection2) {
|
||||
ol.Projection.addTransform(projection1, projection2, forwardTransform);
|
||||
ol.Projection.addTransform(projection2, projection1, inverseTransform);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Projection} projection Projection.
|
||||
*/
|
||||
ol.Projection.addProjection = function(projection) {
|
||||
var projections = ol.Projection.projections_;
|
||||
var code = projection.getCode();
|
||||
goog.asserts.assert(!goog.object.containsKey(projections, code));
|
||||
projections[code] = projection;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Array.<ol.Projection>} projections Projections.
|
||||
*/
|
||||
ol.Projection.addProjections = function(projections) {
|
||||
goog.array.forEach(projections, function(projection) {
|
||||
ol.Projection.addProjection(projection);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Projection} source Source.
|
||||
* @param {ol.Projection} destination Destination.
|
||||
* @param {ol.TransformFunction} transform Transform.
|
||||
*/
|
||||
ol.Projection.addTransform = function(source, destination, transform) {
|
||||
var projections = ol.Projection.projections_;
|
||||
var sourceCode = source.getCode();
|
||||
goog.asserts.assert(goog.object.containsKey(projections, sourceCode));
|
||||
var destinationCode = destination.getCode();
|
||||
goog.asserts.assert(goog.object.containsKey(projections, destinationCode));
|
||||
var transforms = ol.Projection.transforms_;
|
||||
if (!goog.object.containsKey(transforms, sourceCode)) {
|
||||
transforms[sourceCode] = {};
|
||||
}
|
||||
goog.asserts.assert(
|
||||
!goog.object.containsKey(transforms[sourceCode], destinationCode));
|
||||
transforms[sourceCode][destinationCode] = transform;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} code Code.
|
||||
* @return {ol.Projection} Projection.
|
||||
*/
|
||||
ol.Projection.getFromCode = function(code) {
|
||||
var projections = ol.Projection.projections_;
|
||||
goog.asserts.assert(goog.object.containsKey(projections, code));
|
||||
return projections[code];
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Projection} projection1 Projection 1.
|
||||
* @param {ol.Projection} projection2 Projection 2.
|
||||
* @return {boolean} Equivalent.
|
||||
*/
|
||||
ol.Projection.equivalent = function(projection1, projection2) {
|
||||
if (projection1 === projection2) {
|
||||
return true;
|
||||
} else if (projection1.getUnits() != projection2.getUnits()) {
|
||||
return false;
|
||||
} else {
|
||||
var transform = ol.Projection.getTransform(projection1, projection2);
|
||||
return transform === ol.Projection.cloneTransform;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Projection} source Source.
|
||||
* @param {ol.Projection} destination Destination.
|
||||
* @return {ol.TransformFunction} Transform.
|
||||
*/
|
||||
ol.Projection.getTransform = function(source, destination) {
|
||||
var transforms = ol.Projection.transforms_;
|
||||
var sourceCode = source.getCode();
|
||||
var destinationCode = destination.getCode();
|
||||
goog.asserts.assert(goog.object.containsKey(transforms, sourceCode));
|
||||
goog.asserts.assert(
|
||||
goog.object.containsKey(transforms[sourceCode], destinationCode));
|
||||
return transforms[sourceCode][destinationCode];
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} sourceCode Source code.
|
||||
* @param {string} destinationCode Destination code.
|
||||
* @return {ol.TransformFunction} Transform.
|
||||
*/
|
||||
ol.Projection.getTransformFromCodes = function(sourceCode, destinationCode) {
|
||||
var source = ol.Projection.getFromCode(sourceCode);
|
||||
var destination = ol.Projection.getFromCode(destinationCode);
|
||||
return ol.Projection.getTransform(source, destination);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Coordinate} point Point.
|
||||
* @return {ol.Coordinate} Point.
|
||||
*/
|
||||
ol.Projection.identityTransform = function(point) {
|
||||
return point;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Coordinate} point Point.
|
||||
* @return {ol.Coordinate} Point.
|
||||
*/
|
||||
ol.Projection.cloneTransform = function(point) {
|
||||
return point.clone();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Coordinate} point Point.
|
||||
* @param {ol.Projection} source Source.
|
||||
* @param {ol.Projection} destination Destination.
|
||||
* @return {ol.Coordinate} Point.
|
||||
*/
|
||||
ol.Projection.transform = function(point, source, destination) {
|
||||
var transform = ol.Projection.getTransform(source, destination);
|
||||
return transform(point);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Coordinate} point Point.
|
||||
* @param {string} sourceCode Source code.
|
||||
* @param {string} destinationCode Destination code.
|
||||
* @return {ol.Coordinate} Point.
|
||||
*/
|
||||
ol.Projection.transformWithCodes =
|
||||
function(point, sourceCode, destinationCode) {
|
||||
var transform = ol.Projection.getTransformFromCodes(
|
||||
sourceCode, destinationCode);
|
||||
return transform(point);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {number}
|
||||
*/
|
||||
ol.Projection.EPSG_3857_RADIUS = 6378137;
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Coordinate} point Point.
|
||||
* @return {ol.Coordinate} Point.
|
||||
*/
|
||||
ol.Projection.forwardSphericalMercator = function(point) {
|
||||
var x = ol.Projection.EPSG_3857_RADIUS * Math.PI * point.x / 180;
|
||||
var y = ol.Projection.EPSG_3857_RADIUS *
|
||||
Math.log(Math.tan(Math.PI * (point.y + 90) / 360));
|
||||
return new ol.Coordinate(x, y);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Coordinate} point Point.
|
||||
* @return {ol.Coordinate} Point.
|
||||
*/
|
||||
ol.Projection.inverseSphericalMercator = function(point) {
|
||||
var x = 180 * point.x / (ol.Projection.EPSG_3857_RADIUS * Math.PI);
|
||||
var y = 360 * Math.atan(
|
||||
Math.exp(point.y / ol.Projection.EPSG_3857_RADIUS)) / Math.PI - 90;
|
||||
return new ol.Coordinate(x, y);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {number}
|
||||
*/
|
||||
ol.Projection.EPSG_3857_HALF_SIZE = Math.PI * ol.Projection.EPSG_3857_RADIUS;
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {ol.Extent}
|
||||
*/
|
||||
ol.Projection.EPSG_3857_EXTENT = new ol.Extent(
|
||||
-ol.Projection.EPSG_3857_HALF_SIZE,
|
||||
-ol.Projection.EPSG_3857_HALF_SIZE,
|
||||
ol.Projection.EPSG_3857_HALF_SIZE,
|
||||
ol.Projection.EPSG_3857_HALF_SIZE);
|
||||
|
||||
|
||||
/**
|
||||
* @type {Array.<string>}
|
||||
*/
|
||||
ol.Projection.EPSG_3857_LIKE_CODES = [
|
||||
'EPSG:3857',
|
||||
'EPSG:102113',
|
||||
'EPSG:102100',
|
||||
'EPSG:900913'
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Array.<ol.Projection>}
|
||||
*/
|
||||
ol.Projection.EPSG_3857_LIKE_PROJECTIONS = goog.array.map(
|
||||
ol.Projection.EPSG_3857_LIKE_CODES,
|
||||
function(code) {
|
||||
return new ol.Projection(
|
||||
code,
|
||||
ol.ProjectionUnits.METERS,
|
||||
ol.Projection.EPSG_3857_EXTENT);
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {ol.Extent}
|
||||
*/
|
||||
ol.Projection.EPSG_4326_EXTENT = new ol.Extent(-180, -90, 180, 90);
|
||||
|
||||
|
||||
/**
|
||||
* @type {Array.<string>}
|
||||
*/
|
||||
ol.Projection.EPSG_4326_LIKE_CODES = [
|
||||
'EPSG:4326',
|
||||
'CRS:84',
|
||||
'urn:ogc:def:crs:EPSG:6.6:4326'
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Array.<ol.Projection>}
|
||||
*/
|
||||
ol.Projection.EPSG_4326_LIKE_PROJECTIONS = goog.array.map(
|
||||
ol.Projection.EPSG_4326_LIKE_CODES,
|
||||
function(code) {
|
||||
return new ol.Projection(
|
||||
code,
|
||||
ol.ProjectionUnits.DEGREES,
|
||||
ol.Projection.EPSG_4326_EXTENT);
|
||||
});
|
||||
|
||||
|
||||
ol.Projection.addEquivalentProjections(
|
||||
ol.Projection.EPSG_3857_LIKE_PROJECTIONS);
|
||||
ol.Projection.addEquivalentProjections(
|
||||
ol.Projection.EPSG_4326_LIKE_PROJECTIONS);
|
||||
ol.Projection.addEquivalentTransforms(
|
||||
ol.Projection.EPSG_4326_LIKE_PROJECTIONS,
|
||||
ol.Projection.EPSG_3857_LIKE_PROJECTIONS,
|
||||
ol.Projection.forwardSphericalMercator,
|
||||
ol.Projection.inverseSphericalMercator);
|
||||
@@ -0,0 +1,87 @@
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.testing.jsunit');
|
||||
goog.require('ol.Coordinate');
|
||||
goog.require('ol.Projection');
|
||||
|
||||
|
||||
function _testAllEquivalent(codes) {
|
||||
var projections = goog.array.map(codes, ol.Projection.getFromCode);
|
||||
goog.array.forEach(projections, function(source) {
|
||||
goog.array.forEach(projections, function(destination) {
|
||||
assertTrue(ol.Projection.equivalent(source, destination));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function testEpsg3857Equivalence() {
|
||||
_testAllEquivalent([
|
||||
'EPSG:3857',
|
||||
'EPSG:102100',
|
||||
'EPSG:102113',
|
||||
'EPSG:900913'
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
function testEpsg4326Equivalence() {
|
||||
_testAllEquivalent([
|
||||
'CRS:84',
|
||||
'urn:ogc:def:crs:EPSG:6.6:4326',
|
||||
'EPSG:4326'
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
function testIdentityTransform() {
|
||||
var epsg4326 = ol.Projection.getFromCode('EPSG:4326');
|
||||
var uniqueObject = {};
|
||||
var sourcePoint = new ol.Coordinate(uniqueObject, uniqueObject);
|
||||
var destinationPoint = ol.Projection.transform(
|
||||
sourcePoint, epsg4326, epsg4326);
|
||||
assertFalse(sourcePoint === destinationPoint);
|
||||
assertTrue(destinationPoint.x === sourcePoint.x);
|
||||
assertTrue(destinationPoint.y === sourcePoint.y);
|
||||
}
|
||||
|
||||
|
||||
function testForwardSphericalMercatorOrigin() {
|
||||
var point = ol.Projection.transformWithCodes(
|
||||
new ol.Coordinate(0, 0), 'EPSG:4326', 'EPSG:3857');
|
||||
assertNotNullNorUndefined(point);
|
||||
assertEquals(0, point.x);
|
||||
assertRoughlyEquals(0, point.y, 1e-9);
|
||||
}
|
||||
|
||||
|
||||
function testInverseSphericalMercatorOrigin() {
|
||||
var point = ol.Projection.transformWithCodes(
|
||||
new ol.Coordinate(0, 0), 'EPSG:3857', 'EPSG:4326');
|
||||
assertNotNullNorUndefined(point);
|
||||
assertEquals(0, point.x);
|
||||
assertEquals(0, point.y);
|
||||
}
|
||||
|
||||
|
||||
function testForwardSphericalMercatorAlastaira() {
|
||||
// http://alastaira.wordpress.com/2011/01/23/the-google-maps-bing-maps-spherical-mercator-projection/
|
||||
var point = ol.Projection.transformWithCodes(
|
||||
new ol.Coordinate(-5.625, 52.4827802220782),
|
||||
'EPSG:4326',
|
||||
'EPSG:900913');
|
||||
assertNotNullNorUndefined(point);
|
||||
assertRoughlyEquals(-626172.13571216376, point.x, 1e-9);
|
||||
assertRoughlyEquals(6887893.4928337997, point.y, 1e-9);
|
||||
}
|
||||
|
||||
|
||||
function testInverseSphericalMercatorAlastaira() {
|
||||
// http://alastaira.wordpress.com/2011/01/23/the-google-maps-bing-maps-spherical-mercator-projection/
|
||||
var point = ol.Projection.transformWithCodes(
|
||||
new ol.Coordinate(-626172.13571216376, 6887893.4928337997),
|
||||
'EPSG:900913',
|
||||
'EPSG:4326');
|
||||
assertNotNullNorUndefined(point);
|
||||
assertRoughlyEquals(-5.625, point.x, 1e-9);
|
||||
assertRoughlyEquals(52.4827802220782, point.y, 1e-9);
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
goog.provide('ol.Rectangle');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('ol.Coordinate');
|
||||
goog.require('ol.Size');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @param {number} minX Minimum X.
|
||||
* @param {number} minY Minimum Y.
|
||||
* @param {number} maxX Maximum X.
|
||||
* @param {number} maxY Maximum Y.
|
||||
*/
|
||||
ol.Rectangle = function(minX, minY, maxX, maxY) {
|
||||
|
||||
goog.asserts.assert(minX <= maxX);
|
||||
goog.asserts.assert(minY <= maxY);
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
this.minX = minX;
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
this.minY = minY;
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
this.maxX = maxX;
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
this.maxY = maxY;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Rectangle} rectangle1 Rectangle.
|
||||
* @param {ol.Rectangle} rectangle2 Rectangle.
|
||||
* @return {boolean} Intersects.
|
||||
*/
|
||||
ol.Rectangle.intersects = function(rectangle1, rectangle2) {
|
||||
return rectangle1.minX <= rectangle2.maxX &&
|
||||
rectangle1.maxX >= rectangle2.minX &&
|
||||
rectangle1.minY <= rectangle2.maxY &&
|
||||
rectangle1.maxY >= rectangle2.minY;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Rectangle} Clone.
|
||||
*/
|
||||
ol.Rectangle.prototype.clone = function() {
|
||||
return new ol.Rectangle(this.minX, this.minY, this.maxX, this.maxY);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Coordinate} coordinate Coordinate.
|
||||
* @return {boolean} Contains.
|
||||
*/
|
||||
ol.Rectangle.prototype.contains = function(coordinate) {
|
||||
return this.minX <= coordinate.x && coordinate.x <= this.maxX &&
|
||||
this.minY <= coordinate.y && coordinate.y <= this.maxY;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Coordinate} Center.
|
||||
*/
|
||||
ol.Rectangle.prototype.getCenter = function() {
|
||||
return new ol.Coordinate(
|
||||
(this.minX + this.maxX) / 2, (this.minY + this.maxY) / 2);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {number} Height.
|
||||
*/
|
||||
ol.Rectangle.prototype.getHeight = function() {
|
||||
return this.maxY - this.minY;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Size} Size.
|
||||
*/
|
||||
ol.Rectangle.prototype.getSize = function() {
|
||||
return new ol.Size(this.getWidth(), this.getHeight());
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {number} Width.
|
||||
*/
|
||||
ol.Rectangle.prototype.getWidth = function() {
|
||||
return this.maxX - this.minX;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Coordinate} coordinate Coordinate.
|
||||
* @return {ol.Coordinate} Coordinate.
|
||||
*/
|
||||
ol.Rectangle.prototype.normalize = function(coordinate) {
|
||||
return new ol.Coordinate(
|
||||
(coordinate.x - this.minX) / this.getWidth(),
|
||||
(coordinate.y - this.minY) / this.getHeight());
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {string} String.
|
||||
*/
|
||||
ol.Rectangle.prototype.toString = function() {
|
||||
return '(' + [this.minX, this.minY, this.maxX, this.maxY].join(', ') + ')';
|
||||
};
|
||||
@@ -0,0 +1,142 @@
|
||||
goog.require('goog.testing.jsunit');
|
||||
goog.require('ol.Coordinate');
|
||||
goog.require('ol.Rectangle');
|
||||
|
||||
|
||||
function testCenter() {
|
||||
var rectangle = new ol.Rectangle(1, 2, 3, 4);
|
||||
var center = rectangle.getCenter();
|
||||
assertEquals(2, center.x);
|
||||
assertEquals(3, center.y);
|
||||
}
|
||||
|
||||
|
||||
function testClone() {
|
||||
var rectangle = new ol.Rectangle(1, 2, 3, 4);
|
||||
var clonedRectangle = rectangle.clone();
|
||||
assertTrue(clonedRectangle instanceof ol.Rectangle);
|
||||
assertFalse(clonedRectangle === rectangle);
|
||||
assertEquals(rectangle.minX, clonedRectangle.minX);
|
||||
assertEquals(rectangle.minY, clonedRectangle.minY);
|
||||
assertEquals(rectangle.maxX, clonedRectangle.maxX);
|
||||
assertEquals(rectangle.maxY, clonedRectangle.maxY);
|
||||
}
|
||||
|
||||
|
||||
function testContainsPositive() {
|
||||
var rectangle = new ol.Rectangle(1, 2, 3, 4);
|
||||
assertTrue(rectangle.contains(new ol.Coordinate(1, 2)));
|
||||
assertTrue(rectangle.contains(new ol.Coordinate(1, 3)));
|
||||
assertTrue(rectangle.contains(new ol.Coordinate(1, 4)));
|
||||
assertTrue(rectangle.contains(new ol.Coordinate(2, 2)));
|
||||
assertTrue(rectangle.contains(new ol.Coordinate(2, 3)));
|
||||
assertTrue(rectangle.contains(new ol.Coordinate(2, 4)));
|
||||
assertTrue(rectangle.contains(new ol.Coordinate(3, 2)));
|
||||
assertTrue(rectangle.contains(new ol.Coordinate(3, 3)));
|
||||
assertTrue(rectangle.contains(new ol.Coordinate(3, 4)));
|
||||
}
|
||||
|
||||
|
||||
function testContainsNegative() {
|
||||
var rectangle = new ol.Rectangle(1, 2, 3, 4);
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(0, 1)));
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(0, 2)));
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(0, 3)));
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(0, 4)));
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(0, 5)));
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(1, 1)));
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(1, 5)));
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(2, 1)));
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(2, 5)));
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(3, 1)));
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(3, 5)));
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(4, 1)));
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(4, 2)));
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(4, 3)));
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(4, 4)));
|
||||
assertFalse(rectangle.contains(new ol.Coordinate(4, 5)));
|
||||
}
|
||||
|
||||
|
||||
function testIntersects() {
|
||||
|
||||
var rectangle1 = new ol.Rectangle(50, 50, 100, 100);
|
||||
|
||||
function assertIntersects(rectangle2) {
|
||||
assertTrue(rectangle1 + ' expected to intersect ' + rectangle2,
|
||||
ol.Rectangle.intersects(rectangle1, rectangle2));
|
||||
}
|
||||
function assertNotIntersects(rectangle2) {
|
||||
assertFalse(rectangle1 + ' expected to not intersect ' + rectangle2,
|
||||
ol.Rectangle.intersects(rectangle1, rectangle2));
|
||||
}
|
||||
|
||||
assertIntersects(rectangle1);
|
||||
assertIntersects(new ol.Rectangle(20, 20, 80, 80));
|
||||
assertIntersects(new ol.Rectangle(20, 50, 80, 100));
|
||||
assertIntersects(new ol.Rectangle(20, 80, 80, 120));
|
||||
assertIntersects(new ol.Rectangle(50, 20, 100, 80));
|
||||
assertIntersects(new ol.Rectangle(50, 80, 100, 120));
|
||||
assertIntersects(new ol.Rectangle(80, 20, 120, 80));
|
||||
assertIntersects(new ol.Rectangle(80, 50, 120, 100));
|
||||
assertIntersects(new ol.Rectangle(80, 80, 120, 120));
|
||||
assertIntersects(new ol.Rectangle(20, 20, 120, 120));
|
||||
assertIntersects(new ol.Rectangle(70, 70, 80, 80));
|
||||
assertNotIntersects(new ol.Rectangle(10, 10, 30, 30));
|
||||
assertNotIntersects(new ol.Rectangle(30, 10, 70, 30));
|
||||
assertNotIntersects(new ol.Rectangle(50, 10, 100, 30));
|
||||
assertNotIntersects(new ol.Rectangle(80, 10, 120, 30));
|
||||
assertNotIntersects(new ol.Rectangle(120, 10, 140, 30));
|
||||
assertNotIntersects(new ol.Rectangle(10, 30, 30, 70));
|
||||
assertNotIntersects(new ol.Rectangle(120, 30, 140, 70));
|
||||
assertNotIntersects(new ol.Rectangle(10, 50, 30, 100));
|
||||
assertNotIntersects(new ol.Rectangle(120, 50, 140, 100));
|
||||
assertNotIntersects(new ol.Rectangle(10, 80, 30, 120));
|
||||
assertNotIntersects(new ol.Rectangle(120, 80, 140, 120));
|
||||
assertNotIntersects(new ol.Rectangle(10, 120, 30, 140));
|
||||
assertNotIntersects(new ol.Rectangle(30, 120, 70, 140));
|
||||
assertNotIntersects(new ol.Rectangle(50, 120, 100, 140));
|
||||
assertNotIntersects(new ol.Rectangle(80, 120, 120, 140));
|
||||
assertNotIntersects(new ol.Rectangle(120, 120, 140, 140));
|
||||
}
|
||||
|
||||
|
||||
function testSize() {
|
||||
var rectangle = new ol.Rectangle(0, 1, 2, 4);
|
||||
var size = rectangle.getSize();
|
||||
assertEquals(2, size.width);
|
||||
assertEquals(3, size.height);
|
||||
}
|
||||
|
||||
|
||||
function testNormalize() {
|
||||
var rectangle = new ol.Rectangle(0, 1, 2, 3);
|
||||
var coordinate;
|
||||
|
||||
coordinate = rectangle.normalize(new ol.Coordinate(1, 2));
|
||||
assertEquals(0.5, coordinate.x);
|
||||
assertEquals(0.5, coordinate.y);
|
||||
|
||||
coordinate = rectangle.normalize(new ol.Coordinate(0, 3));
|
||||
assertEquals(0, coordinate.x);
|
||||
assertEquals(1, coordinate.y);
|
||||
|
||||
coordinate = rectangle.normalize(new ol.Coordinate(2, 1));
|
||||
assertEquals(1, coordinate.x);
|
||||
assertEquals(0, coordinate.y);
|
||||
|
||||
coordinate = rectangle.normalize(new ol.Coordinate(0, 0));
|
||||
assertEquals(0, coordinate.x);
|
||||
assertEquals(-0.5, coordinate.y);
|
||||
|
||||
coordinate = rectangle.normalize(new ol.Coordinate(-1, 1));
|
||||
assertEquals(-0.5, coordinate.x);
|
||||
assertEquals(0, coordinate.y);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function testToString() {
|
||||
var rectangle = new ol.Rectangle(0, 1, 2, 3);
|
||||
assertEquals('(0, 1, 2, 3)', rectangle.toString());
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
goog.provide('ol.Size');
|
||||
|
||||
goog.require('goog.math.Size');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {goog.math.Size}
|
||||
* @param {number} width Width.
|
||||
* @param {number} height Height.
|
||||
*/
|
||||
ol.Size = function(width, height) {
|
||||
goog.base(this, width, height);
|
||||
};
|
||||
goog.inherits(ol.Size, goog.math.Size);
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Size} size Size.
|
||||
* @return {boolean} Equals.
|
||||
*/
|
||||
ol.Size.prototype.equals = function(size) {
|
||||
return this.width == size.width && this.height == size.height;
|
||||
};
|
||||
@@ -0,0 +1,88 @@
|
||||
goog.provide('ol.Store');
|
||||
|
||||
goog.require('ol.Extent');
|
||||
goog.require('ol.Projection');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @param {ol.Projection} projection Projection.
|
||||
* @param {ol.Extent=} opt_extent Extent.
|
||||
* @param {string=} opt_attribution Attribution.
|
||||
*/
|
||||
ol.Store = function(projection, opt_extent, opt_attribution) {
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {ol.Projection}
|
||||
*/
|
||||
this.projection_ = projection;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {ol.Extent}
|
||||
*/
|
||||
this.extent_ = goog.isDef(opt_extent) ? opt_extent : projection.getExtent();
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {string|undefined}
|
||||
*/
|
||||
this.attribution_ = opt_attribution;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {string|undefined} Attribution.
|
||||
*/
|
||||
ol.Store.prototype.getAttribution = function() {
|
||||
return this.attribution_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Extent} Extent.
|
||||
*/
|
||||
ol.Store.prototype.getExtent = function() {
|
||||
return this.extent_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Projection} Projection.
|
||||
*/
|
||||
ol.Store.prototype.getProjection = function() {
|
||||
return this.projection_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {Array.<number>|undefined} Resolutions.
|
||||
*/
|
||||
ol.Store.prototype.getResolutions = goog.abstractMethod;
|
||||
|
||||
|
||||
/**
|
||||
* @param {string|undefined} attribution Attribution.
|
||||
*/
|
||||
ol.Store.prototype.setAttribution = function(attribution) {
|
||||
this.attribution_ = attribution;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Extent} extent Extent.
|
||||
*/
|
||||
ol.Store.prototype.setExtent = function(extent) {
|
||||
this.extent_ = extent;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Projection} projection Projetion.
|
||||
*/
|
||||
ol.Store.prototype.setProjection = function(projection) {
|
||||
this.projection_ = projection;
|
||||
};
|
||||
@@ -0,0 +1,9 @@
|
||||
goog.provide('ol.TransformFunction');
|
||||
|
||||
goog.require('ol.Coordinate');
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {function(ol.Coordinate): ol.Coordinate}
|
||||
*/
|
||||
ol.TransformFunction;
|
||||
Reference in New Issue
Block a user