美文网首页
三章-21-多图层切换

三章-21-多图层切换

作者: 彩云飘过 | 来源:发表于2020-04-20 17:51 被阅读0次

本文基于腾讯课堂老胡的课《跟我学Openlayers--基础实例详解》做的学习笔记,使用的openlayers 5.3.x api。

源码 见 1021.html ,对应的 官网示例 https://openlayers.org/en/latest/examples/tile-transitions.html?q=setOpacity

image.png image.png
<!DOCTYPE html>
<html>

<head>
  <title>多图层切换
  </title>
  <link rel="stylesheet" href="../include/ol.css" type="text/css">
  <script src="../include/ol.js"></script>
  <script src="../include/jquery-3.1.1.min.js"></script>

</head>
<style>
  #layertree li>span {
    cursor: pointer;
  }
</style>

<body>
  <div id="layertree">
    <h5>点击下面的图层节点,试着调整图层的参数</h5>
    <ul>
      <li><span>OSM 层</span>
        <fieldset id="layer0">
          <label class="checkbox" for="visible0">
            <input id="visible0" class="visible" type="checkbox" />可见
          </label>
          <label>透明度</label>
          <input class="opacity" type="range" min="0" max="1" step="0.01" />
        </fieldset>
      </li>
      <li><span>图层组</span>
        <fieldset id="layer1">
          <label class="checkbox" for="visible1">
            <input id="visible1" class="visible" type="checkbox" />可见
          </label>
          <label>透明度</label>
          <input class="opacity" type="range" min="0" max="1" step="0.01" />
        </fieldset>
        <ul>
          <li><span>食物危机主题图层</span>
            <fieldset id="layer10">
              <label class="checkbox" for="visible10">
                <input id="visible10" class="visible" type="checkbox" />可见
              </label>
              <label>透明度</label>
              <input class="opacity" type="range" min="0" max="1" step="0.01" />
            </fieldset>
          </li>
          <li><span>世界陆地边界图</span>
            <fieldset id="layer11">
              <label class="checkbox" for="visible11">
                <input id="visible11" class="visible" type="checkbox" />可见
              </label>
              <label>透明度</label>
              <input class="opacity" type="range" min="0" max="1" step="0.01" />
            </fieldset>
          </li>
        </ul>
      </li>
    </ul>
  </div>

  <div id="map" class="map"></div>

  <script>
    var map = new ol.Map({
      layers: [
        new ol.layer.Tile({
          source: new ol.source.OSM()
        }), new ol.layer.Group({
          layers: [
            new ol.layer.Tile({
              source: new ol.source.TileJSON({
                url: 'https://api.tiles.mapbox.com/v4/mapbox.20110804-hoa-foodinsecurity-3month.json?securee&access_token=pk.eyJ1IjoiYWhvY2V2YXIiLCJhIjoiY2pzbmg0Nmk5MGF5NzQzbzRnbDNoeHJrbiJ9.7_-_gL8ur7ZtEiNwRfCy7Q',
                crossOrigin: 'anonymous' //跨域访问问题
              })
            }),
            new ol.layer.Tile({
              source: new ol.source.TileJSON({
                url: 'https://api.tiles.mapbox.com/v4/mapbox.world-borders-light.json?secure&access_token=pk.eyJ1IjoiYWhvY2V2YXIiLCJhIjoiY2pzbmg0Nmk5MGF5NzQzbzRnbDNoeHJrbiJ9.7_-_gL8ur7ZtEiNwRfCy7Q',
                crossOrigin: 'anonymous'
              })
            })
          ]
        })
      ],
      target: 'map',
      view: new ol.View({
        center: ol.proj.fromLonLat([37.40570, 8.81566]),
        zoom: 4
      })
    });

   //核心函数,控制图层的显隐和透明度
    function bindInputs(layerid, layer) {
      var visibilityInput = $(layerid + ' input.visible');
      visibilityInput.on('change', function () {
        layer.setVisible(this.checked); //设置图层的显隐
      });
      visibilityInput.prop('checked', layer.getVisible());

      var opacityInput = $(layerid + ' input.opacity');
      opacityInput.on('input change', function () {
        layer.setOpacity(parseFloat(this.value)); //设置图层的透明度
      });
      opacityInput.val(String(layer.getOpacity()));
    }
    
    
    //获取到map所有图层数组,针对每一个图层,绑定透明度和图层显隐
    map.getLayers().forEach(function (layer, i) {
      bindInputs('#layer' + i, layer);
      if (layer instanceof ol.layer.Group) {
        layer.getLayers().forEach(function (sublayer, j) {
          bindInputs('#layer' + i + j, sublayer);
        });
      }
    });
    
   //图层组ul/li DOM 展开效果
    $('#layertree li > span').click(function () {
      $(this).siblings('fieldset').toggle();
    }).siblings('fieldset').hide();
  </script>
</body>

</html>

相关文章

  • 三章-21-多图层切换

    本文基于腾讯课堂老胡的课《跟我学Openlayers--基础实例详解》做的学习笔记,使用的openlayers 5...

  • 21- 《A GUIDE TO IOS ANIMATION 2

    21- 《A GUIDE TO IOS ANIMATION 2.0》(杨骑滔)三章.CoreAnimation-学...

  • CAD 插件

    动态填充:链接命令:DH 自动切换图层:链接xlr-Autolayer.lsp用于自动切换图层的小工具,标注时刻自...

  • photoshop快捷键动图大全(3)纯键盘组合键

    正序切换图层混合模式 【Shift+加号(小键盘)】逆序切换图层混合模式 【Shift+减号(小键盘)】 缩小【C...

  • arcgis android之图层切换

    图层切换是arcgis for android 开发必常见的功能,我的实现方法很简单。首先初始化多个图层服务对象,...

  • IOS核心动画高级四:视觉效果

    我们在第三章【图层几何学】中讨论了图层的frame,第二章【寄宿图】我们讨论了图层的寄宿图,但是图层不仅仅可以是图...

  • Core Animation 高级技巧(四)视觉效果

    我们在第三章图层几何学中讨论了图层的frame,第二章寄宿图则讨论了图层的寄宿图。但是图层不仅仅可以是图片或是颜色...

  • cocos2d-x 随记

    获取子图层 获取设备语言 场景切换动画 //创建待切换的场景 下面列举下场景切换的动画效果,可以参考上面的代码来运...

  • Vue.js+OpenLayers 3、图层切换控制

    一、封装切换图层的方法 initMap.vue 二、调用方法 MapMain.vue

  • 状态 States丨Framer 文档 Code

    Code 其实动画就是图层从一个状态切换到另一个状态,但直接用动画,这个图层就只有两个状态了。要给这个图层定义两个...

网友评论

      本文标题:三章-21-多图层切换

      本文链接:https://www.haomeiwen.com/subject/xywquhtx.html