cesium学习记录07-实体(Entity)

在学习记录05中,我们将了如何在 Cesium 中加载各种数据,包括矢量数据、影像图层、地形和 3D 模型。这些数据为我们构建了一个基础的场景和背景。特别是在加载 3D 模型时,我们采用了 viewer.scene.primitives.add 方法将模型作为一个原始对象添加到了场景中。这与加载矢量数据和影像图层的方式有所不同,因为它直接与底层的渲染机制打交道。
在 Cesium 中,除了直接使用 Primitive 类来创建和渲染对象,还有一种更抽象和用户友好的方式来表示场景中的对象,那就是 Entity。而 Entity 与 Primitive 的关系可以这样理解:Entity 提供了一个更高级和更方便的接口来描述和管理场景中的对象,而在内部,Cesium 会根据需要自动创建和管理相应的 Primitive 对象以实现实体的渲染。这意味着,当你使用 Entity API 时,你不必深入了解所有的底层细节,但仍然可以获得高效和优雅的渲染结果。(Primitive之后再讲)

什么是 Entity

Entity对象可以表示各种地理实体,如点、线、面等,并具有位置、方向、模型、标牌等属性,通过设置这些属性可以实现各种类型的地理可视化,并且你能够为这些对象添加多种视觉表示,并且可以随时间更改这些表示。

Entity的创建、获取、删除与修改

创建一个实体:
var Position = Cesium.Cartesian3.fromDegrees(117.102442, 36.185321, 200);
    var descriptionContent ="点描述信息"
    // 添加一个新的点实体到viewer中
    var point = viewer.entities.add({
        //实体的id
        id:"测试点001",
        //实体位置
        position: Position,
        //实体形状及样式
        point: {
          pixelSize: 15,                // 像素大小
          color: Cesium.Color.RED.withAlpha(0.8), // 添加透明度
          outlineColor: Cesium.Color.WHITE, // 白色外框
          outlineWidth: 2, // 外框宽度
        },
        //实体描述(即InfoBox中信息)
        description: descriptionContent,
        //实体标签
        label: {
            text: '这是一个点',         // 设置标签内容
            showBackground: true,      // 设置标签背景可见
            scale: 0.6,                // 设置标签的缩放
            horizontalOrigin: Cesium.HorizontalOrigin.LEFT,  // 设置水平起点为左侧
            verticalOrigin: Cesium.VerticalOrigin.CENTER,    // 设置垂直起点为中心,使得标签与点平行
            pixelOffset: new Cesium.Cartesian2(0, 30),       // 将标签稍微移动到点的右侧
            heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND,     // 设置标签的高度参照
            position: Position      // 设置标签的位置
        }
    });

在这里插入图片描述

获取一个实体:

根据实体id获取

var entity = viewer.entities.getById("测试点001");

检查实体是否已经在viewer.entities集合中

if (viewer.entities.contains(entity)) {
    console.log("实体已存在");
} else {
    console.log("实体未创建");
}
删除实体:

删除一个实体

 var entityToRemove = viewer.entities.getById("测试点001");
    if (entityToRemove) {
        viewer.entities.remove(entityToRemove);
    }

删除所有实体

viewer.entities.removeAll();
修改实体属性
var entity = viewer.entities.getById("测试点001");
    if (entity) {
      entity.point.color=Cesium.Color.GREEN.withAlpha(0.8)
    } 
创建线
// 定义线段的两个端点
var start = Cesium.Cartesian3.fromDegrees(117.0, 36.0);
var end = Cesium.Cartesian3.fromDegrees(118.0, 37.0);
var line = viewer.entities.add({
    polyline: {
        positions: [start, end],
        width: 5,  // 线宽
        material: Cesium.Color.RED  // 线的颜色
    }
});
创建面
  var polygon = viewer.entities.add({
      name: 'Polygon',
      polygon: {
          hierarchy: Cesium.Cartesian3.fromDegreesArray([
              117.0, 36.0,
              118.0, 36.0,
              118.0, 37.0,
              117.0, 37.0
          ]),
          material: Cesium.Color.RED.withAlpha(0.5),  // 半透明的红色
          outline: true,
          outlineColor: Cesium.Color.BLACK
      }
  });
创建圆
 var circle = viewer.entities.add({
      position: Cesium.Cartesian3.fromDegrees(117.0, 36.0),
      ellipse: {
          semiMinorAxis: 300000.0,  // 300km 的半小轴
          semiMajorAxis: 300000.0,  // 300km 的半大轴(在这里,因为它是一个圆,所以半大轴和半小轴相同)
          material: Cesium.Color.BLUE.withAlpha(0.5)  // 半透明的蓝色
      }
  });

其他的一些形状和样式的使用这里就不再赘述了,以后整理到了再说。或者在我的在线demo上看一下,然后自己在我的SVN代码里翻找一下

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

chatGPT小白快速入门-002:一文看懂什么是chatGPT

一、前言 本文是《chatGPT小白快速入门培训课程》的第002篇文章:一文看懂什么是chatGPT,全部内容采用chatGPT和chatGPT开源平替软件生成。完整内容大纲详见:《chatGPT小白快速入门课程大纲》。 本系列文章,参与: AIGC…

【STM32】FreeRTOS消息队列和信号量学习

一、消息队列(queue) 队列是一种用于实现任务与任务之间,任务与中断之间消息交流的机制。 注意:1.数据的操作是FIFO模式。 2.队列需要明确数据的大小和队列的长度。 3.写和读都会出现堵塞。 实验:创建一个消息队列…

