'use script' //开发环境建议开启严格模式 ;(function (window, mars3d) { var tuliDiv; //创建widget类,需要继承BaseWidget class MyWidget extends mars3d.widget.BaseWidget { //弹窗配置 get view() { return { type: 'window', url: 'view.html', windowOptions: { width: 250, height: 500, }, } } //是否可以控制basemaps,因为有底图控制了,具体项目中可以按需改为false get hasManagerBaseMaps() { return true } //初始化[仅执行1次] create() {} //每个窗口创建完成后调用 winCreateOK(opt, result) { this.viewWindow = result } //打开激活 activate() { //监听事件,联动勾选状态 this.map.on(mars3d.EventType.addLayer, this._onAddLayerHandler, this) tuliDiv = window.document.getElementById('tuli'); this.map.on(mars3d.EventType.removeLayer, this._onRemoveLayerHandler, this) } //关闭释放 disable() { this.viewWindow = null this.map.off(mars3d.EventType.addLayer, this._onAddLayerHandler, this) this.map.off(mars3d.EventType.removeLayer, this._onRemoveLayerHandler, this) } _onAddLayerHandler(e) { if (!this.isActivate || !this.viewWindow||e.layer.name=='未命名'||e.layer.name== undefined) { return } console.log('添加了图层', e) this.viewWindow.updateNode(e.layer) } _onRemoveLayerHandler(e) { if (!this.isActivate || !this.viewWindow) { return } console.log('移除了图层', e) this.viewWindow.removeNode(e.layer) } getLayers() { return this.map.getLayers({ basemaps: true, //是否取config.json中的basempas layers: true, //是否取config.json中的layers }) } //更新图层:显示隐藏状态 updateLayerShow(layer, show) { layer.show = show if (show) { if (!layer.isAdded) { this.map.off(mars3d.EventType.addLayer, this._onAddLayerHandler, this) this.map.addLayer(layer) this.map.on(mars3d.EventType.addLayer, this._onAddLayerHandler, this) } if (this.config.autoCenter && !layer.options.noCenter) { //在对应config.json图层节点配置 noCenter:true 可以不定位 layer.flyTo() } //存在关联widget时 let item = layer.options if (item.onWidget) { mars3d.widget.activate({ uri: item.onWidget, layerItem: item, disableOther: false, }) } } else { // if (layer.isAdded) { // this.map.removeLayer(layer) // } //存在关联widget时 let item = layer.options if (item.onWidget) { mars3d.widget.disable(item.onWidget) } } } } //注册到widget管理器中。 mars3d.widget.bindClass(MyWidget) //每个widet之间都是直接引入到index.html中,会存在彼此命名冲突,所以闭包处理下。 })(window, mars3d)