Cesium入门之十一:认识Cesium中的Entity

news2024/12/29 11:04:10

目录

  • Entity类简介
  • Entity在Cesium中的作用
  • Entity的常用属性
  • 使用Entity创建点、线、面
    • 常用的Entity图形对象及其属性
    • 创建点、线、面的方法
      • 创建点
      • 创建线
      • 创建面
      • 将点、线、面添加到viewer中
  • 修改Entity的外观和样式
    • 点(Point)的外观样式
    • 线(Polyline)的外观样式
    • 面(Polygon)的外观样式

Entity类简介

Entity类是Cesium中描述和呈现地球上实体对象的核心类。它具有丰富的属性和方法,用于控制和定制地理实体的外观和行为。Entity对象可以表示各种地理实体,如点、线、面等,并具有位置、方向、模型、标牌、折线、多边形等属性,通过设置这些属性可以实现各种类型的地理可视化。此外,Entity类还提供了其他一些常用的方法和属性,如描述信息、可见性和自定义属性等。通过使用Entity类,可以在Cesium中创建并定制地球上的实体对象,以实现复杂的地理可视化和交互效果。

Entity在Cesium中的作用

Entity是Cesium中非常重要的类,它为我们提供了一种灵活、强大的方式来描述、呈现和操控地球上的实体对象。通过Entity,我们可以利用Cesium强大的功能和多样化的图形对象,创建出下面这些丰富、生动的地理可视化场景。

  1. 地理信息表达:Entity允许我们以更直观和语义化的方式来表达地理信息。通过设置Entity的位置、方向、形状、样式等属性,我们可以创建点、线、面等各种类型的地理实体,并将它们与具体的坐标和视觉效果联系起来。

  2. 可视化呈现:使用Entity,我们可以在地球上以图形、模型、标牌等多种形式呈现地理实体,从而实现地理可视化。Entity提供了丰富的图形对象,如点(Point)、线(Polyline)、面(Polygon)、模型(Model)等,它们允许我们灵活地控制实体的外观和样式。

  3. 动态更新:Entity支持实时动态更新,可以通过设置位置、方向等属性的回调函数来实现地理实体的实时更新。这样,我们可以根据实时数据或交互操作来改变实体的状态,从而实现实时演示、动画效果等。

  4. 交互与事件处理:Entity允许我们为地理实体设置事件处理函数,例如鼠标点击、悬停等事件。通过监听这些事件,我们可以实现与实体的交互,例如弹出信息窗体、高亮选中的实体、执行相关操作等。

  5. 扩展与自定义:通过继承Entity类,我们可以扩展和自定义实体的功能。可以通过添加新的属性、方法和事件处理函数,来满足特定需求或实现定制化的地理实体。

Entity的常用属性

  1. id:用于唯一标识Entity的字符串。可以根据需要设置自定义的ID,方便后续对Entity进行查找和操作。

  2. name:用于描述Entity的名称,通常作为标签或标识符展示在地图或场景中。

  3. position:描述Entity的位置。可以是一个Cartesian3对象,表示地理坐标的三维位置,或是一个回调函数,动态更新位置。

  4. orientation:描述Entity的方向。可以是一个Quaternion对象,表示Entity的旋转方向,或是一个回调函数,动态更新方向。

  5. model:描述Entity的3D模型。可以使用ModelGraphics对象设置模型的URI、缩放比例、颜色等属性。

  6. billboard:描述Entity的标牌。可以使用BillboardGraphics对象设置标牌的图片、大小、颜色等属性。

  7. polyline:描述Entity的折线。可以使用PolylineGraphics对象设置折线的位置、颜色、宽度等属性。

  8. polygon:描述Entity的多边形。可以使用PolygonGraphics对象设置多边形的位置、颜色、透明度等属性。

  9. description:描述Entity的详细信息。可以是纯文本或使用HTML格式的富文本。通常用于显示实体的描述、属性或其他相关信息。

  10. show:控制Entity的可见性。可以设置为true或false来显示或隐藏Entity。

使用Entity创建点、线、面

在Cesium中,Entity对象是一个可视化图形对象,可以用于在地球上显示各种类型的实体,如点、线、面等。它具有各种属性,可用于定义实体的位置、形状、样式等。常用的Entity图形对象和其属性如下:

