Skip to content

Commit b24c74a

Browse files
committed
Allow a custom createSymbolizers function
1 parent e3199c8 commit b24c74a

File tree

2 files changed

+63
-13
lines changed

2 files changed

+63
-13
lines changed

externs/olcsx.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,45 @@
55
*/
66
var olcsx;
77

8+
9+
/**
10+
* @typedef {{
11+
* map: (!ol.Map),
12+
* target: (Element|string|undefined),
13+
* createSynchronizers: ((function(!ol.Map, !Cesium.Scene): Array.<olcs.AbstractSynchronizer>)|undefined)
14+
* }}
15+
* @api
16+
*/
17+
olcsx.OLCesiumOptions;
18+
19+
20+
/**
21+
* The OpenLayers map we want to show on a Cesium scene.
22+
* @type {!ol.Map}
23+
* @api
24+
*/
25+
olcsx.OLCesiumOptions.prototype.map;
26+
27+
28+
/**
29+
* Target element for the Cesium scene.
30+
* @type {Element|string|undefined}
31+
* @api
32+
*/
33+
olcsx.OLCesiumOptions.prototype.target;
34+
35+
36+
/**
37+
* Callback function which will be called by the {@link olcs.OLCesium}
38+
* constructor to create custom synchronizers. Receives an `ol.Map` and a
39+
* `Cesium.Scene` as arguments, and needs to return an array of
40+
* {@link olcs.AbstractSynchronizer}.
41+
* @type {undefined|function(!ol.Map, !Cesium.Scene): Array.<olcs.AbstractSynchronizer>}
42+
* @api
43+
*/
44+
olcsx.OLCesiumOptions.prototype.createSynchronizers;
45+
46+
847
/**
948
* Core namespace.
1049
* @type {Object}

src/ol3cesium.js

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,24 @@ goog.require('olcs.VectorSynchronizer');
1111

1212

1313
/**
14-
* @param {!ol.Map} map
14+
* @param {!(olcsx.OLCesiumOptions|ol.Map)} options Options.
1515
* @param {Element|string=} opt_target Target element for the Cesium container.
16+
* Use the `target` option in `options` instead.
1617
* @constructor
1718
* @api
1819
*/
19-
olcs.OLCesium = function(map, opt_target) {
20+
olcs.OLCesium = function(options, opt_target) {
21+
22+
var map, createSynchronizers;
23+
var target = opt_target;
24+
if (options instanceof ol.Map) {
25+
map = options;
26+
} else {
27+
map = options.map;
28+
target = options.target;
29+
createSynchronizers = options.createSynchronizers;
30+
}
31+
2032
/**
2133
* @type {!ol.Map}
2234
* @private
@@ -32,7 +44,7 @@ olcs.OLCesium = function(map, opt_target) {
3244
this.container_ = goog.dom.createDom(goog.dom.TagName.DIV,
3345
{style: fillArea + 'visibility:hidden;'});
3446

35-
var targetElement = goog.dom.getElement(opt_target || null);
47+
var targetElement = goog.dom.getElement(target || null);
3648
if (targetElement) {
3749
goog.dom.appendChild(targetElement, this.container_);
3850
} else {
@@ -121,17 +133,16 @@ olcs.OLCesium = function(map, opt_target) {
121133
this.scene_.globe = this.globe_;
122134
this.scene_.skyAtmosphere = new Cesium.SkyAtmosphere();
123135

124-
/**
125-
* @type {!olcs.RasterSynchronizer}
126-
* @private
127-
*/
128-
this.rasterSynchronizer_ = new olcs.RasterSynchronizer(this.map_,
129-
this.scene_);
130-
this.rasterSynchronizer_.synchronize();
136+
var synchronizers = goog.isDef(createSynchronizers) ?
137+
createSynchronizers(this.map_, this.scene_) :
138+
[
139+
new olcs.RasterSynchronizer(this.map_, this.scene_),
140+
new olcs.VectorSynchronizer(this.map_, this.scene_)
141+
];
131142

132-
this.vectorSynchronizer_ = new olcs.VectorSynchronizer(this.map_,
133-
this.scene_);
134-
this.vectorSynchronizer_.synchronize();
143+
for (var i = synchronizers.length - 1; i >= 0; --i) {
144+
synchronizers[i].synchronize();
145+
}
135146

136147
if (this.isOverMap_) {
137148
// if in "stacked mode", hide everything except canvas (including credits)

0 commit comments

Comments
 (0)