当前位置: 首页 > article >正文

【WebGIS实例】(7)MapboxGL绘制不同颜色的Symbol图标

前言

在上一篇实例博客中(MapboxGL绘制简易气泡图)我们绘制了一个简易的单色气泡图,现在需求升级了。我们需要为气泡加载不同的颜色。
而要实现这个效果,其实相当简单,直接利用Mapbox提供的SDF渲染方法。
官网教程参考:Using recolorable images in Mapbox maps
在这里插入图片描述

接下来,我们将在【WebGIS实例】(6)MapboxGL绘制简易气泡图这篇博客的基础上来实现我们想要的效果。

实现

首先,矢量要素的properties新增color属性,数据格式示例:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "num": 414,
        "color": "#808080"
      },
      "geometry": {
        "coordinates": [
          112.68784006428433,
          23.85455050268874
        ],
        "type": "Point"
      }
    }
  ]
}

第一步:为图像启用SDF

 // 加载图标
 map.loadImage(require('@/assets/circle.png'), function (error, image) {
   if (error) throw error
   map.addImage('bubbleIcon', image, { sdf: true })
 })

这里我们直接引入circle.png,它是一个单色的圆形。同时,我们要为图像启用sdf: { sdf: true },启用的sdf的图像,在Symbol图层中就能够通过icon-color属性来重新渲染图像的颜色。

第二步:配置图像实际渲染的颜色

map.addLayer({
  id: 'bubbleLayer',
  type: 'symbol',
  source: 'bubbleSource',
  layout: {
    'icon-image': 'bubbleIcon', // 图标ID
    'icon-size': 0.2, // 图标的大小
    'icon-anchor': 'center', // 图标的位置
    'text-field': ['get', 'num'],
  },
  paint: {
    'text-color': '#fff',
    'icon-color': ['get', 'color']
})

上一段代码中,我们在'icon-color'里配置图标实际展示的颜色,直接获取矢量数据的propertiescolor的值。

最后

需要注意的是,SDF功能比较适合单色图像。如果你的图像有多种颜色,你可以去看看牛老师的这篇博客mapboxGL中多颜色图标的实现_牛老师讲GIS的博客-CSDN博客。


http://www.kler.cn/news/10313.html

相关文章:

  • 服务(第五篇)Nginx!!!
  • 2023年全国最新道路运输从业人员精选真题及答案48
  • 【Chatgpt4 教学】 NLP(自然语言处理)第十课NLP文本分类应用和卷积神经网络(CNN)
  • BFC理解和应用
  • 【Java EE】-多线程编程(十) HashMapHashTableConcurrentHashMap之间的区别
  • chapter-1数据管理技术的发展
  • 私有化部署VideoTogether一起看视频
  • 微积分——极值定理的证明
  • Jetson nano部署剪枝YOLOv8
  • 技术分享 | observer 资源水位介绍
  • Java多线程面试题
  • GEE:支持矢量机(SVM)分类教程
  • 基于JSP的网上购物系统的设计与实现(论文+源码)_kaic
  • 业务项目管理软件使用推荐
  • java day4
  • js读取fetch的返回值
  • Linux ln 命令
  • 运行时内存数据区之程序计数器
  • 【Vite】对 CSS 处理
  • Excel技能之数据验证,总有一款适合你
  • BGP策略实验
  • RPC调用框架简单介绍
  • 心累,网站被盗刷 1.7T 流量
  • vue中的pinia使用和持久化 - 粘贴即用
  • Unity之获取游戏物体对象或组件的几个方法
  • JVM/GC/G1
  • SpringBoot与RabbitMQ 集成以及死信队列,TTL,延迟队列
  • 为什么要创建FAQ?这篇文章告诉你
  • vue3中的全局防抖节流指令
  • Vue学习——【第五弹】