常用的Entity图形对象及其属性

  1. 点(Point):

    • position:实体的位置。可以使用Cesium.Cartesian3.fromDegrees或其他方法来指定地理位置。
    • point:用于定义点的样式,包括pixelSize(像素大小),color(颜色)等属性。
  2. 线(Polyline):

    • polyline:用于定义线的形状和样式。包括positions(点的位置数组),width(宽度),material(材质)等属性。
  3. 面(Polygon):

    • polygon:用于定义面的形状和样式。包括hierarchy(点的位置数组),extrudedHeight(拉伸高度),material(材质)等属性。
  4. 模型(Model):

    • model:用于定义模型的URL,即加载的模型文件路径。
    • position:模型的位置。
    • orientation:模型的方向。
    • scale:模型的比例。
    • minimumPixelSize:模型的最小显示大小。
  5. 标签(Label):

    • label:用于定义标签的属性,包括text(文本内容),font(字体),pixelOffset(偏移量)等。

创建点、线、面的方法

创建点

通过在Entity中配置point属性来创建点,代码如下:

// 创建一个点
const pointEntity = new Cesium.Entity({
  position:Cesium.Cartesian3.fromDegrees( -74.01881302800248,40.69114333714821),
  point:{
    pixelSize:10,
    color:Cesium.Color.RED
  }
})

创建线

通过在Entity中配置polyline属性来创建线,代码如下:

// 创建一个线实体
const lineEntity = new Cesium.Entity({
  polyline: {
    positions: Cesium.Cartesian3.fromDegreesArray([
      -75.61777, 40.03883,
      -80.42087, 25.79065
    ]),
    width: 5,
    material: Cesium.Color.BLUE
  }
})

创建面

通过在Entity中配置polygon属性来创建面,代码如下:

// 创建一个面实体
const polygonEntity = new Cesium.Entity({
  polygon: {
    hierarchy: Cesium.Cartesian3.fromDegreesArray([
      -72.0, 40.0,
      -70.0, 35.0,
      -75.0, 30.0
    ]),
    extrudedHeight: 0,
    material: Cesium.Color.GREEN.withAlpha(0.5)
  }
})

将点、线、面添加到viewer中

要将点、线、面添加到viewer中,我们只需要调用viewer.entities.add()方法就可以了,
将上面创建的点、线、面添加到viewer中的代码如下:

const addEntity = () => {
  viewer.entities.add(pointEntity)
  viewer.entities.add(lineEntity)
  viewer.entities.add(polygonEntity)
}

上述代码完成后,运行程序,刷新浏览器, 看下效果
在这里插入图片描述

修改Entity的外观和样式

要控制Entity对象的外观和样式,可以使用Entity对象的属性来定义其外观特征

点(Point)的外观样式

  • pixelSize:设置点的大小(以像素为单位)。
  • color:设置点的颜色。
  • outlineColor:设置点的边界颜色。
  • outlineWidth:设置点的边界宽度。
    给上面的点的实体添加外观样式,代码如下
// 创建一个点
const pointEntity = new Cesium.Entity({
  position:Cesium.Cartesian3.fromDegrees( -74.01881302800248,40.69114333714821),
  point:{
    pixelSize:10,
    color:Cesium.Color.RED,
    outlineColor: Cesium.Color.BLACK,
    outlineWidth: 1
  }
})

线(Polyline)的外观样式

  • width:设置线的宽度。
  • material:设置线的材质,可以使用Cesium.Material提供的材质类型,如Cesium.ColorMaterialPropertyCesium.ImageMaterialProperty等。
    给上面的线的实体添加外观样式,代码如下
// 创建一个线实体
const lineEntity = new Cesium.Entity({
  polyline: {
    positions: Cesium.Cartesian3.fromDegreesArray([
      -75.61777, 40.03883,
      -80.42087, 25.79065
    ]),
    width: 5,
    material: new Cesium.PolylineOutlineMaterialProperty({
      color: Cesium.Color.GREEN,
      outlineWidth: 1,
      outlineColor: Cesium.Color.BLACK
    })
  }
})

