Cesium中的DataSource和Entity关系

news/2024/5/19 20:07:32/文章来源:https://blog.csdn.net/u011575168/article/details/128073576

本章主要探讨一下Cesium中的DataSource和Entity。

介绍

首先简单说一下Entity与Primitive。

Cesium为开发者提供了丰富的图形绘制和空间数据管理的API,可以分为两类,一类是面向图形开发人员的低层次API,通常被称为Primitive API,另一类是用于驱动数据可视化的高层次API,称为Entity API。

总的来说,Primitive偏底层,图形绘制和数据加载效率较高,但开发难度更大,而Entity基于Primitive做了进一步封装,调用便捷。

对于绝大多数开发者来说,我们添加各种对象(点、模型、线等)都是使用Entity方式的,通过DataSource加载后其内部也是Entity对象方式的。而Entity最终转换为 Primitive对象来显示的。

  • 添加entity
var viewer = new Cesium.Viewer('cesiumContainer');var citizensBankPark = viewer.entities.add({name : 'Citizens Bank Park',position : Cesium.Cartesian3.fromDegrees(-75.166493, 39.9060534),point : {pixelSize : 5,color : Cesium.Color.RED,outlineColor : Cesium.Color.WHITE,outlineWidth : 2},label : {text : 'Citizens Bank Park',font : '14pt monospace',style: Cesium.LabelStyle.FILL_AND_OUTLINE,outlineWidth : 2,verticalOrigin : Cesium.VerticalOrigin.BOTTOM,pixelOffset : new Cesium.Cartesian2(0, -9)}
});
  • 添加Primitive
// 1. Draw a translucent ellipse on the surface with a checkerboard pattern
const instance = new Cesium.GeometryInstance({geometry : new Cesium.EllipseGeometry({center : Cesium.Cartesian3.fromDegrees(-100.0, 20.0),semiMinorAxis : 500000.0,semiMajorAxis : 1000000.0,rotation : Cesium.Math.PI_OVER_FOUR,vertexFormat : Cesium.VertexFormat.POSITION_AND_ST}),id : 'object returned when this instance is picked and to get/set per-instance attributes'
});
scene.primitives.add(new Cesium.Primitive({geometryInstances : instance,appearance : new Cesium.EllipsoidSurfaceAppearance({material : Cesium.Material.fromType('Checkerboard')})
}));
  • 添加DataSource
const viewer = new Cesium.Viewer('cesiumContainer');
// 添加 GeoJson类型的数据
viewer.dataSources.add(Cesium.GeoJsonDataSource.load('../../SampleData/ne_10m_us_states.topojson', {stroke: Cesium.Color.HOTPINK,fill: Cesium.Color.PINK,strokeWidth: 3,markerSymbol: '?'
}));//	添加czml类型的数据
viewer.dataSources.add(Cesium.CzmlDataSource.load("../SampleData/simple.czml"));

从以上例子中,我们可以看出:

  1. 添加一个新的Primitive对象是存放在scene中的primitives集合(PrimitiveCollection类)里的;
  2. 添加一个新的Entity对象是存放在viewer里的enitites集合(EntityCollection类)里的;
  3. 添加一个新的DataSource是存放在viewer里的dataSources集合(DataSourceCollection类)里的

DataSource与Entity

DataSource有多种类型文件形式,如czml,GeoJson等,不同的文件类型只是为了不同方式的输入数据结构而已,本质上内部还是转换为Entity对象保存。

我们来看看Viewer里的entites和dataSources属性定义,源代码文件位于:“Source\Widgets\Viewer\Viewer.js”,此处仅列出了关节的代码片段,并添加了部分注释。


