From d9ba4e387c568a9035b3a1869620bdcbed1a1d61 Mon Sep 17 00:00:00 2001 From: Bart van den Eijnden Date: Mon, 2 Dec 2013 09:46:11 +0100 Subject: [PATCH 1/8] add an example to display GPX tracks --- examples/data/gpx/gpx4j.xml | 37 +++++++++++++++++++++++++++ examples/gpx-trkpt.html | 50 +++++++++++++++++++++++++++++++++++++ examples/gpx-trkpt.js | 37 +++++++++++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 examples/data/gpx/gpx4j.xml create mode 100644 examples/gpx-trkpt.html create mode 100644 examples/gpx-trkpt.js diff --git a/examples/data/gpx/gpx4j.xml b/examples/data/gpx/gpx4j.xml new file mode 100644 index 0000000000..7c58942267 --- /dev/null +++ b/examples/data/gpx/gpx4j.xml @@ -0,0 +1,37 @@ + + + + 290311 + (null) + + + 126.951324 + + + + 122.974365 + + + + 122.974365 + + + + 120.310211 + + + + 117.177261 + + + + 116.083771 + + + + 115.956726 + + + + + diff --git a/examples/gpx-trkpt.html b/examples/gpx-trkpt.html new file mode 100644 index 0000000000..84d45a6a77 --- /dev/null +++ b/examples/gpx-trkpt.html @@ -0,0 +1,50 @@ + + + + + + + + + + + GPX tracks example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

GPX tracks example

+

Example of using the GPX parser to display tracks.

+
+

See the gpx-trkpt.js source to see how this is done.