面(Polygon)的外观样式

  • material:设置面的材质,可以使用Cesium.Material提供的材质类型,如Cesium.ColorMaterialPropertyCesium.ImageMaterialProperty等。
    给上面的面的实体添加外观样式,代码如下
// 创建一个面实体
const polygonEntity = new Cesium.Entity({
  polygon: {
    hierarchy: Cesium.Cartesian3.fromDegreesArray([
      -72.0, 40.0,
      -70.0, 35.0,
      -75.0, 30.0
    ]),
    extrudedHeight: 0,
    material: Cesium.Color.GREEN.withAlpha(0.5)
  }
})

Cesium中的Entity类提供了在地球空间上创建、控制和可视化对象的强大功能。通过使用Entity类,我们可以创建各种点、线、面和图标等实体对象,并对其进行交互、更新和管理。

这里只是介绍了Entity类的简单应用,更多功能小伙伴们可以自行探索,今天就到这里,有问题的小伙伴评论区留言,喜欢的小伙伴点赞关注加收藏哦!

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

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

相关文章

蓝奥声核心技术——无线协同代理技术

1.技术背景 无线协同代理技术指基于对目标场景状态变化的协同感知而获得触发响应并进行智能决策,属于蓝奥声核心技术--边缘协同感知(EICS)技术的关键支撑性技术之一。该项技术涉及物联网边缘域的无线通信技术领域,具体主要涉及网络服务节点与…

mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入

