概述

mapboxGl中多图标的实现可以在style中指定sprite来实现,但是在实际使用的时候会出现sprite之外的图标需要引用,此时通过map.addImage()来实现,但是如果存在多个图标的时候,因为map.addImage()需要先通过map.loadImage()先加载图标,而map.loadImage()是一个异步的,使用起来就有点麻烦。本文希望通过再再加sprite来实现一次性添加图标。

实现效果

实现

测试的sprite如下图:

json文件如下:

{"zgyh":{"visible":"true","pixelRatio":1,"x":0,"width":32,"y":105,"height":32},
"jsyh":{"visible":"true","pixelRatio":1,"x":0,"width":32,"y":35,"height":32},
"nyyh":{"visible":"true","pixelRatio":1,"x":0,"width":32,"y":70,"height":32},
"gsyh":{"visible":"true","pixelRatio":1,"x":0,"width":32,"y":0,"height":32}
}

实现代码如下:

  map.on('load',() => {const canvas = document.createElement('canvas')const ctx = canvas.getContext('2d')const img = new Image()img.src = './lib/merge.png'img.onload =  async () => {canvas.width = img.widthcanvas.height = img.heightctx.drawImage(img, 0, 0)fetch('./lib/merge.json').then(res => res.json()).then(res => {for (const k in res) {const { width, height, x, y } = res[k]const data = ctx.getImageData(x, y, width, height).datamap.addImage(k, { width, height, data })}map.addSource('points', {type: 'geojson',data: {type: 'FeatureCollection',features: [{"type": "Feature","properties": { icon: 'zgyh' },"geometry": { "type": "Point", "coordinates": [107.0132554, 22.1441921] }},{"type": "Feature","properties": { icon: 'jsyh' },"geometry": { "type": "Point", "coordinates": [107.0223554, 22.1443921] }},{"type": "Feature","properties": { icon: 'nyyh' },"geometry": { "type": "Point", "coordinates": [107.0344554, 22.1444921] }}]}});map.addLayer({'id': 'points-h','type': 'symbol','source': 'points','layout': {'icon-allow-overlap': true,'icon-image': ['get', 'icon'],'icon-size': ["interpolate",["exponential",1.5],["zoom"],5, 0.5,10, 0.8]},});})}})

mapboxGL中多图标加载的实现相关推荐

  1. 为什么我突然在Firefox中出现“阻止加载混合的活动内容”的问题?

    本文翻译自:Why am I suddenly getting a "Blocked loading mixed active content" issue in Firefox? ...

  2. Swift - 使用addSubview()方法将StoryBoard中的视图加载进来

    使用 Storyboard 我们可以很方便地搭建好各种复杂的页面,同时通过 segue 连接可以轻松实现页面的跳转. 但除了segue,我们还可以使用纯代码的方式实现Storyboard界面的跳转. ...

  3. Pytorch中的数据加载

    Pytorch中的数据加载 1. 模型中使用数据加载器的目的 在前面的线性回归模型中,使用的数据很少,所以直接把全部数据放到模型中去使用. 但是在深度学习中,数据量通常是都非常多,非常大的,如此大量的 ...

  4. c语言文件 加载内存吗,把文件中的数据加载到内存进行查找C语言实现.docx

    把文件中的数据加载到内存进行查找C语言实现 #define _CRT_SECURE_NO_WARNINGS#include#include#includechar **pp=NULL;void ini ...

  5. Java虚拟机中 类的加载过程

    Java中 类的加载过程 例如下面的一段简单的代码 public class HelloWorld {public static void main(String[] args) {System.ou ...

  6. React 中动态的加载组件 ---loadable-components

    loadable-components 用于在react 中动态的加载组件 安装方法: npm i loadable-components 使用: 引入: 代码中使用: 希望对你有所帮助

  7. android动态设置错误页面,Android中替换WebView加载网页失败时的页面

    我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示: 上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难 ...

  8. word文档中添加mathtype加载项

    教您在word文档中添加mathtype加载项 发布时间:2019/08/12 mathtype安装完成后,正常情况下会在word文档中的菜单中自动添加mathtype加载项,但有时也会出现小意外,m ...

  9. 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexPathList 中根据 File 加载 DexFile | loadDexFile 分析 )

    文章目录 前言 一.根据 File 加载 DexFile 二.DexPathList.loadDexFile 函数分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DexClassLo ...

最新文章

  1. HDU 5696 区间的价值 暴力
  2. Piggy-Bank POJ - 1384(完全背包+背包放满)
  3. 如何把创建ECS(CreateInstance)作为触发器来触发函数计算
  4. Transformer 是万能的吗?
  5. 如何下载HLS视频到本地(m3u8)
  6. mysql报错:You must at least set –server-id to enable either a master or a slave
  7. 用R解析Mahout用户推荐协同过滤算法(UserCF)
  8. C++中指针优点与线程中指针变量访问
  9. SQL Server 查询分析器提供的所有快捷方式(快捷键)
  10. 工科数学分析-微积分(1)
  11. 自然语言处理实战:新闻文本分类(附代码)
  12. css字间距 与 Photoshop里字间距关系
  13. VTK:图形基本操作进阶——连通区域分析
  14. HTML5Point 如何去版权图片?
  15. mysql 1033_mysql报错1033 Incorrect information in file: ‘xxx.frm’问题的解决方法
  16. html表格图片垂直居中 css,利用Display: table;实现img图片垂直居中
  17. MATLAB虫害检测农业应用设计
  18. 微信订阅号签到功能_微信公众号积分签到功能怎么添加,怎么制作微信签到赚积分...
  19. 微信开发.Net 接入示例
  20. 联发科嵌入式linux笔试

热门文章

  1. DYA9面向对象中--super关键字
  2. mark制图软件_Mac 都有哪些好用的绘图软件
  3. Centos启动界面:You are in emergency mode
  4. 【深度学习】常见的提高模型泛化能力的方法
  5. mysql导出所有表字段备注
  6. 女人啊!你的名字叫坚强
  7. java 与 汇编_清华大学出版社-图书详情-《汇编语言与计算机体系结构——使用C++和Java》...
  8. 大数据之Hive函数及案例
  9. 2.4gwifi最高下载速度_2.4gwifi最高下载速度
  10. 【MaixPY 教程】用mixly玩转k210——条形码、二维码、AprilTag识别