mapbox添加一个图层并根据属性字段的信息过滤显示部分feature

需求场景:

mapbox使用addLayer添加一个图层,需要根据此图层数据源属性字段properties中的某一个字段过滤,以此在地图上显示符合条件的feature。

例如:地图上添加一个line图层,需要根据radio的选择,显示满足条件的feature

在这里插入图片描述


实现代码

此处省略addLayer的步骤,具体的可参考之前的文章

假设数据源中属性中包含如下字段score,其中每个feature有不同的值

properties: {
	score: 90
}

当选择checkbox其中一个或多个时候,触发@change="onCheckedChange"事件;allScores为分数的集合

<template>
  <div>
    <a-checkbox-group :options="allScores" @change="onCheckedChange" />
  </div>
</template>

<script>
  export default {
    name: "Test",

    data() {
      return {
        allScores: [
          {
            lable: "0~60",
            value: "D",
            setp: [0, 60]
          },
          {
            lable: "60~70",
            value: "C",
            setp: [60, 70]
          },
          {
            lable: "70~60",
            value: "B",
            setp: [70, 80]
          },
          {
            lable: "80~100",
            value: "A",
            setp: [80, 100]
          }
        ]
      };
    },

    mounted() {},

    methods: {
      onCheckedChange(checkedKeys) {
        let filter = [];
        this.allScores.forEach((item) => {
          if (checkedKeys.includes(item.value)) {
            filter.push(["all", [">=", ["get", "score"], item.setp[0]], ["<", ["get", "score"], item.setp[1]]]);
          }
        });
        this.map.setFilter(lineId, ["any", ...filter]);
      }
    }
  };
</script>

代码解析:

其中使用了all和any的表达式,all代表且,any为或

all中的条件需要全部满足,例如需要满足分数score>=80且score<100

使用any是为了checkbox多选的情况下,比如想看A等级和C等级的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值