[Cesium]加载GeoJSON并自定义设置符号(以点要素为例)

news2025/4/8 11:55:23

  • 数据准备:

Geoserver发布WFS(Web Feature Service)服务

[GeoServer系列]Shapefile数据发布-CSDN博客

数据加载:

数据准备第二种方式加载数据,利用for循环加载多个图层。首先将获取数据(每获取一次获得pomise,将其加入数组中),其次利用Promise.all()异步加载所有图层

    loadVideoLayers(indexes) {
      let that = this;
      try {
        let proArr=[];
        // 添加视频监测图层
        for (const index of indexes) {
          // console.log(index)
          // 2. WMS服务 江苏省视频监
          let pro = axios({
            url: '/api' + this.videoLayer[index],
            method: 'get',
          })
          proArr.push(pro)
        }
        Promise.all(proArr).then(function(resolve) {
          console.log("resolve--", resolve);
          resolve.map(async(item, index) => {
            //返回promise
            let ds = Cesium.GeoJsonDataSource.load(item.data)
            let layer = await that.viewer.dataSources.add(ds)
            that.videoLayers.push(layer);
            })
          })
      }
  }

样式设置(从Ant Design第三方库获取):

在Cesium中,修改点实体的样式可以通过使用billboard属性来设置自定义图标。为了使用自定义的Ant Design或Vue Icon库中的图标,需要先将图标转换成可以在Cesium中使用的格式,例如Canvas或者Data URL。

以下是一个示例,展示了如何使用Ant Design图标库中的图标并将其设置为Cesium中的点实体的样式:

  1. 安装必要的库

    首先,确保安装了Cesium和Ant Design图标库。如果使用Vue,则还需要安装Vue的依赖。

    npm install cesium @ant-design/icons
  2. 创建一个Ant Design图标的Canvas绘制函数

    使用Canvas API来绘制Ant Design图标,并将其转换为Data URL。这个Data URL可以直接用作Cesium点实体的billboard图像。

  • 获取Ant Design的SVG元素
<template>
<a-icon type="video-camera" theme="filled" style="color:darkgray;" ref="lev1"/> 
</template>
<script>
export default{
 methods:{
   findSVGEkement(){
      let refName=lev1
     
      //vue中实现
      const iconElement = this.$refs[refName].$el; // 获取<a-icon>组件的DOM元素
       // 查询SVG元素
      let svg = iconElement.querySelector('svg')
      console.log(svg.outerHTML); // 输出SVG元素或进行其他操作
      return svg;

      //html中实现
      // console.log(element)
      // if (element.tagName.toLowerCase() === 'svg') {
      //   return element;
      // }
      // for (let child of element.children) {
      //   const found = this.findSVGElement(child);
      //   if (found) return found;
      // }
      // return null;
        }
    }
      
    },  
        
}
</script>
  • 转换为Data URL
    async getIconAsDataURL(index) {
      //递归获取svg标签
      //0-2=>1-3
      index=index+1;
      //通过变量动态地访问对象的属性
      let refName='lev'+index
      const svgElement = this.findSVGElement(this.$refs[refName]);
      if (!svgElement) {
        console.error('SVG element not found');
        return null;
      }
      if (index === 1){
        svgElement.style.fill  = "darkgray";
      }
      else if(index===2) {
        svgElement.style.fill = "orange"

      }else {
        svgElement.style.fill ="red"
      }

      const svgString = new XMLSerializer().serializeToString(svgElement);
      const canvas = document.createElement('canvas');
      canvas.width = 64;
      canvas.height = 64;
      const ctx = canvas.getContext('2d');

      const img = new Image();
      img.src = 'data:image/svg+xml;base64,' + btoa(svgString);
      return new Promise((resolve) => {
        img.onload = () => {

          ctx.drawImage(img, 0, 0, 64, 64);
          resolve(canvas.toDataURL('image/png'));
        };
      });
    }

在Cesium中创建点实体并设置自定义样式

