mapboxgl 中给地图添加遮罩蒙版,并不遮罩其中一块区域

文章目录

    • 概要
    • 效果预览
    • 技术思路
    • 技术细节
    • 小结

概要

本篇文章主要是给一整块地图添加遮罩层蒙版,但是不遮罩其中一个区域,以反向高亮地区内容。

效果预览

在这里插入图片描述

技术思路

  1. 这里要实现某个区域反显高亮,需要这个区域的边界json文件,与echarts中的相同,这都是通用的。
  2. 实现全局遮罩给定的坐标就是-180,180.如果只想遮罩这个省,不想全部,也需要引入边界json文件即可。
  3. 总体来说就是某个遮罩,除去了某个区域遮罩。就会形成这个效果。

技术细节

提示:以下代码仅为主要代码,其余不再赘述。

  1. 给省级(甘肃省)添加蒙版
    NationBounds 是全国省级边界json
/**
 * 给省级添加蒙版遮罩
*/
createGanSuMBLayer() {
  let bounds = {}
  for(let i = 0; i < NationBounds.features.length; i++) {
    let bound = NationBounds.features[i]
    if (bound.properties.adcode == '620000') {
      bounds = bound
    }
  }
  this.MBConfigOption(bounds)      
},
  1. 根据选择地区添加蒙版遮罩
    GanSuBounds是甘肃省内市州级边界json
/**
 * 根据选择地区添加蒙版遮罩
 */
createMBLayer(areacode) {
  const map = this.map
  let bounds = {}
  let center = [] // 展示层中心点位
  for(let i = 0; i < GanSuBounds.features.length; i++) {
    let bound = GanSuBounds.features[i]
    if (bound.properties.adcode == areacode) {
      bounds = bound
      center = bound.properties.center
    }
  }
  // 将所选点设置为地图中心
  map.setCenter(center);
  // Zoom to the zoom level 8 with an animated transition
  map.zoomTo(7.5, {
    duration: 2000
  });
  this.MBConfigOption(bounds)
},
  1. 蒙版遮罩配置信息
/**
 * 蒙版遮罩配置信息 
 */
MBConfigOption(bounds) {
  const map = this.map
  // map.addSource('geojson', {
  //   type: 'geojson',
  //   data: {
  //     type: 'FeatureCollection',
  //     features: [],
  //   },
  // })

  map.addLayer({
    //蒙版边界
    id: 'mb-line',
    type: 'line',
    source: {
      type: 'geojson',
      data: bounds, //区划的面数据
    },
    paint: {
      'line-color': 'rgba(100, 149, 237, 0.6)',
      "line-width": 4
    },
    layout: {
      visibility: 'visible',
    },
  });

  map.addLayer({
    //蒙版图层   //通过边界数据反选 达到挖洞效果
    id: 'mb-tag',
    type: 'fill',
    source: {
      type: 'geojson',
      data: {
        type: 'Feature',
        geometry: {
          type: 'Polygon',
          coordinates: [
            [
              // 多边形外围 需要进行遮罩的点 这里是给世界地图加遮罩 所以是世界的四个端点
              [-180, 90],
              [180, 90],
              [180, -90],
              [-180, -90],
            ],
            bounds.geometry.coordinates[0][0]
          ],
        },
      },
    },
    paint: {
      'fill-color': 'rgba(0, 41, 127, 0.68)',
      // 'fill-opacity': 1 /* 透明度 */,
    },
    layout: {
      visibility: 'visible',
    },
  });
},   

小结

反向思维,遮罩全部,抠出部分即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/275483.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flink1.17实战教程(第三篇:时间和窗口)

系列文章目录 Flink1.17实战教程&#xff08;第一篇&#xff1a;概念、部署、架构&#xff09; Flink1.17实战教程&#xff08;第二篇&#xff1a;DataStream API&#xff09; Flink1.17实战教程&#xff08;第三篇&#xff1a;时间和窗口&#xff09; Flink1.17实战教程&…

华锐三维云展平台创建VR文化宣传展厅,让文化传承变得更便捷和高效

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐走进人们的生活。通过华锐云展平台&#xff0c;可以通过拖、拉、拽&#xff0c;快速自由地创建一个VR文化宣传展厅&#xff0c;VR文化宣传展厅为人们提供了一个全新的、沉浸式的文化体验空间。在…

uniapp的分包使用记录

UniApp的分包是一种将应用代码划分为多个包的技术。分包的核心思想是将不同部分的代码划分为不同的包&#xff0c;按需加载&#xff0c;从而提高应用性能。使用UniApp的条件编译功能&#xff0c;开发人员可以根据需要将代码划分为多个包。每个包都包含一组页面和组件&#xff0…

在国内如何在Tiktok上买东西(在tiktok上付款)??

TikTok是一款由中国公司字节跳动&#xff08;ByteDance&#xff09;开发的社交媒体应用&#xff0c;于2016年9月正式上线。它在全球范围内迅速走红&#xff0c;特别受到年轻用户的喜爱。以下是关于TikTok的介绍以及其一些优势 支持的卡头有5561、531993 //点我办卡&#xff0c…

stm32H743编译器关于浮点类型强制转换传参的bug

局部函数&#xff0c;正常传参 当测试函数作为局部函数和main函数写在同一个文件中时&#xff0c;参数可以正常传递。函数参数和形参都为3.14 float value 0.0; void float_test(float _v) {value _v; }int main(void) {float_test(3.14f);while(1); } keil仿真截图&#…

关于MySQL、分布式系统、SpringCloud面试题

前言 之前为了准备面试&#xff0c;收集整理了一些面试题。 本篇文章更新时间2023年12月27日。 最新的内容可以看我的原文&#xff1a;https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv MySQL 索引 说一下有哪些锁&#xff1f; 行锁有哪些&#xff1f; 性能优化 分库分表…