阿里云弹性裸金属服务器详细介绍(原神龙)

阿里云弹性裸金属服务器(ECS Bare Metal Server)是一种可弹性伸缩的高性能计算服务,原神龙服务器,计算性能与传统物理机无差别,具有安全物理隔离的特点,裸金属服务器分钟级的交付周期。阿里云服务器网分享阿…

python——案例18:判断该元素是否在列表中

案例18:判断该元素是否在列表中test_list[10,-8,25.6,88,0,4]print("查看88是否在列表里面:")for i in test_list:if(i88):print("存在") print("查看88是否在列表中:") if(88 in test_list):print("存在…

微服务服务拆分和远程调用

一、服务架构比较 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目&#x…

【Linux操作系统】深入理解系统调用中的read和write函数

在操作系统中,系统调用是用户程序与操作系统之间进行交互的重要方式。其中,read和write函数是常用的系统调用函数,用于在用户程序和操作系统之间进行数据的读取和写入。本文将深入介绍read和write函数的工作原理、用法以及示例代码&#xff0…

湘大 XTU OJ 1290 Alice and Bob 题解(非常详细):字符串 分类讨论 简单模拟

一、链接 1290 Alice and Bob 二、题目 题目描述 Alice和Bob玩剪刀-石头-布的游戏,请你写个程序判断一下比赛的结果。 输入 第一行是一个整数K,表示样例的个数。 以后每行两个单词,rock表示石头,paper表示布,scis…

Redis 拒绝服务漏洞(CVE-2023-28856)修复处理

一、漏洞描述 Redis Labs Redis是美国Redis Labs公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。 Redis 7.0.0 到 7.0.10版本、6.2.0 到 6.2.11版本、6.0.0 到 …

Git:在本地电脑上如何使用git?

git 版本: 2.40.1.windows.1 文章目录 一. 使用git之前你必须要理解的几个概念1.1 理解工作区、版本库、暂存区的概念1.2 提交Git版本库的步骤【分两步执行】 二. Git本地库实战2.1 初始化版本库2.2 新建 & 提交 & 状态2.3 查看日志2.4 回退 & 穿梭 &am…

树莓派RP2040 用Arduino IDE安装和编译

目录 1 Arduino IDE 1.1 IDE下载 1.2 安装 arduino mbed os rp2040 boards 2 编程-烧录固件 2.1 打开点灯示例程序 2.2 选择Raspberry Pi Pico开发板 2.3 编译程序 2.4 烧录程序 2.4.1 Raspberry Pi Pico开发板首次烧录提示失败 2.4.2 解决首次下载失败问题 2.4.2.1…

FFmpeg 使用总结

FFmpeg 简介 FFmpeg的名称来自MPEG视频编码标准,前面的“FF”代表“Fast Forward”,FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。可以轻易地实现多种视频格式之间的相互转换。包括如下几个部分&#xf…

C语言一些有趣的冷门知识

文章目录 概要1.访问数组元素的方法运行结果 2.中括号的特殊用法运行结果 3.大括号的特殊用法运行结果 4.sizeof的用法运行结果 5.渐进运算符运行结果 小结 概要 本文章只是介绍一些有趣的C语言知识,纯属娱乐。这里所有的演示代码我是使用的编译器是Visual Studio …

jenkins流水线

1.拉取代码 https://gitee.com/Wjc_project/yygh-parent.git2、项目编译 mvn clean package -Dmaven.test.skiptrue ls hospital-manage/target3、构建镜像 ls hospital-manage/target docker build -t hospital-manage:latest -f hospital-manage/Dockerfile ./hospital-ma…

SRS视频媒体服务器-docker启动:更换默认端口时的错误

一、概述 在使用srs视频服务器时,一直都是使用默认的端口配置。但是,这些默认端口在某些时候可能已经被占用了,就需要更改端口了。 注意注意注意:使用docker启动srs,在更换端口一定要下面的内容。 二、使用docker启动…

MFC第三十天 通过CToolBar类开发文字工具栏和工具箱、GDI+边框填充以及基本图形的绘制方法、图形绘制过程的反色线模型和实色模型

文章目录 CControlBar通过CToolBar类开发文字工具栏和工具箱CMainFrame.hCAppCMainFrm.cppCMainView.hCMainView.cppCEllipse.hCEllipse.cppCLine.hCLine.cppCRRect .hCRRect .cpp CControlBar class AFX_NOVTABLE CControlBar : public CWnd{DECLARE_DYNAMIC(CControlBar)pro…

Jmeter请求接口返回值乱码解决

乱码示例 解决步骤: 1.打开Jmeter安装目录下的bin目录,找到jmeter.properties 2.使用记事本或其他编译工具打开jmeter.properties文件,然后全局搜索sampleresult.default.encoding 3.在文件中添加sampleresult.default.encodingutf-8,保存…

LeetCode--HOT100题(28)

目录 题目描述:2. 两数相加(中等)题目接口解题思路代码 PS: 题目描述:2. 两数相加(中等) 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且…

c语言每日一练(6)

前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情…

42. range函数—生成器函数-更新

【目录】 文章目录 1. range( )函数是什么?2. 知识回顾-列表的切片3. range( )函数的语法3.1 range( )函数语法3.2 参数说明3.3 列表切片和range函数的区别 4. 实操练习4.1 参数为一个正整数4.2 参数为04.3 参数为一个负整数4.4 有2个参数4.5 有3个参数4.6 步长为负…

vscode extension 怎么区分dev prod

开发模式注入环境变量 使用vsode 提供的api