使用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给地图实例添加精灵图图标 的相关文章

  • 如何使用 ggplot2 剪切、裁剪或白色填充紧紧包围多边形外部的矩形

    我只是想用白色填充简单多边形之外的区域 出于某种原因 它在中心画了一根奇怪的木桩 就像它认为这是一个吸血鬼杀手或其他什么东西一样 搞砸了 我尝试跟随这个帖子 https stackoverflow com questions 2128664
  • R:计算两个点层之间的最短距离

    我需要计算两个点矩阵之间的最短距离 我是 R 新手 不知道如何做到这一点 这是我用来调用数据并将其转换为点的代码 library dismo laurus lt gbif Laurus nobilis locs lt subset laur
  • python:使用 gdal 绑定在内存中执行 gdalwarp

    我目前有一个加工链R下载MODIS数据然后调用gdalwarp从系统将特定子数据集 例如 NDVI 重新投影到 WGS1984 中 所结果的GeoTiffs然后被收集到一个HDF5文件以供进一步处理 现在我将处理链移至python 我想知道
  • Java 相当于 OpenLayers [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个Java库来显示来自各种来源的地图数据 包括shapefile WMS WFS Goog
  • 找到两个多边形之间最短笛卡尔距离的最快方法是什么

    I have 1 个红色多边形说和50 个随机放置的蓝色多边形 它们位于地理2D space 找到红色多边形与其最近的蓝色多边形之间的最短距离的最快 速度测试算法是什么 请记住 这并不是将构成多边形顶点的点作为值来测试距离的简单情况 因为它
  • 删除传单地图上的图例

    我有一个传单地图 设置为当用户单击按钮时根据类别更改样式 实时地图 http maneesha github io test map html http maneesha github io test map html 源代码 https
  • 使用 geotools api 在 WGS84 crs 中线段和点之间的最短距离

    在geotools中 您可以使用Geometry类中的距离函数找到两个几何图形之间的距离 几何有一个点子类 但没有几何的线段子类 然而 有一个 LineSegment 类派生自 LineString 它不是 Geometry 类的子类 我尝
  • sf 对象的大小图例不会显示正确的符号

    有谁知道为什么传说size审美的BIR74不会显示点大小而是矩形 如果答案是肯定的 我该如何解决这个问题 可重现的例子 library sf devtools install github tidyverse ggplot2 library
  • 如何使用 GDAL 从 tiff 和 4 个角纬度和经度创建 geotiff [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一张没有 TIFF 格式地理数据的图像 地图 我需要从我的图像中获取 GeoTIFF 文件 我的地
  • 原则 2 的 GIS 扩展

    我想为我的 Doctrine 2 项目编写一个 GIS 地理空间数据 扩展 我知道如何编写简单的自定义函数和类型 为了适应MySQL特殊的存储格式 我在检索 存储数据时需要使用一些SQL函数 GeomFromWKB 和AsBinary 我找
  • 地理数据网络服务

    我正在考虑编写一个程序来检查英国议会议员最近提出的一些里程声明 实际上大约有 45 000 个里程 我所掌握的数据相当准确 旅行的出发地和目的地通常仅 在城镇级别提供 我想做的基本上是查看他们提交的里程数据 查看从网络服务获得的 计算 里程
  • 如何从 NoSQL DBMS(如 DynamoDB)存储 GPS 坐标并搜索半径范围内的地点

    我的团队需要像 DynamoDB 这样的 DBMS 来存储大量数据 主要是位置和坐标 我考虑过使用一些基于 GIS 的 DBMS 例如 PostGIS 并在 POINT 上建立索引 但 DynamoDB 似乎非常适合我们的使用 存储坐标并快
  • GeoAlchemy2:获取某个点的经纬度

    考虑以下SQLAalchemy http www sqlalchemy org GeoAlchemy2 http geoalchemy 2 readthedocs org en 0 2 6 index html具有几何字段的 ORM fro
  • 查找信标的两个地理位置之间的点

    假设我们有两个beacons放置在道路两侧 我们知道他们的latitude and longitude它们所在的位置 我们将它们视为一个位置 我们还知道distance两者之间以米为单位beacons 使用半正矢公式测量 我们的设备正在这两
  • 将 R data.frame 转换为 Javascript 数组

    我想将数据框的某些列保存为特定格式 JavaScript 格式 我尝试过使用toJSON from rjson包但这不起作用 我的结果应该是这样的 http leaflet github io Leaflet markercluster e
  • 持久(基于磁盘)R 树(或 R* 树)

    R Tree 如何实现为持久性 基于磁盘 树 用于保存 R Tree 索引或保存叶值的文件的架构是什么 注意 此外 如何在这样的持久 R 树中执行插入 更新和删除操作 注释 II 我已经实现了具有批量加载功能的内存中 R 树 但我认为当我们
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • 如何从 OpenStreetMap 道路中去除水?

    我想从 OpenStreetMap 获取旧金山的轮廓 有一个SF 的关系 http www openstreetmap org relation 111968 但它含有大量的水 这使得城市居民无法识别 OSM 中是否有更好的旧金山多边形 有
  • D3js:如何设计地形图?

    给定具有高程数据的 GIS 栅格 如何在D3js中设计地形图 有没有使用 D3js 制作的耕地地形图 地形图的示例 不工作 我探索了以下可能性 tif gt gdal contour py gt shp gt topojson gt d3j
  • C#:如何确定坐标是否在美国大陆?

    我正在获取坐标 纬度 经度 我想检查这些坐标是否位于美国大陆 有没有一种简单的方法可以在 C 中实现 我可以将坐标转换为 MGRS 或 UTM 谢谢 哇哦 他们专门为你准备了 http econym org uk gmap states x

随机推荐

  • 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文件 并存储