Java生态系统的进化:从JDK 1.0到今天

目录 前言 JDK 1.0&#xff1a;开启Java时代 JDK 1.1&#xff1a;Swing和内部类 JDK 1.2&#xff1a;Collections框架和JIT编译器 JDK 1.5&#xff1a;引入泛型和枚举 JDK 1.8&#xff1a;Lambda表达式和流 JDK 11以后&#xff1a;模块化和新特性 未来展望 总结 作者简…

3D换肤在服装行业的应用

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 通过采用高质量的 3D 模型&#xff0c;企业可以提供更加身临其境的体…

cpp_07_类型转换构造_析构函数_深拷贝_静态成员

1 类型转换构造函数 1.1 why? 基本类型之间的转换&#xff0c;编译器内置转换规则&#xff1a;int -> double 类类型之间的转换&#xff0c;编译器不知道转换规则&#xff0c;需要用户提供&#xff1a;Cat -> Dog // consconv_why.cpp 为什么需要自定义转换 #includ…

ARM CCA机密计算软件架构之RMI领域管理接口与RSI领域服务接口

领域管理接口 领域管理接口&#xff08;RMI&#xff09;是RMM与正常世界主机之间的接口。 RMI允许正常世界虚拟机监视器向RMM发出指令&#xff0c;以管理领域。 RMI使用来自主机虚拟机监视器的SMC调用&#xff0c;请求RMM的管理控制。 RMI使得对领域管理的控制成为可能&…

STM32 基础知识(探索者开发板)--93讲 PWM

预分频器相当于一个计数器&#xff0c;2分频就是接收2个脉冲传递一个脉冲&#xff0c;3分频就是接收3个脉冲传递一个脉冲&#xff0c;最高65535分频&#xff0c;那么总计时间能达到65535*65535*1/72MHZ 约59秒&#xff0c;没有分频器只能计数最高0.09秒 PWM配置步骤 1.配置定时…

Vue : Object.defineProperty()

给对象添加属性: <script>let person {name : 张三,sex : 男}Object.defineProperty(person,age,{value : 18})console.log(person)</script> 控制台查看: 但是添加的属性是不能被遍历的: 但是如果你想又使用defineProperty添加属性, 又想遍历, 那么就在这个def…

阿里云oss拷贝(包含移动的代码)文件并返回下载地址

oss拷贝文件官方地址&#xff1a; https://help.aliyun.com/zh/oss/developer-reference/java-copy-objects?spma2c4g.11186623.0.0.16f76083xr3lKM 步骤1&#xff1a;oss的Maven依赖 <!-- OSS --><dependency><groupId>com.aliyun.oss</groupId>&l…

GIT如何重新生成ssh密钥过程

GIT如何重新生成ssh密钥过程 一、生成密钥前需要把之前的密钥删除吆 第一步&#xff1a;重新配置用户名和邮箱&#xff08; Git Bash 或命令窗口&#xff09; 1、配置用户命令&#xff1a;git config --global user.name “xxxxx” 2、配置邮箱命令&#xff1a;git config …

laravel5.8中实现验证码组件的安装和验证

本篇文章主要讲解使用laravel5.8自带的验证码库实现验证码验证的效果教程。通过本教程你可以快速接入到自己的项目中开发相应的验证功能。 作者&#xff1a;任聪聪 (rccblogs.com) 日期&#xff1a;2023年12月17日 实际效果 安装步骤 步骤一、输入命令 composer require mews…

来看看这个技术,这才是UPS监控的最好方式!

在现代社会中&#xff0c;信息技术的持续发展使得机房UPS监控变得至关重要。机房是企业信息系统的核心&#xff0c;UPS监控系统能够确保在电力故障或其他问题发生时&#xff0c;机房设备能够持续稳定运行&#xff0c;从而保障数据的安全性和可用性。 客户案例 金融机构 河北某…

物流标签,2028 年将以5.2%左右的复合年增长率增长

近年来&#xff0c;在供应链中对产品和货物的跟踪和识别需求不断增长的推动下&#xff0c;物流标签市场出现了显着增长。预计该市场将继续以稳定的速度增长&#xff0c;无论是在全球还是在中国市场。 全球市场分析&#xff1a;全球物流标签市场预计从 2021 年到 2028 年将以 5.…

Mac系统如何安装rosetta?

目录​​​​​​​ 什么是rosetta&#xff1f; 如何安装rosetta&#xff1f; 如何用rosetta打开指定应用&#xff1f; 什么是rosetta&#xff1f; Rosetta是苹果公司开发的一个程序&#xff0c;用于让建立在特定处理器架构之上的旧版软件在新的处理器架构上运行。这个功能…

搜维尔科技:经脉腧穴虚拟针灸VR虚拟教学平台AcuMap软件案例分享

北京中医药大学经脉腧穴VR虚拟教学平台案例 主要产品 HTCvive &#xff0c;AcuMap&#xff1b; 实施内容 一、项目说明 &#xff08;1&#xff09;穴位取穴与体表解剖标志关系&#xff1b;&#xff08;2&#xff09;穴下层次解剖及周围解剖结构展示&#xff1b; &#xf…

FileZilla的使用以及FileZilla的主动模式和被动模式(详细案例分析附思维导图)

目录 前言 一.FileZilla的简介 1.1 主要功能 二.FileZilla的使用&#xff08;案例&#xff09; 2.1 虚拟机里面安装 2.2 案例 三.FileZilla的主动模式和被动模式 3.1 主动模式&#xff08;Active Mode&#xff09; 3.2 被动模式&#xff08;Passive Mode&#xff09; …