Cesium中的DataSource和Entity关系

news2024/11/25 6:42:06

本章主要探讨一下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.coloradmin.cn/o/43009.html

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

相关文章

Java基础知识点整理

一、Java概述 1、何为编程 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。 为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机&#xff…

助力工业物联网,工业大数据项目介绍及环境构建【一】

文章目录工业大数据项目介绍及环境构建01:专栏目标02:项目背景03:项目需求04:业务流程05:技术选型06:Docker的介绍07:Docker的网络08:Docker的使用09:Oracle的介绍10&…

关于SQL的返回行数top

第一节.知识点三:关键字wlth tles 我要讲的是关于SQL的3个限制返回行数top: 1.使用具有恒定值的top; 2.关键字percent(%)返回行的百分比; 3.理解关键字wlth tles 上一次已经讲了前两个了,现在我要讲的是第三个 3.理解关键字wlth t…

【计算机毕业设计】69.助残志愿者系统源码

一、系统截图(需要演示视频可以私聊) 摘 要 本课题要求实现一套助残助残志愿者系统设计与开发,系统主要包括系统用户信息、志愿者信息、服务项目、志愿项目,志愿者培训、志愿项目、公益活动等功能模块。 基于上述分析&#xff0…

助力教育信创快速发展,统信软件与山东四所高校建立信创应用重点实验室

国家在“十三五”、“十四五”规划中重点强调了信息安全在国家战略中的重要地位,而大力发展教育信创有助于我国信息安全的快速落地。同时,教育部等六部门印发《关于推进教育新型基础设施建设构建高质量教育支撑体系的指导意见》也提到:推广可…

E+H浊度仪维修CUE22-A1A浊度分析仪维修概述

CUE21/22浊度仪参数如下: 测量参数:浊度 测量原理:散射光原理 应用场合:饮用水;生产用水 处理后的过程水 测量范围:0…100NTU;0…1000NTU 信号输出:4 ... 20 mA 通讯协议&…

多线程同步,信号,生产者消费者模型

目录1.线程互斥它是对的吗?合理吗?(任何场景)2.怎么解决饥饿问题?3.条件编译1.生产者和消费者模型2.编写代码实现一个基于堵塞队列的生产者消费者模型4.POSIX信号量5.环形队列1.线程互斥它是对的吗?合理吗?(任何场景) …

【JavaSE】多态

目录 1、多态 1.1、多态的概念 1.2、多态的实现条件 1.3、向上转型和向下转型 1.3.1、向上转型 1.3.2、向下转型 1.3.3、instanceof关键字 2、重写 2.1、重写的使用 2.2、动态绑定和静态绑定 2.2.1、动态绑定 2.2.2、静态绑定 2.3、再谈重写 3、多态的优缺点 4、…

LabVIEW浮点型和双精度数据类型之间的精度差异是什么 为什么 在LabVIEW 中, 浮点 数 会 失去 精度?

LabVIEW浮点型和双精度数据类型之间的精度差异是什么 为什么 在LabVIEW 中, 浮点 数 会 失去 精度? 程序中使用浮点数据类型或双精度数据类型。这些数据类型之间有什么区别? 浮点型的变量只有 7 位精度,而双精度类型的变量有 15…

算法竞赛入门【码蹄集进阶塔335题】(MT2296-2300)

算法竞赛入门【码蹄集进阶塔335题】(MT2296-2300) 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2296-2300)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件?目录1. MT2296 找朋友2. MT2297 盒子与球3. MT2298 点餐4. MT…

第二章Java概述

第二章Java概述 2.1 Java技术体系平台 Java SE:标准版 Java EE:企业版 Java ME:小型版 2.2Java重要特点(四个) 1)java语言是面向对象的(oop) 2)java语言是健壮的。java的强类型机制、异常处理、垃圾的自动…

Kamiya丨Kamiya艾美捷人CP ELISA说明书

Kamiya艾美捷人CP ELISA预期用途: 人CP ELISA是一种高灵敏度的双位点酶联免疫分析(ELISA)人体生物样品中CP的测定。仅供研究使用。不用于诊断程序。 引言 铜蓝蛋白是参与铜转运的多功能蛋白,也是重要的血清抗氧化剂。在此期间炎…

【Canvas】js用Canvas绘制漩涡螺旋图动画效果

学习JavaScript编程,会用Canvas画图吗,学会它,能画很多有趣的事物,可自由发挥想象,会发现图形学的美,收获很多,这里有一个例子,如何用canvas画漩涡螺旋图动图效果,接下来…

c语言tips-结构体

1. 结构体定义和使用 #include <stdio.h>struct stu {int age;int height;int weight; };int main(int argc, char *argv[]) {struct stu stu1;stu1.age 18;stu1.height 172;stu1.weight 62;printf("年龄为&#xff1a;%d, 身高为&#xff1a;%d, 体重为&#x…

Self-attention自注意力机制——李宏毅机器学习笔记

self-attention想要解决的问题 复杂的输入 每次输入的length不同时&#xff0c;即Vector Set大小不同&#xff0c;该如何处理&#xff1f; one-hot encoding&#xff0c;缺点&#xff1a;所有的词汇之间没有语义资讯。 word embedding&#xff0c;会给每一个词汇一个向量&…

02-Docker-常用命令

目录 一、帮助启动类命令 启动docker 停止docker 重启docker 查看docker状态 开机启动 查看docker概要信息 查看docker总体帮助文档 查看docker命令帮助文档 二、镜像命令 1. 列出本地主机上的镜像 2. 查找镜像 3. 下载镜像 4. 查看镜像/容器/数据卷所占的空间 5.…

[附源码]SSM计算机毕业设计小说网站的设计与实现1JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Java#数据结构----2

目录 一.数据结构(树) 二.二叉树(任意节点的度<2) 二叉查找树又称为二叉排序树/二叉搜索树 平衡二叉树 平衡二叉树的旋转机制 三.红黑树 一.数据结构(树) 基本概念: 度: 每一个节点的子节点数量 树高: 树的总层数 根节点: 最顶层的节点 左子节点: 左下方的节点 右子节…

【Java八股文总结】之面试题(二)

文章目录面试题一、几种锁的区别1、synchronized 和ReentrantLock的区别二、Java高级1、反射1、反射的应用场合2、Java反射API3、反射使用步骤&#xff08;获取Class 对象、调用对象方法&#xff09;4、获取Class对象的3种方法5、创建对象的两种方法 newInstance(&#xff09;2…

数据结构和算法——基于Java——3.1链表(单链表)

理论补充 概念:链表是以节点的方式存储&#xff0c;是链式存储 特性 每个节点包含一个data数据域&#xff08;存放数据&#xff09;&#xff0c;一个next域&#xff08;指向下一个节点&#xff09;链表分带头结点和不带头节点&#xff08;单链表带头&#xff09;链表的内存分…