使用cesium给地图实例添加精灵图图标

2023-11-14

前置条件:
1,将精灵图存放在本地文件中;
在这里插入图片描述

2,拿到对应的声明文件(该文件中存放了每一个类型的地图实例对应的图标在精灵图中的位置),我这里是json文件
在这里插入图片描述

这是某一个实例模型对应的数据;

我的做法是,系统登录之后,就掉接口获取到该json文件,并存储在本地存储中,然后需要用到的时候,直接从localstorage中去拿;
在这里插入图片描述
将精灵图存储在本地:
在这里插入图片描述
准备完成,接下来需要在数据来的时候进行渲染即可;
这里用的方法是,将拿到的每一个模型数据处理成cesium所使用的czml格式数据:

绘制图标关键代码:

drawPoint(itemParam) {
    let svgUrl = ''  //存储图标路径
    // 存在阵营信息及存在精灵图json数据
    if (!library.isNull(itemParam.BasicInfo.CS_ForceSide) && !library.isNull(library.getData('modelTypeAndImageContent'))) {
      var modelTypeJson = JSON.parse(library.getData('modelTypeAndImageContent'))
      Object.keys(modelTypeJson).forEach(key => { //key为json文件中的键名
        // console.log('key',key);
        if (key.includes(itemParam.BasicInfo.modelUUID) && key.includes(itemParam.BasicInfo.CS_ForceSide)) {  //匹配键名及阵营信息(1红/2蓝)
          let canvas = document.createElement('canvas'); //创建canvas,
          canvas.width = 120;
          canvas.height = 120;
          let canvastext = canvas.getContext('2d') //获取上下文
          canvastext.drawImage(imageSprite, -modelTypeJson[key].x, -modelTypeJson[key].y); //将精灵图中对应位置的图标在canvas中绘制
          svgUrl = canvas.toDataURL() 
          //toDataURL()是canvas对象的一种方法,用于将canvas对象转换为base64位编码;
          //将图片转换为base64位编码后,图片会跟随代码(html、css、js)一起请求加载,不会再单独进行请		求加载;可以防止由于图片路径错误导致图片加载失败的问题
        }
      })
    }
    let czml = [{
      id: 'document',
      version: '1.0'
    }, {
      id: itemParam.BasicInfo.id,
      name: itemParam.BasicInfo.CS_EntityName,
      label: {
        fillColor: {
          rgba: [255, 255, 255, 255]
        },
        font: '24px Helvetica',
        scale: 0.75,
        horizontalOrigin: 'LEFT',
        outlineColor: {
          rgba: [100, 0, 100, 200]
        },
        outlineWidth: 2,
        pixelOffset: {/* 实体名称-在现有位置向右移动20 */
          cartesian2: [20, 0]
        },
        style: 'FILL_AND_OUTLINE',
        text: itemParam.BasicInfo.CS_EntityName + ''// 字符串类型
      },
      billboard: {
        image: svgUrl, //使用路径
        scale: 0.3
      },
      position: {
        cartographicDegrees: [itemParam.Position.Longitude, itemParam.Position.Latitude, itemParam.Position.Altitude]
      }
    }]
    return czml
  },

每次数据来到之后,
调用该方法,然后将实例添加到数据源中,即可完成渲染

  		  let czml = RealTimeMode.drawPoint(item); // 实时绘制-实体图标元素
          var DataSource = new Cesium.CzmlDataSource();
          window.viewer.dataSources.add(DataSource.load(czml));//viewer实例在其他地方已创建

效果:
在这里插入图片描述
封装后的方法:

// 精灵图位置
const imageSprite = new Image();
imageSprite.src = '../../static/images/sprite.png'


// 精灵图图标绘制
  drawIcon(modelId,side){
    const modelTypeJson = JSON.parse(
      library.getData("modelTypeAndImageContent")
    );
    let svgUrl = "";
    Object.keys(modelTypeJson).forEach((key) => {
      //key为json文件中的键名
      if (
        key.includes(modelId) &&
        key.includes(side) 
      ) {
        //匹配键名及阵营信息(1红/2蓝)
        let canvas = document.createElement("canvas"); //创建canvas,
        canvas.width = 120;
        canvas.height = 120;
        let canvastext = canvas.getContext("2d"); //获取上下文
        canvastext.drawImage(
          imageSprite,
          -modelTypeJson[key].x,
          -modelTypeJson[key].y
        ); //将精灵图中对应位置的图标在canvas中绘制
        svgUrl = canvas.toDataURL();
      }
    });
    return svgUrl;
  }

直接调用这个方法,传入json文件中的id和对应的阵营信息即可渲染对应颜色的图标
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用cesium给地图实例添加精灵图图标 的相关文章

  • gpio 上拉下拉

    每个gpio内部有三种状态 上拉 下拉 不拉 什么时候 需要选择上拉 下拉或不拉呢 1 如果是output 那个一般选择no pull 这样 引脚才能根据你的output数据 进行正确输出 2 如果是input 那么需要看具体应用的默认输入

