bmh_cesium/public/widgets/manageLayers/widget.js

191 lines
5.6 KiB
JavaScript
Raw Normal View History

2025-03-09 23:23:50 +00:00
//模块:
xjsdk.widget.bindClass(xjsdk.widget.BaseWidget.extend({
options: {
//弹窗
view: {
type: "window",
url: "view.html",
windowOptions: {
width: 250,
height: 500
}
}
},
hasManagerBaseMaps: true, //是否对基础底图做做控制
//初始化[仅执行1次]
create: function () {
},
viewWindow: null,
//每个窗口创建完成后调用
winCreateOK: function (opt, result) {
this.viewWindow = result;
},
//打开激活
activate: function () {
},
//关闭释放
disable: function () {
this.viewWindow = null;
},
_layers: null,
//绑定自定义的非配置图层到图层控制控件中
addOverlay: function (item) {
if (!item.name)
item.name = "未命名";
if (!item.id)
item.id = viewer.xjsdk.getNextId();
if (!item.pid)
item.pid = -1;
//计算层次顺序
var order = Number(item.order);
if (isNaN(order))
order = this._layers.length + 1;
item.order = order;
//主键,用于存储取图层用,防止有重复
item._key = this._layers.length + "_" + item.id + "_" + item.name;
this._layers.push(item);
if (this.isActivate && this.viewWindow) {
this.viewWindow.addNode(item);
}
},
//从图层控制控件中删除指定的图层
removeLayer: function (name) {
for (var i = 0; i < this._layers.length; i++) {
var item = this._layers[i];
if (item.name == name) {
this._layers.splice(i, 1);
if (this.isActivate && this.viewWindow) {
this.viewWindow.removeNode(item);
}
break;
}
}
},
getLayers: function () {
if (this._layers == null) {
var layers = [];
var basemapsCfg = this.hasManagerBaseMaps ? this.viewer.xjsdk.config.basemaps : [];
var operationallayersCfg = this.viewer.xjsdk.config.operationallayers;
//构建集合,预处理相关数据
for (var i = 0; i < basemapsCfg.length; i++) {
var item = basemapsCfg[i];
layers.push(item);
// if (item.type == "group" && item.layers) { //group是否打开控制子图层是的话取消注释
// for (var idx = 0; idx < item.layers.length; idx++) {
// var childitem = item.layers[idx];
// if (!childitem.name)
// childitem.name = item.name + '-' + (idx + 1);
// childitem._parent = item;
// layers.push(childitem);
// }
// }
}
for (var i = 0; i < operationallayersCfg.length; i++) {
var item = operationallayersCfg[i];
layers.push(item);
// if (item.type == "group" && item.layers) {//group是否打开控制子图层是的话取消注释
// for (var idx = 0; idx < item.layers.length; idx++) {
// var childitem = item.layers[idx];
// if (!childitem.name)
// childitem.name = item.name + '-' + (idx + 1);
// childitem._parent = item;
// layers.push(childitem);
// }
// }
}
//初始化顺序字段,
for (var i = 0; i < layers.length; i++) {
var item = layers[i];
//主键,用于存储取图层用,防止有重复
item._key = i + "_" + item.id + "_" + item.name;
}
this._layers = layers;
}
return this._layers;
},
//定位
getLayar: function (item) {
return this.viewer.xjsdk.getLayer(item);
},
centerAt: function (item) {
var model = this.getLayar(item);
model && model.centerAt();
},
getLayerVisible: function (item) {
var model = this.getLayar(item);
return model && model.getVisible();
},
//更新图层:显示隐藏状态
updateLayerVisible: function (item, visible) {
var model = this.getLayar(item);
model.config.visible = visible; //修改配置中的值
model.setVisible(visible);
if (visible && this.config.autoCenter
&& !model.config.noCenter) {//在对应config.json图层节点配置noCenter:true 可以不定位
model.centerAt();
}
//存在关联widget时
if (item.onWidget) {
if (visible) {
xjsdk.widget.activate({
uri: item.onWidget,
layerItem: item,
disableOther: false
});
} else {
xjsdk.widget.disable(item.onWidget);
}
}
//更新到分屏对比
// var mapCompare = xjsdk.widget.getClass('widgets/mapCompare/widget.js');
// if (mapCompare) {
// mapCompare.updateLayerVisible(model.config, visible);
// }
},
//更新图层:透明度
udpateLayerOpacity: function (item, opacity) {
var model = this.getLayar(item);
model.setOpacity(opacity);
},
//更新图层:顺序
udpateLayerZIndex: function (item, order) {
var model = this.getLayar(item);
model.setZIndex(order);
}
}));