ol点击切换矢量、影像、地形图层

根据之前添加的图层进行切换https://blog.csdn.net/ssy001128/article/details/129681657?spm=1001.2014.3001.5501【代码】ol加载wmts切片服务/xyz服务地图。https://blog.csdn.net/ssy001128/article/details/129681657?spm=1001.2014.3001.5501

<template>
    <div class="layer-control-container">
      <div
        v-for="item of list"
        :key="item.id"
        class="layer"
        :class="{active: item.id === currentLayerId}"
          @click.stop="changeBaseLayer(item.id)"
      >
      </div>
    </div>
</template>

<script>
export default {
  name: "LayerControlContainer",
  components: {

  },
  mixins: [

  ],
  props: {
    map: {
      required: true,
      type: Object
    }
  },
  data() {
    return {
      currentLayerId: "RASTER", // 默认影像
      list: [
        {
          name: "影像",
          id: "RASTER"
        },
        {
          name: "矢量",
          id: "VECTOR"
        },
        {
          name: "地形",
          id: "TOPOGRAPHY"
        }
      ],
    
    };
  },
  computed: {

  },
  watch: {
    currentLayerId(newId, oldId) {
      this.map.getLayerByProp("id", oldId)[0].setVisible(false);
      this.map.getLayerByProp("id", newId)[0].setVisible(true);
    },
   
  },
  mounted() {
  },
  methods: {
    changeBaseLayer(id) {
      this.currentLayerId = id;
    }
  }
};
</script>

<style lang="scss" scoped>
.layer-control-container {
  position: absolute;
  z-index: 10;
  width: 380px;
  height: 88px;

  .layer {
    position: absolute;
    top: 0;
    right: 0;
    z-index: 1;
    width: 120px;
    height: 88px;
    transition: 0.5s transform;
    transform: translateX(0);
    cursor: pointer;
    &.active {
      z-index: 4;
       &:nth-of-type(1) {
      background: url('@/assets/img/image/img_yingxiang_p.png') no-repeat center / contain;
    }

    &:nth-of-type(2) {
      background: url('@/assets/img/image/img_shiliang_p.png') no-repeat center / contain;
    }

    &:nth-of-type(3) {
       background: url('@/assets/img/image/img_dixing_p.png') no-repeat center / contain;
    }
    }

    &:nth-of-type(1) {
      background: url('@/assets/img/image/img_yingxiang_n.png') no-repeat center / contain;
    }

    &:nth-of-type(2) {
      background: url('@/assets/img/image/img_shiliang_n.png') no-repeat center / contain;
    }

    &:nth-of-type(3) {
        background: url('@/assets/img/image/img_dixing_n.png') no-repeat center / contain;
    }
  }

  &:hover {
    .layer:nth-of-type(2) {
      transform: translateX(-130px);
    }

    .layer:nth-of-type(3) {
      transform: translateX(-260px);
    }
  }
}


</style>

 使用时 将地图引进去

<layer-control :map="map" :style="mapTcPositionData.tcqh"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基本的Vue3组件,用于切换OpenLayers矢量图层: ```vue <template> <div class="map-layer-switcher"> <select v-model="selectedLayer" @change="switchLayer"> <option v-for="(layer, index) in layers" :key="index" :value="layer">{{ layer.name }}</option> </select> </div> </template> <script> import { ref } from 'vue'; import { VectorLayer } from 'ol/layer'; import { Vector } from 'ol/source'; export default { name: 'MapLayerSwitcher', props: { map: { type: Object, required: true, }, layers: { type: Array, required: true, }, }, setup(props) { const selectedLayer = ref(props.layers[0]); function switchLayer() { const layer = selectedLayer.value; const olLayer = new VectorLayer({ source: new Vector({ features: layer.features }), style: layer.style, }); props.map.getLayers().forEach((l) => { if (l instanceof VectorLayer) { props.map.removeLayer(l); } }); props.map.addLayer(olLayer); } return { selectedLayer, switchLayer, }; }, }; </script> <style> .map-layer-switcher select { margin: 10px; padding: 5px; border-radius: 5px; background-color: #fff; color: #333; font-size: 16px; } </style> ``` 此组件需要传递两个属性:`map` 和 `layers`。 `map` 是一个OpenLayers地图实例,`layers` 是一个包含多个矢量图层的数组。每个图层应该包含一个 `name` 和 `features` 属性,以及一个可选的 `style` 属性。 当用户选择一个图层时,`switchLayer` 函数会创建一个新的OpenLayers矢量图层,并使用选定的图层的 `features` 和 `style` 属性来初始化该图层。然后,它会删除所有旧的矢量图层,并将新图层添加到地图中。 在模板中,我们使用一个下拉菜单来展示可用的图层,并将用户选择的图层绑定到 `selectedLayer` 变量上。当用户选择一个不同的图层时,`switchLayer` 函数将自动调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值