随机推荐

  • printk函数的用法

    printk在内核源码中用来记录日志信息的函数 只能在内核源码范围内使用 用法和printf非常相似 printk函数主要做两件事情 第一件就是将信息记录到log中 而第二件事就是调用控制台驱动来将信息输出 1 日志级别 printk相比p
  • 设计模式(九)组合模式

    在数据结构中 有树这么一种结构 转换到设计模式中就是组合模式 组合模式的作用就是以统一的方式处理一组具有树形结构的对象 最典型的例子就是菜单项了 一个菜单下可能包括多个菜单项 每个菜单项都可能包含其他子菜单 下面我们来实现菜单项 由于每个菜
  • vector排序问题

    要对vector中的自定义类型进行排序 首先需要提供一个函数bool comp const Interval a const Interval b 来定义类型的排序准则 然后调用std sort intervals begin interv
  • linux下解压zip文件

    linux自带的unzip命令可以解压windows下的zip格式的压缩文件 unzip命令 语法 unzip 选项 压缩文件名 zip 各选项的含义分别为 x 文件列表 解压缩文件 但不包括指定的file文件 v 查看压缩文件目录 但不解
  • pycharm PyQt5报错 Process finished with exit code -1073740791 (0xC0000409) 解决方法

    在写python作业的时候他突然报错了 我觉得我是对的 想法没问题系列 界面也可以出来 是我想象中的样子 但是不能进行交互 所以我怀疑是环境问题或者是什么别的 反正不是我自身原因 蜜汁自信 然后我试了一下老师上课给的例子发现可以运行 我知道
  • GT1030和730哪个好?GT1030与GT730区别对比 (全文)

    对于显卡硬件厂商来说 当属NVIDIA可谓异常活跃 我们知道在游戏领域 N卡一直占据着绝大部分市场 旗下的显卡定位也非常明确 如最新的10系显卡 今年5月份NVIDIA低调发布了定位入门级显卡 GT1030 这款显卡上市之后立马引起了不少玩
  • android图片点击全屏显示,Android浏览图片,点击放大至全屏效果

    近期做一个项目类似于QQ空间 做到照片浏览的功能 对于QQ空间中点击图片放大至全屏 感觉效果非常赞 于是也做了个类似的效果 例如以下 我不知道QQ那个是怎么做的 我的思路例如以下 首先 从图片缩略界面跳转到图片详情页面 应该是从一个Acti
  • 概率论在实际生活的例子_概率论学习笔记

    一 从古典概型开始引入概率论的基本概念 古典概型 全称古典概率模型 也叫等可能模型 是人们最早研究的概率 也是学习概率论的起点 古典概型通过随机实验获得结果 而古典概率研究的问题有两个重要特点 结果有限 可能性一致 1 结果有限 指的是实验
  • C语言以字符形式读写文件

    一 字符读取函数 fgetc 一 函数介绍 fgetc 是 file get char 的缩写 意思是从指定的文件中读取一个字符 函数原型为 int fgetc FILE fp fp 为文件指针 fgetc 读取成功时返回读取到的字符 读取
  • Maven快速搭建GUI项目

    一 eclipse安装好maven插件 并将maven集成到eclipse之后 用maven的archetype 搭建好一个maven archetype queckstart项目的骨架 二 可执行jar文件分为两种 一种是可通过命令行ja
  • 【R语言】实验四 数据分析

    系列文章目录 实验一 R 语言数据结构 数据导入与数据处理 实验二 基本数据处理 实验三 数据可视化 实验四 数据分析 实验五 综合应用 实验数据 实验数据下载 1 hospital data 数据集 数据是关于一些医院的基础信息 数据包含
  • 如何降低APP卸载率?这里有七个方法

    如何降低APP卸载率 这里有七个方法 A A admin 2017 年 1 月 19 日 0 597 次浏览 业内资讯 APP卸载率 现在移动应用市场红海一片 获取用户越来越难 但据了解 更让开发者们为难的是 产品的高卸载率 高卸载率是用户
  • Spring事务及事务失效的部分场景

    简介 spring 有五个事务隔离级别 ISOLATION DEFAULT ISOLATION READ UNCOMMITTED ISOLATION READ COMMITTED ISOLATION REPEATABLE READ ISOL
  • 毕业设计 单片机农业土壤酸度检测系统

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 硬件设计 土壤酸碱度传感器 土壤pH传感器与Arduino的硬件连接 5 软件说明 土壤pH传感器的Arduino代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难
  • Javascript--位运算符

    文章转载自 http www cnblogs com oneword archive 2009 12 23 1631039 html 1 NOT 位运算符NOT由 表示 NOT运算符的实质是对数字求负 然后减1 位运算符NOT是三步的处理过
  • LeetCode(力扣)455. 分发饼干Python

    LeetCode20 有效的括号 题目链接 代码 题目链接 https leetcode cn problems assign cookies 代码 从大遍历 class Solution def findContentChildren s
  • 华为/荣耀 Magicbook/Matebook 开机经常弹出华为智能还原

    问题描述 今年开始 笔者的Magicbook开机时就会弹出华为智能还原 如下所示 检测之后显示是正常的 于是每次都点退出 退出之后就进入了正常的Win10桌面 但是发现 笔记本电脑存在以下问题 有线网络无法连接 网络里面只有无线WiFi可以
  • Nginx教程:配置TCP/IP转发

    安装nginx服务 检查是否编译时带with stream参数 nginx V grep with stream 有with stream参数 可以代理tcp协议 配置nginx的tcp代理 请注意 stream块和http块是两个不同的模
  • python和易语言的脚本哪门更实用?

    前言 每天我们都会面临许多需要高级的编程挑战 你不能用简单的 Python 基本语法来解决这些问题 在本文中 我将分享 13 个高级 Python 它们可以成为你项目中的便捷工具 如果你目前还用不到这些脚本 你可以先添加收藏 以备留用 文末
  • 使用cesium给地图实例添加精灵图图标

    前置条件 1 将精灵图存放在本地文件中 2 拿到对应的声明文件 该文件中存放了每一个类型的地图实例对应的图标在精灵图中的位置 我这里是json文件 这是某一个实例模型对应的数据 我的做法是 系统登录之后 就掉接口获取到该json文件 并存储