+
+
GPX trackpoint tracks
+
+
+ +
+ + + + + + + diff --git a/examples/gpx-trkpt.js b/examples/gpx-trkpt.js new file mode 100644 index 0000000000..0e7e9e97e0 --- /dev/null +++ b/examples/gpx-trkpt.js @@ -0,0 +1,37 @@ +goog.require('ol.Map'); +goog.require('ol.RendererHint'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.parser.GPX'); +goog.require('ol.source.OSM'); +goog.require('ol.source.Vector'); + +var raster = new ol.layer.Tile({ + source: new ol.source.OSM() +}); + +var vector = new ol.layer.Vector({ + source: new ol.source.Vector({ + parser: new ol.parser.GPX(), + url: 'data/gpx/gpx4j.xml' + }), + style: new ol.style.Style({ + symbolizers: [ + new ol.style.Stroke({ + color: 'red', + opacity: 1 + }) + ] + }) +}); + +var map = new ol.Map({ + layers: [raster, vector], + renderer: ol.RendererHint.CANVAS, + target: 'map', + view: new ol.View2D({ + center: ol.proj.transform([-0.425692, 39.114318], 'EPSG:4326', 'EPSG:3857'), + zoom: 19 + }) +}); From 029c7ea7f3b598aa833a9bf3abc2712919878223 Mon Sep 17 00:00:00 2001 From: Bart van den Eijnden Date: Mon, 2 Dec 2013 09:48:59 +0100 Subject: [PATCH 2/8] add missing requires --- examples/gpx-trkpt.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/gpx-trkpt.js b/examples/gpx-trkpt.js index 0e7e9e97e0..b0b330a57f 100644 --- a/examples/gpx-trkpt.js +++ b/examples/gpx-trkpt.js @@ -4,8 +4,11 @@ goog.require('ol.View2D'); goog.require('ol.layer.Tile'); goog.require('ol.layer.Vector'); goog.require('ol.parser.GPX'); +goog.require('ol.proj'); goog.require('ol.source.OSM'); goog.require('ol.source.Vector'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); var raster = new ol.layer.Tile({ source: new ol.source.OSM() From d6dc1a2c6fafe5f446123e197d09011c2d5dcdb1 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 4 Dec 2013 11:58:05 +0100 Subject: [PATCH 3/8] Don't use WebGL if there is a major performance caveat --- src/ol/renderer/webgl/webglmaprenderer.js | 1 + src/ol/webgl/webgl.js | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ol/renderer/webgl/webglmaprenderer.js b/src/ol/renderer/webgl/webglmaprenderer.js index c8d014030c..3880918334 100644 --- a/src/ol/renderer/webgl/webglmaprenderer.js +++ b/src/ol/renderer/webgl/webglmaprenderer.js @@ -88,6 +88,7 @@ ol.renderer.webgl.Map = function(container, map) { this.gl_ = ol.webgl.getContext(this.canvas_, { antialias: true, depth: false, + failIfMajorPerformanceCaveat: true, preserveDrawingBuffer: false, stencil: false }); diff --git a/src/ol/webgl/webgl.js b/src/ol/webgl/webgl.js index 4e84847510..701ae5b6ed 100644 --- a/src/ol/webgl/webgl.js +++ b/src/ol/webgl/webgl.js @@ -59,7 +59,9 @@ ol.webgl.SUPPORTED = (function() { try { var canvas = /** @type {HTMLCanvasElement} */ (goog.dom.createElement(goog.dom.TagName.CANVAS)); - return !goog.isNull(ol.webgl.getContext(canvas)); + return !goog.isNull(ol.webgl.getContext(canvas, { + failIfMajorPerformanceCaveat: true + })); } catch (e) { return false; } From 0d3583bd8d0a43e0a19f428523f25d9bbb952de8 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 4 Dec 2013 11:59:29 +0100 Subject: [PATCH 4/8] Improve type checking in WebGL support test --- src/ol/webgl/webgl.js | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/ol/webgl/webgl.js b/src/ol/webgl/webgl.js index 701ae5b6ed..8720d354d6 100644 --- a/src/ol/webgl/webgl.js +++ b/src/ol/webgl/webgl.js @@ -52,17 +52,21 @@ ol.webgl.getContext = function(canvas, opt_attributes) { * @const * @type {boolean} */ -ol.webgl.SUPPORTED = (function() { - if (!('WebGLRenderingContext' in goog.global)) { - return false; - } - try { - var canvas = /** @type {HTMLCanvasElement} */ - (goog.dom.createElement(goog.dom.TagName.CANVAS)); - return !goog.isNull(ol.webgl.getContext(canvas, { - failIfMajorPerformanceCaveat: true - })); - } catch (e) { - return false; - } -})(); +ol.webgl.SUPPORTED = ( + /** + * @return {boolean} WebGL supported. + */ + function() { + if (!('WebGLRenderingContext' in goog.global)) { + return false; + } + try { + var canvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + return !goog.isNull(ol.webgl.getContext(canvas, { + failIfMajorPerformanceCaveat: true + })); + } catch (e) { + return false; + } + })(); From 2be40a1ae68f592102414133d0b3f94be13d9334 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 4 Dec 2013 14:48:21 +0100 Subject: [PATCH 5/8] Add ol.structs.RBush#isEmpty --- src/ol/structs/rbush.js | 8 +++++++ test/spec/ol/structs/rbush.test.js | 34 ++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/ol/structs/rbush.js b/src/ol/structs/rbush.js index 549c3be3da..e0bdc81819 100644 --- a/src/ol/structs/rbush.js +++ b/src/ol/structs/rbush.js @@ -574,6 +574,14 @@ ol.structs.RBush.prototype.insert_ = function(extent, value, level) { }; +/** + * @return {boolean} Is empty. + */ +ol.structs.RBush.prototype.isEmpty = function() { + return this.root_.children.length === 0; +}; + + /** * @param {T} value Value. */ diff --git a/test/spec/ol/structs/rbush.test.js b/test/spec/ol/structs/rbush.test.js index cdf6b7167d..250aa374b5 100644 --- a/test/spec/ol/structs/rbush.test.js +++ b/test/spec/ol/structs/rbush.test.js @@ -18,6 +18,14 @@ describe('ol.structs.RBush', function() { }); + describe('#isEmpty', function() { + + it('returns true', function() { + expect(rBush.isEmpty()).to.be(true); + }); + + }); + }); describe('with a few objects', function() { @@ -76,6 +84,14 @@ describe('ol.structs.RBush', function() { }); }); + describe('#isEmpty', function() { + + it('returns false', function() { + expect(rBush.isEmpty()).to.be(false); + }); + + }); + describe('#remove', function() { it('can remove each object', function() { @@ -155,6 +171,14 @@ describe('ol.structs.RBush', function() { }); + describe('#isEmpty', function() { + + it('returns false', function() { + expect(rBush.isEmpty()).to.be(false); + }); + + }); + describe('#remove', function() { it('can remove each object in turn', function() { @@ -165,6 +189,7 @@ describe('ol.structs.RBush', function() { expect(rBush.getAllInExtent(extents[i])).to.be.empty(); } expect(rBush.getAll()).to.be.empty(); + expect(rBush.isEmpty()).to.be(true); }); it('can remove objects in random order', function() { @@ -183,6 +208,7 @@ describe('ol.structs.RBush', function() { expect(rBush.getAllInExtent(extents[index])).to.be.empty(); } expect(rBush.getAll()).to.be.empty(); + expect(rBush.isEmpty()).to.be(true); }); }); @@ -260,6 +286,14 @@ describe('ol.structs.RBush', function() { }); + describe('#isEmpty', function() { + + it('returns false', function() { + expect(rBush.isEmpty()).to.be(false); + }); + + }); + }); }); From f795adcd5618362f82b6992f22fa9722551918b2 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 4 Dec 2013 17:02:31 +0100 Subject: [PATCH 6/8] Add ol.Object#getProperties --- src/ol/object.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/ol/object.js b/src/ol/object.js index 5b122f601c..1a14e785af 100644 --- a/src/ol/object.js +++ b/src/ol/object.js @@ -287,6 +287,23 @@ ol.Object.prototype.getKeys = function() { }; +/** + * Get an object of all property names and values. + * @return {Object.} Object. + */ +ol.Object.prototype.getProperties = function() { + var properties = {}; + var key; + for (key in this.values_) { + properties[key] = this.values_[key]; + } + for (key in ol.Object.getAccessors(this)) { + properties[key] = this.get(key); + } + return properties; +}; + + /** * Notify all observers of a change on this property. This notifies both * objects that are bound to the object's property as well as the object From d9c94c701235702e2d9cbe5517a6dc1d89b8cdaf Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Thu, 5 Dec 2013 13:12:39 +0100 Subject: [PATCH 7/8] Don't build ol.css in check target --- build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.py b/build.py index e52a1efd96..f7d1bb8a17 100755 --- a/build.py +++ b/build.py @@ -176,7 +176,7 @@ virtual('build', 'build/ol.css', 'build/ol.js', 'build/ol-simple.js', 'build/ol-whitespace.js') -virtual('check', 'lint', 'build/ol.css', 'build/ol-all.js', 'test') +virtual('check', 'lint', 'build/ol-all.js', 'test') virtual('todo', 'fixme') From dfdec96ba7de9772c93ba1d56b0e095ad513a1cc Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Thu, 5 Dec 2013 16:32:41 +0100 Subject: [PATCH 8/8] Export ol.Object#getProperties --- src/ol/object.exports | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ol/object.exports b/src/ol/object.exports index a0a76d0033..c824a78609 100644 --- a/src/ol/object.exports +++ b/src/ol/object.exports @@ -1,6 +1,7 @@ @exportSymbol ol.Object @exportProperty ol.Object.prototype.bindTo @exportProperty ol.Object.prototype.get +@exportProperty ol.Object.prototype.getProperties @exportProperty ol.Object.prototype.notify @exportProperty ol.Object.prototype.on @exportProperty ol.Object.prototype.once