使用ArcGIS API for JavaScript实现类似ArcMap的图层控制面板Tab of Contents

最近由于项目需要封装了一个web端类似ArcMap中的Table of Contents的图层控制面板,暂时只是支持WMTS为 底图,动态服务和要素服务作为业务图层。

/*********封装接口************/
define(["dojo/_base/declare",
        "dojo/_base/lang",
        "esri/map",
        "esri/layers/WMTSLayer",
        "esri/layers/ArcGISDynamicMapServiceLayer",
        "esri/layers/FeatureLayer"
], function(Declare, Lang, Map, WMTSLayer, ArcGISDynamicMapServiceLayer, FeatureLayer) {
   
return Declare("AIMapToc", null, {
map:null,
ztree:null, 
layerIds:null,
allChildrenIds:null

constructor : function(_map){
   
this.map = _map;

// 控制服务及图层当前比例尺是否可见
map.on("zoom-end", Lang.hitch(this, function(){
   

// 更新图层树
this.updateTree();

}));
},
createTree:function(domId){
   

if(this.ztree != null){

// 重置ztree,因为跟踪map的addlayer事件,需要重新读取地图图层数据建立图层面板
this.ztree  = null;
$('#'+domId).empty();
}

var layerAutoNodes = [];// ztree节点集合
this.layerIds = this.map.layerIds;// 动态图层
var graphicsIds = this.map.graphicsLayerIds;// 几何图层
this.layerIds = this.layerIds.concat(graphicsIds);
var currentScale = this.map.getScale();// 当前比例尺
var isServiceScale = true;// 服务在当前比例尺下是否可见
var isLayerScale = true;// 图层在当前比例尺下是否可见
var check = false;//  节点选中情况

// 遍历所有的图层,构造ztree
for(var i = 0, len = this.layerIds.length;i < len;i++){


var layer = this.map.getLayer(this.layerIds[i]);
if(layer instanceof WMTSLayer){
  // 底图不加入图层面板

continue;
}else{


if(layer instanceof ArcGISDynamicMapServiceLayer){
  //动态地图服务


isServiceScale = (!layer.minScale || currentScale >= layer.maxScale && currentScale <= layer.minScale);// 不设置图层显示比例尺范围时minScale等于0
var layerInfos = layer.layerInfos;
isCheck = layer.visible;
layerAutoNodes.push({
  "name":"地图服务"+i,"id":i, "pId":-1,"checked":isCheck,
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值