//	从构造函数里获取dataSources,如果没有就新建DataSourceCollection对象
var dataSourceCollection = options.dataSources;
var destroyDataSourceCollection = false;
if (!defined(dataSourceCollection)) {dataSourceCollection = new DataSourceCollection();destroyDataSourceCollection = true;
}// 新建dataSourceDisplay对象(DataSourceDisplay),并把前面的dataSourceCollection对象作为参数赋值
//	DataSourceDisplay类型里的属性:dataSources实际上就是传进来的dataSourceCollection,
//	也就是说viewer.dataSource和dataSourceDisplay里的dataSource是同一个对象var dataSourceDisplay = new DataSourceDisplay({scene: scene,dataSourceCollection: dataSourceCollection,});this._dataSourceCollection = dataSourceCollection;
this._dataSourceDisplay = dataSourceDisplay;Object.defineProperties(Viewer.prototype, {//.../*** Gets the collection of entities not tied to a particular data source.* This is a shortcut to [dataSourceDisplay.defaultDataSource.entities]{@link Viewer#dataSourceDisplay}.* @memberof Viewer.prototype* @type {EntityCollection}* @readonly*/entities: {get: function () {return this._dataSourceDisplay.defaultDataSource.entities;},},/*** Gets the set of {@link DataSource} instances to be visualized.* @memberof Viewer.prototype* @type {DataSourceCollection}* @readonly*/dataSources: {get: function () {return this._dataSourceCollection;},},/*** Gets the display used for {@link DataSource} visualization.* @memberof Viewer.prototype* @type {DataSourceDisplay}* @readonly*/dataSourceDisplay: {get: function () {return this._dataSourceDisplay;},},//...

从代码中可以看出,viewer.dataSources与其viewer.dataSourceDisplay.dataSources是同一个对象;
而viewer.entities是viewer._dataSourceDisplay.defaultDataSource.entities属性。

就是说,viewer里的enities和dataSources实际上都是viewer里的dataSourceDisplay里属性。而每个dataSource里都有enties属性。

  • 我们手动通过viewer.entites.add方法添加的所有entity对象都放在viewer.dataSourceDisplay里的defaultDataSource.enities里;
  • 而通过viewer.dataSources.add方法添加方式首先将整个单个dataSource保存在dataSources集合里,而每个dataSource里的所有entity集合都存放在各自的dataSource.entites对象中;

下面是对应的数据结构图
Viewer与DataSource的数据结构

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

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

相关文章

连续时间系统的时域分析

一.微分方程的求解 1.求微分方程的齐次解 (1)写出特征方程并求解 2.写出齐次解 2.求微分方程的特解 已知 (1)根据表2-2,写出特解函数 ​​​​​​​ (2)带入并求解 3.完全解 二.微分方…

小杨哥陷入打假风波,会变成下一个辛巴吗?

最近,网红疯狂小杨哥频繁登上热搜。最初的起因是他花了1亿元在合肥一家高科技公司购买了5万多平方米的房产,作为他名下公司的全球总部,由此带来了争议。 据了解,该物业总建筑面积为53874.33平方米,包括1个生产综合体、…

使用扩展有效对齐 SwiftUI 内容,创建自定义 SwiftUI 方法以快速对齐项目并使您的代码看起来简洁明了(教程含源码)

在开发 iOS 应用程序时,对齐内容可能是一个耗时的过程。如果应用程序有多个屏幕,则需要在不同的地方完成这件事,并可能导致看起来杂乱无章的视图。 作为一个始终致力于让我的代码看起来简单和流线型的人,实现目标所需的大量Spacer()元素常常让我恼火,这就是为什么当我发…

APS软件的技术指标与特色

企业可能经常会因为无法掌握生产制造现场的实际产能状况及物料进货状况,导致物料及产能规划与现场详细作业排程难度增大,从而采取有单就接的接单政策与粗估产能的生产排程方式。这种方式就可能导致企业的生产状况频发:在提高对顾客的服务水平…

【树莓派不吃灰】Linux篇⑨ 学习 磁碟配额(Quota)与进阶文件系统管理(核心概念)

目录1. 磁碟配额 (Quota) 的应用与实作2.软件磁盘阵列 (Software RAID)3. 逻辑卷轴管理员 (Logical Volume Manager)4. 重点回顾❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2022-11-28 ❤️❤️ 本篇更新记录 2022-11-28 ❤️&…

如何采集需要验证码登录的网站数据

如何抓取网页上的数据,需要登录?随着互联网的发展,移动支付技术的普及,以及人们对内容进行消费的观念逐渐养成。有很多网站,需要付费后才能查看,或者是开通会员之类的才能查看。针对这类网站,我们如何快速的…

Scrapy基本概念——Scrapy shell

Scrapy shell是一个交互式shell,可以在不运行Spider的情况下,测试和调试自己的数据提取代码。事实上,Scrapy shell可以测试任何类型的代码,因为它本就是一个常规的Python shell。 一、Scrapy shell的使用 1、启动Scrapy shell …

动态规划算法(1)

认识动态规划 动态规划的求解思路: 1. 把一个问题分解成若干个子问题 2. 将中间结果保存以避免重复计算 基本步骤: 1. 找出最优解的性质,然后刻画结构特征 (找规律) 2. 最优解(最好的解决方案 定义) 循环(递归) 3. 以…

QFileInfo(文件信息)和临时文件

QFileInfo提供有关文件在文件系统中的名称和位置(路径),其访问权限以及它是目录还是符号链接等的信息。文件的大小和上次修改/读取时间也可用。QFileInfo还可用于获取有关Qt资源的信息 QFileInfo可以指向具有相对或绝对文件路径的文件。绝对…

java刷题day 06

一. 单选题: 解析:最终类也叫密封类,是被final修饰的类,不能被继承 解析: A:6入,5 入,5出,4入,4出,3入,3出,6出&#xff0…

教培行业迎来重大变局,三大方向或成新机遇

“双减”政策落地,教培行业迎来重大变局。校内教育深化改革正在路上,而学科类机构或将踏上转型之路,结合政策和市场来看,素质教育类、职业教育类、教育数字化3大方向或成新机遇。 “双减”的总体思路是什么呢? 教育部有…

阿里P8架构师进阶心得:分布式数据库架构MyCat学习笔记送给你

前言: MyCat 是一个数据库分库分表中间件,使用 MyCat 可以非常方便地实现数据库的分库分表查询,并且减少项目中的业务代码。今天我们将通过数据库架构发展的演变来介绍 MyCat 的诞生背景,以及 MyCat 在其中扮演的角色&#xff0c…

Dubbo3.0新特性

服务注册模型 注册模型从接口级别服务注册改为 应用级别服务之策 应用级服务发现简介 概括来说,Dubbo3 引入的应用级服务发现主要有以下优势 适配云原生微服务变革。云原生时代的基础设施能力不断向上释放,像 Kubernetes 等平台都集成了微服务概念抽…

yolov5训练coco数据集

文章目录参考链接一、coco数据集1. 简介2. 下载3.解压后的数据4. COCO数据集(.json)训练格式转换成YOLO格式(.txt)参考链接 为YOLOv5搭建COCO数据集训练、验证和测试环境 CoCo数据集下载 一、coco数据集 1. 简介 MS COCO的全称是Microsoft Common Objects in Context&#…

JMeter 扩展开发:扩展 TCP 取样器

前言 对基于 TCP/IP 协议的套接字应用进行性能测试是非常常见的测试场景。JMeter 提供的“TCP 取样器”大部分情况下可以满足测试的需求,但是也有它的局限性。如果希望实现更灵活的 TCP 套接字测试方式,可以通过对 JMeter 内置的 TCP 取样器进行扩展开发…

java word,excel,ppt转pdf

准备工作 1.下载 jacob.jar 链接:https://pan.baidu.com/s/1TWIGyX9A3xQ6AG9Y3mVlVg 提取码:abcd 2.下载安装wpsWPS Office-支持多人在线编辑多种文档格式_WPS官方网站 3.添加 jar到项目和ddl文件放在jdk的jre/bin目录下,记得自己系统是…

高校房产管理现状及数图互通解决方案?

高校拥有大量的房产土地资源、公共设施、公有住房等,是高校开展各类教学、科研的基础场所,也是学校国有资产不可缺少的一部分。但是在管理过程中,存在着较多的困难与问题: 1.房地产的有效利用率不高 2.房地产管理信息化速度较慢…

react异常 Each child in a list should have a unique “key” prop

react异常警告&#xff1a;Each child in a list should have a unique “key” prop 原因&#xff1a;Dom在渲染数组时&#xff0c;需要一个key&#xff0c;不然嵌套数组时会引起歧义 return(<div key{index}><Text delete{!record.enable}>{item.customFieldNam…

小啊呜产品读书笔记001:《邱岳的产品手记-13》第24讲 产品案例分析:PathSource的混乱与直观 25讲 产品世界的暗黑模式:操纵的诱惑

小啊呜产品读书笔记001&#xff1a;《邱岳的产品手记-13》第24讲 产品案例分析&#xff1a;PathSource的混乱与直观 & 第25讲 产品世界的暗黑模式&#xff1a;操纵的诱惑一、今日阅读计划二、泛读&知识摘录1、第24讲 产品案例分析&#xff1a;PathSource的混乱与直观2、…

多重共线性如何分析?

判断标准 常见的直观判断方法共有四个&#xff0c;如下&#xff1a; &#xff08;1&#xff09;某些自变量的相关系数值较大&#xff08;比如大于0.8&#xff09;等&#xff0c;可以利用pearson相关系数检验法一般是利用解释变量之间的线性相关程度判断&#xff0c;一般标准是…