一旦我们有了图标的Data URL,可以将其用于Cesium实体的billboard属性。

 loadVideoLayers(indexes) {
      let that = this;
      try {
        let proArr=[];
        // 添加视频监测图层
        for (const index of indexes) {
          // console.log(index)
          // 2. WMS服务 江苏省视频监
          let pro = axios({
            url: '/api' + this.videoLayer[index],
            method: 'get',
          })
          proArr.push(pro)
        }
        Promise.all(proArr).then(function(resolve) {
          console.log("resolve--", resolve);
          resolve.map(async(item, index) => {
            //返回promise
            let ds = Cesium.GeoJsonDataSource.load(item.data)
            let layer = await that.viewer.dataSources.add(ds)
            that.videoLayers.push(layer);
            ds.then(datasource=>{
              datasource.entities.values.forEach(entity=>{
                let promiseRes = that.getIconAsDataURL(index)
                promiseRes.then(url=>{
                  entity.billboard = {
                    image: url,
                    width: 12,
                    height:12
                  }
                })
            })
            })
          })
        })

        //   //show属性控制图层是否可见
        //   // layer.show=false
        // })
      }catch (e){
        console.log(e)
      }
    },

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL优化系列-快速学会分析SQL执行效率(下)

1 show profile 分析慢查询 有时需要确定 SQL 到底慢在哪个环节&#xff0c;此时 explain 可能不好确定。在 MySQL 数据库中&#xff0c;通过 profile&#xff0c;能够更清楚地了解 SQL 执行过程的资源使用情况&#xff0c;能让我们知道到底慢在哪个环节。 知识扩展&#xff1…

Wireshark 如何查找包含特定数据的数据帧

1、查找包含特定 string 的数据帧 使用如下指令&#xff1a; 双引号中所要查找的字符串 frame contains "xxx" 查找字符串 “heartbeat” 示例&#xff1a; 2、查找包含特定16进制的数据帧 使用如下指令&#xff1a; TCP&#xff1a;在TCP流中查找 tcp contai…

汽车分销商文件流转优化:实现稳定高效的文件分发处理

在汽车圈里&#xff0c;分销商可是个不可或缺的角色。他们既要跟汽车厂家紧紧绑在一起&#xff0c;还得跟下游的销售渠道或者直接跟消费者打成一片&#xff0c;文件来回传递那是家常便饭。 这文件发放的速度快不快&#xff0c;安不安全&#xff0c;直接影响到分销商做事的效率…

容器(Docker)安装

centos安装Docker sudo yum remove docker* sudo yum install -y yum-utils#配置docker的yum地址 sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#安装指定版本 - 可以根据实际安装版本 sudo yum install -y docke…

Centos 报错 One of the configured repositories failed

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 使用yum update更新命令就出现下面问题&#xff0c;系统是刚安装的&#xff0c;然后修改了一下IP变成手动。&#xff08;排查问题前&#xff0c;先回顾自己做了哪些操作&#xff0c;方便进一步排错&a…

策略模式的理解和运用

在之前的小游戏项目中&#xff0c;处理websocket长连接请求的时候&#xff0c;需要根据传递数据包的不同类型&#xff0c;进行不同的处理。为了实现这个场景&#xff0c;比较简单的方法就是使用if-else或者switch-case语句&#xff0c;根据条件进行判断。但是这导致了项目代码复…

梦幻西游外网架设教程-端游篇

《梦幻西游》是一款由中国网易公司自行开发并营运的网络国产游戏。游戏以著名的章回小说《西游记》故事为背景&#xff0c;透过Q版的人物&#xff0c;试图营造出浪漫的网络游戏风格。 《梦幻西游》拥有注册用户超过3.1亿&#xff0c;一共开设收费服务器达472组&#xff0c;最高…

Sigmoid图像

import matplotlib.pyplot as plt import numpy as npdef sigmoid(x):# 直接返回sigmoid函数return 1. / (1. np.exp((0.7 -(x))/0.075))def plot_sigmoid():# param:起点&#xff0c;终点&#xff0c;间距x np.arange(0, 1, 1 / 16000)y sigmoid(x)plt.plot(x, y)plt.show…

【WP】猿人学_19_乌拉乌拉乌拉

https://match.yuanrenxue.cn/match/19 发包测试 经过发包测试&#xff0c;并没有携带加密参数&#xff0c;但是使用python无法复现&#xff0c;requests&#xff0c;httpx以及异步都不行&#xff0c;网上搜索了一下&#xff0c;这是使用了JA3指纹。可能是我做的时间比较晚&…

【iOS】UI学习——导航控制器、分栏控制器

UI学习&#xff08;三&#xff09; 导航控制器导航控制器基础导航控制器切换导航栏和工具栏 分栏控制器分栏控制器基础分栏控制器高级 导航控制器 导航控制器负责控制导航栏&#xff08;navigationBar&#xff09;&#xff0c;导航栏上的按钮叫UINavigationItem&#xff08;导航…