文章目录 背景说明 背景说明 我这里主要针对2处地方要进行增量执行sql: 1.新功能需要创建一张新表结构indicator_alarm_threshold2.给菜单表和另一个表新增数据 我们现在使用的是项目启动先初始化加载init-table.sql的脚本(这里面的轻易不动了,保持原…

浏览器测试的三大挑战及解决方案

目录 跨浏览器测试,为什么重要 跨浏览器测试挑战及其解决方案 自动化挑战大 解决方案:正确选择工具 设施维护负担大 解决方案:选择可靠的云服务 浏览器适配列表太多 解决方案:选择多版本支持的平台 总结: 随着…

关于Nuxt3.6兼容低版本游览器的实战以及可能存在的问题

当我们网站打包上线后,有些问题我们肯定也要考虑在内,兼容性也是其中一个重要的一种,可能会有人说,都2023年了,还在乎那些废弃的游览器干啥,我只能说,错!大错特错! 我们不…

docker方式安装gitlab

一:docker 方式安装gitlab 用docker来安装比较方便简单,包括版本升级也会变得更简单。 1、拉取gitlab镜像 gitlab-ce表示的是社区免费版本 docker pull gitlab/gitlab-ce:latest2、创建映射文件 mkdir -p /data/docker/gitlab/etc mkdir -p /data/do…

虚拟现实(VR)在医疗保健中的5种应用

医疗保健中的VR虚拟现实 虚拟现实的由来已久,18世纪,法国的医生使用布制的分娩模拟器向助产师和外科医生教授医学技术。在20世纪60年代初,医生一边对心肺复苏学员口述心肺复苏的技巧,一边使用一家塑料玩具厂家制造的塑料娃娃现场…

前端开发工程师的自我修养:前端开发工程师必须掌握的 Promise(详解)以及在 Vue3 项目中的实战应用

文章目录 📋前言🎯关于 promise(用于使用 JavaScript 编写的 Windows 应用商店应用)的内容分享🧩promise 究竟是什么?承诺关系 🎯JavaScript Promise🧩认识了解 Promise &#x1f3a…

RK3568平台开发系列讲解(外设篇)HX711调试

🚀返回专栏总目录 文章目录 一、HX711 工作原理二、硬件连接三、驱动四、修改设备树五、测试沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将讲解 HX711 模块调试。 一、HX711 工作原理 该部分由应变片与 HX711 模数转换器组成。应变片上的压力变化引起应…

线程基础、线程之间的共享和协作(初篇)

什么是进程和线程? 进程是操作系统进行资源分配的最小单位。资源包括cpu,内存空间,磁盘io等。同一进程里的多个线程共享该进程的全部系统资源。而进程与进程之间是相互独立的。 线程是cpu调度的最小单位,必须依托于进程而存在。…

高斯金字塔的秘密,尺度空间证明的思考

在构建图像尺度空间的过程中,唯一使用的核函数是高斯核,这一点被T Lindeber在文献《Scale-space theory: a basic tool for analyzing structures at different scales》中证明,高斯核是唯一可以产生多尺度空间的核。 相信大家在使用高斯金字…

Linux多线程与fork()函数

4.1多线程中使用进程复制 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<pthread.h> void* fun(void* arg) {for(int i0;i<5;i){printf("fun run pid%d\n",getpid());sleep(1);} } int m…

基于人工智能与边缘计算Aidlux的鸟类检测驱赶系统(可修改为coco 80类目标检测)

●项目名称 基于人工智能与边缘计算Aidlux的鸟类检测驱赶系统&#xff08;可修改为coco 80类目标检测&#xff09; ●项目简介 本项目在Aidlux上部署鸟类检测驱赶系统&#xff0c;通过视觉技术检测到有鸟类时&#xff0c;会进行提示。并可在源码上修改coco 80类目标检测索引直…

554、Vue 3 学习笔记 -【常用Composition API(二)】 2023.06.30

目录 一、常用Composition API1. 拉开序幕的setup2. ref函数3. reactive函数4. Vue3.0中的响应式原理5. reactive对比ref 二、参考链接 一、常用Composition API 1. 拉开序幕的setup &#xff08;1&#xff09;Vue3.0中一个新的配置项&#xff0c;值为一个函数。 &#xff08…

逍遥自在学C语言 | 常见的预定义宏

前言 在C语言中&#xff0c;预定义宏是由编译器提供的一组特殊标识符&#xff0c;可以在程序中直接使用&#xff0c;无需进行额外的定义。 预定义宏可以提供有关源文件、行号、日期、时间和函数名等信息&#xff0c;对于调试和日志记录非常有用。 一、人物简介 第一位闪亮登…

解决Windows联想笔记本打不开文件,鼠标一直转圈圈的问题

在左下角搜索处输入cmd 然后输入以下命令&#xff1a; DISM.exe /Online /Cleanup-image /Scanhealth 回车 等它运行完 再输入&#xff1a; DISM.exe /Online /Cleanup-image /Restorehealth 回车 等它运行完 再输入&#xff1a; sfc /scannow 等它运行完&#xff0…

Python3,如何实现CPU的并行计算,那还不简单,5种方式,这篇就搞定。

多进程实现CPU并行计算 1、引言2、实战2.1 多进程模式2.1.1 定义2.1.2 multiprocessing2.1.3 模式2.1.4 适用场景2.1.4 代码示例 2.2 执行方法2.2.1 多线程并发执行2.2.2 进程池2.2.3 消息队列2.2.4 内存共享2.2.5 异步IO 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;…

神奇的甲方:恰恰是拔高我们最好的机遇!

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

LeetCode 打卡day52--动态规划之子序列问题

一个人的朝圣 — LeetCode打卡第52天 知识总结 Leetcode 300. 最长递增子序列题目说明代码说明 Leetcode 674. 最长连续递增序列题目说明代码说明 Leetcode 718. 最长重复子数组题目说明代码说明 知识总结 今天运用动态规划来解决子序列问题. 子序列 是由数组派生而来的序列&a…

Debezium系列之:深入理解tinyint(n)

Debezium系列之:深入理解tinyint 一、背景二、相关技术博客三、查看表的ddl四、深入理解tinyint(n)五、创建表六、插入数据七、查看topic数据八、总结一、背景 数据库修改了字段类型为tinyint,希望采集的时候能够转化为boolean类型,数据库字段类型如下图所示: 在设置了conv…

机器学习笔记 - Facebook AI Similarity Search(Faiss)简介

一、概述 Facebook AI Similarity Search (Faiss)是高效相似性搜索最受欢迎的轮子之一。给定一组向量,我们可以使用 Faiss 对它们进行索引——然后使用另一个向量(查询向量),我们在索引中搜索最相似的向量。 它包含搜索任何大小的向量集的算法,除非超出RAM的大小。它还包…