mapbox 之 switch map 图层切换

由于最近在mapbox-extensions中完善的功能越来越多,尤其是SwitchMapControl这个控件,所以单开一篇向大家介绍一下。

先看一下效果:

功能包括 (整体模仿google):

  • 卫星地图和电子地图切换
  • 图层分组
  • 图层组内图层互斥显示
  • 点击后图层置顶
  • 图层显示后easeTo

如何使用:

  • install
  yarn add mapbox-gl mapbox-extensions
  • use
   map.on('load', () => {
      map.addControl(new SwitchMapControl())
   });

这样就完成了基本使用,但是这样只提供切换到卫星地图功能,并没有弹出的附加图层,接下来我将参数一一介绍。

1.3.x 版本

  • 使用css文件样式替代js中直接写入样式。
  • 增加 全选|清除 功能
  • 增加图钉动画
new SwitchMapControl({
  baseOption:{
    name:'电子地图',                      // 默认:"电子地图"    初始加载的style地图名  
    textColor:'black',                   // 默认:"white"       name文字颜色 
    backgroundImage:'../assets/1.png',   // 默认:              背景图片 
  },
  // satelliteOption:{},                 // 和baseOption一样
  showSatelliteDefault:true,             // 默认:false         是否默认显示卫星影像  
  extra:{                                // 默认:空            附加图层 
    name:"附加图层",                      // 默认:"附加图层"    名称 会显示在图层卡标题栏中 
    nailActiveColor:"blue",              // 默认:"#0066FF"     图钉(点击后图层卡不会消失)点击激活后的颜色  
    showToTop:true,                      // 默认:false         图层被激活时是否移动到上层
    topLayerId:"",                       // 默认:undefined     与showToTop进行配合,图层激活时移动到此id图层之后
    selectAndClearAll:false              // 默认:true          是否开启全选清空功能,
                                         //                    当group中mutex:true 此功能无效
                                         //                    当group中mutex不为true layers存在mutex:true只有清空
    selectAllLabel: "全选"               // 默认:"全选"
    clearAllLabel : "清空"               // 默认:"清空"                                                
    layerGroups:{
      "group1" :{                        // 这是一个record,prop name 被认为组名
         mutex:true,                     // 默认:false          控制整个组图层是否互斥
         uiType:"SwitchBtn"              // 默认:"ImgTxtBtn"    ImgTxtBtn--图片文字按钮(一行三个)  
                                         //                      SwitchBtn--开关(一行一个)
         layers:[
           {
              name:"图层1",              // 必填              图层名字
              layer:[{id:'layer1',       // 必填             虽然名字叫layer,你可以使用但图层也可以使用图层数组
                      type:'fill'}],
              backgroundImage: "",       // 可空    
              backgroundImageActive:""   // 可空      
              zoom:1,                    // 默认:0           初始图层加载顺序
              fixed:true,                // 默认:false       是否固定图层顺序,不受showToTop影像,如正射影像等
              easeToOptions:{},          // 默认:undefined   激活图层后移动镜头参数,默认不移动
              mutex:true,                // 默认:false       组内互斥,即使group的mutex为false也有效
              active:true,               // 默认:fasle       是否初始加载后显示
              onVisibleChange:visible=>{ // 默认:空          当图层激活状态修改时回调
                console.log(visible);
              }
           }
         ]
      }
    }
  }
})

1.2.x 版本

new SwitchMapControl({
  baseOption:{
    name:'电子地图',                      // 默认:电子地图  初始加载的style地图名  
    textColor:'black',                   // 默认:白色      name文字颜色 
    backgroundImage:'../assets/1.png',   // 默认:         背景图片 
  },
  // satelliteOption:{},                 // 和baseOption一样
  showSatelliteDefault:true,             // 默认:false    是否默认显示卫星影像  
  extra:{                                // 默认:空        附加图层 
    name:"附加图层",                      // 默认:附加图层  名称 会显示在图层卡标题栏中 
    nailActiveColor:"blue",              // 默认:#0066FF  图钉(点击后图层卡不会消失)点击激活后的颜色 
    groupsContainerMaxHeight:300,        // 默认:300px    卡片最大高度  
    layerItemActiveColor:"blue",         // 默认:#1677FF  图层被激活显示时ui颜色
    layerItemHoverColor:"black",         // 默认:black    鼠标经过图层后ui颜色,SwitchButton不起作用
    layerItemImgSize:50,                 // 默认:50px     每个图层ui图片的宽高,SwitchButton不起作用  
    showToTop:true,                      // 默认:false    图层被激活时是否移动到上层
    topLayerId:"",                       // 默认:undefined  与showToTop进行配合,图层激活时移动到topLayerId图层之后
    layerGroups:{
      "group1" :{                        // 这是一个record,prop name 被认为组名
         mutex:true,                     // 默认:false    控制整个组图层是否互斥
         uiType:"SwitchBtn"              // 默认:ImgTxtBtn    ImgTxtBtn--图片文字按钮(一行三个)  
                                         //                    SwitchBtn--开关(一行一个)
         layers:[
           {
              name:"图层1",              // 必填           图层名字
              layer:[{id:'layer1',       // 必填          虽然名字叫layer,你可以使用但图层也可以使用图层数组
                      type:'fill'}],
              backgroundImage: "",       // 必填          
              zoom:1,                    // 默认:0        初始图层加载顺序
              fixed:true,                // 默认:false    是否固定图层顺序,不受showToTop影像,如正射影像等
              easeToOptions:{},          // 默认:undefined    激活图层后移动镜头参数,默认不移动
              mutex:true,                // 默认:false     组内互斥,即使group的mutex为false也有效
              active:true,               // 默认:fasle     是否初始加载后显示
              onVisibleChange:visible=>{ // 默认:空        当图层激活状态修改时回调
                console.log(visible);
              }
           }
         ]
      }
    }
  }
})
posted @ 2023-02-20 19:25  辣椒鱼儿酱  阅读(437)  评论(19编辑  收藏  举报