【论文阅读】SELF-RAG,让模型决策和反思检索

关于LLM何时使用RAG的问题&#xff0c;原本是阅读了关于ADAPT-LLM模型的那篇论文&#xff0c;被问到与SELF-RAG有何区别。所以&#xff0c;大概看了一下SELF-RAG这篇论文&#xff0c;确实很像&#xff0c;这些基于LLM针对下游任务的模型架构和方法&#xff0c;本来就很像。不过…

accelerate笔记:实验跟踪

Accelerate支持七种集成的跟踪器&#xff1a; TensorBoardWandBCometMLAimMLFlowClearMLDVCLive要使用这些跟踪器&#xff0c;可以通过在 Accelerator 类的 log_with 参数中传入所选类型来实现 from accelerate import Accelerator from accelerate.utils import LoggerTypeac…

Yolo-v5模型训练速度,与GeForce的AI算力描述

1.GeForce RTX3070 Ti官网参数&#xff1a; GeForce RTXTM 3070 Ti 和 RTX 3070 显卡采用第 2 代 NVIDIA RTX 架构 - NVIDIA Ampere 架构。该系列产品搭载专用的第 2 代 RT Core &#xff0c;第 3 代 Tensor Core、全新的 SM 多单元流处理器以及高速显存&#xff0c;助您在高性…

北斗RTK+UWB定位的优势

在当今科技飞速发展的时代&#xff0c;定位技术的应用已渗透到我们生活的方方面面。从导航、物流到无人驾驶、智能制造&#xff0c;精准定位技术无处不在。而北斗RTK&#xff08;Real-Time Kinematic&#xff0c;实时动态&#xff09;和UWB&#xff08;Ultra-Wideband&#xff…

闭眼推荐的,新手教师工具

亲爱的老师们&#xff0c;尤其是那些刚踏入教育界的新手教师们&#xff0c;还在为如何高效管理课堂、如何制作精美的教学材料而头疼吗&#xff1f;让我来分享几款教育界口碑爆棚的工具。 易查分小程序 易查分是一款超级方便的成绩查询工具&#xff0c;一分钟就能上传成绩并生成…

[经验] 腰果树的外观特征和特点是什么 #媒体#微信

腰果树的外观特征和特点是什么 腰果树是一种生长在热带和亚热带地区的落叶乔木&#xff0c;其叶子为互生&#xff0c;倒披针形或披针形&#xff0c;整个树枝条生长勃勃&#xff0c;长势喜人。 腰果树的树皮是灰色或深褐色的&#xff0c;有着纵向裂缝&#xff0c;树皮粗糙而有光…

【Mybatis】源码分析-高级应用

1、Mybatis配置文件深入理解 1.2、动态SQL语句 Mybatis 的映射⽂件中&#xff0c;前⾯我们的 SQL 都是⽐较简单的&#xff0c;有些时候业务逻辑复杂时&#xff0c;我们的 SQL是动态变化的&#xff0c;此时在前⾯的学习中我们的 SQL 就不能满⾜要求了。 1.2.1、条件判断 我们根…

OrangePi KunPengPro | linux系统下挂载U盘

OrangePi KunPengPro | linux系统下挂载U盘 时间&#xff1a;2024年6月6日21:32:53 文章目录 OrangePi KunPengPro | linux系统下挂载U盘1.参考2.操作fdisk -l 列出系统上所有磁盘的分区表信息将 /dev/sda1 分区挂载到 /mnt/udisk/ 目录显示文件系统的磁盘空间使用情况卸载文件…

【C++】问题及补充(2)

string s2“hello word”;是怎么进行隐式类型转换的 在这里&#xff0c;"hello world"是一个C字符串常量&#xff0c;而s2是一个std::string类型的变量。当你将C字符串常量赋值给一个std::string类型的变量时&#xff0c;会发生隐式类型转换。编译器会将C字符串常量转…

机器学习笔记 - 本地windows 11 + PyCharm运行stable diffusion流程简述

一、环境说明 硬件:本地电脑windows11、32.0 GB内存、2060的6G的卡。 软件:本地有一个python环境,主要是torch 2.2.2+cu118 二、准备工作 1、下载模型 https://huggingface.co/CompVishttps://huggingface.co/CompVis 进入上面的网址,我这里下载的是这个里面的 …