replacing BaseLayerPicker in CesiumViewerWidget?

871 views
Skip to first unread message

Ákos Maróy

unread,
May 23, 2013, 2:55:17 AM5/23/13
to cesiu...@googlegroups.com
Hi,

I wonder if it was ever intended, or possible to replace the
BaseLayerPicker, or the list of possible layers in CesiumViewerWidget?

what I'd like to do is simply to have a different list of imagery
providers. to achieve this, I tried the following:

- replace the baseLayerPicker object:

var widget = new CesiumViewerWidget({});

// place & start
widget.placeAt(options.divName);
widget.startup();

// override the base layer imagery providers
widget.baseLayerPicker.destroy();
var imageryLayers = widget.centralBody.getImageryLayers();
var providerViewModels =
myCreateImageryProviders(widget.dayImageUrl);
widget.baseLayerPicker = new
Cesium.BaseLayerPicker(widget.baseLayerPickerContainer, imageryLayers,
providerViewModels);

widget.baseLayerPicker.viewModel.selectedItem(providerViewModels[0]);



now this almost works - but the old drop-down menu remains in place, and
the new dropdown menu is put on top of it. this is despite the fact that
it seems in BaseLayerPicker.prototype.destory() provisions are taken to
clean the container element:

var container = this.container;
knockout.cleanNode(container);
container.removeChild(this._element);



- replace baseLayerPicker.viewModel :

as above, bust instead of creating anew BaseLayerPicker:

widget.baseLayerPicker.viewModel = new
Cesium.BaseLayerPickerViewModel(imageryLayers, providerViewModels);

this doesn't work


- replace CesiumViewerWidget.createImageryProviders

CesiumViewerWidget.createImageryProviders = myCreateImageryProviders;

this doesn't seem to have an effect



thus, what is the proper way to do this, if at all?



Akos



Ákos Maróy

unread,
May 23, 2013, 3:46:52 AM5/23/13
to cesiu...@googlegroups.com
anyway, I added a ticket with a suggested solution:

https://github.com/AnalyticalGraphicsInc/cesium/issues/788

dan....@gmail.com

unread,
Jun 2, 2014, 9:03:10 AM6/2/14
to cesiu...@googlegroups.com
Hi,

As a public service announcement for others stumbling on this thread: the syntax for the BaseLayerPicker has changed since this thread started. As of b28 I managed to create my own replacement using these steps:

New HTML on my page:
<div id="baseLayerPickerContainer" style="position:absolute;top:24px;right:24px;width:38px;height:38px; border:3px solid red"></div>

var viewer = new Cesium.Viewer('cesiumContainer',{imageryProvider:false, baseLayerPicker:false});

var imageryViewModels = []; // I populate this as an array of ProviderViewModel objects
... populate it here...


var blp2 = new Cesium.BaseLayerPicker('baseLayerPickerContainer', {
// globe: Cesium.Ellipsoid.WGS84, // Psych! this is wrong.
globe:viewer.scene, // Yep, this is right
imageryProviderViewModels : imageryViewModels
});


Reply all
Reply to author
Forward
0 new messages