当前位置: 首页 > news >正文

Cesium实践(4)——空间数据加载

文章目录

  • 前言
  • 几何形体
    • 线
  • 标签
    • 文字
    • 图标
  • 几何文件
    • GeoJson
    • KML
    • CZML
  • 三维模型
  • 总结


前言

本文介绍Cesium如何加载空间数据,空间数据即明确定义在三维空间中的数据,空间数据包括以下几类:1、几何形体(点、线、面、体)2、标签(文字图标等)3、几何文件(geojson、kml、czml)4、三维模型(gltf、gltf)。3D Tiles 作为Cesium提出的处理大型三维数据的格式暂不在本文介绍。


几何形体

在前一篇文章中讲到,Entity 是由 Primitive 封装而来API,空间几何数据的实现几乎是由他们提供,几何要素从类型上区分可划分为点、线、面、体等,如下表所示。

功能Entity APIPrimitive API
创建点要素,可控制点颜色、轮廓等PointGraphics-
创可设定宽度的折线PolylineGraphicsPolylineGeometry
各种几何要素轮廓线、不可设置宽度,轮廓线种类包括:立方体、圆/椭圆、廊、圆柱/锥、球/椭球、矩形、多边形、面、墙、管状线等-SimplePolylineGeometry
圆形面要素-CircleGeometry
廊状面要素CorridorGraphicsCorridorGeometry
椭圆状面要素EllipseGraphicsEllipseGeometry
矩形面要素RectangleGraphicsRectangleGeometry
多边形面要素PolygonGraphicsPolygonGeometry
平面要素PlaneGraphicsPlaneGeometry
立方体要素BoxGraphicsBoxGeometry
圆柱、圆锥体要素CylinderGraphicsCylinderGeometry
椭圆体要素EllipsoidGraphicsEllipseGeometry
管状体要素PolylineGraphicsPolylineGeometry
球体要素-SphereGeometry
墙体要素WallGraphicsWallGeometry

Entity支持的属性如下,Entity添加几何体后返回Viewer对象
在这里插入图片描述

  const point = viewer.entities.add({// 定位点position: Cesium.Cartesian3.fromDegrees(117, 40, 100),// 点point: {pixelSize: 10,// 大小color: Cesium.Color.RED, //点的颜色outlineWidth: 4, // 外框大小outlineColor: Cesium.Color.WHITE, //外框颜色},});

在这里插入图片描述

线

  • 普通线
  const line = viewer.entities.add({name: "red_line",polyline: {positions: Cesium.Cartesian3.fromDegreesArray([117, 40, 118, 40]), //线位置width: 5, // 宽度material: Cesium.Color.RED, // 材质clampToGround: true, // 贴地}});

在这里插入图片描述

  • 轮廓线——通过Entity
  const outlineOnly = viewer.entities.add({name: "red_box_outline",position: Cesium.Cartesian3.fromDegrees(117.2, 40.0, 300.0),box: {// 维度dimensions: new Cesium.Cartesian3(300.0, 300.0, 300.0),fill: false, // 填充面outline: true, // 开启边框outlineColor: Cesium.Color.RED ,// 边框颜色},});

在这里插入图片描述

  • 轮廓线——通过Primitive
  const box = Cesium.BoxOutlineGeometry.fromDimensions({dimensions: new Cesium.Cartesian3(500000.0, 500000.0, 500000.0),});const geometry = Cesium.BoxOutlineGeometry.createGeometry(box);// 创建boxOutline的几何实例let boxOutlineInstance = new Cesium.GeometryInstance({geometry: geometry,modelMatrix: Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(170, 40)),new Cesium.Cartesian3(0.0, 0.0, 1000.0),new Cesium.Matrix4()),id: "boxOutline",attributes: {color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED),},});// 创建图元let primitive = new Cesium.Primitive({geometryInstances: boxOutlineInstance,appearance: new Cesium.PerInstanceColorAppearance({flat: true,faceForward: true,translucent: false,closed: false,}),asynchronous: false,show: true,modelMatrix: Cesium.Matrix4.IDENTITY,vertexCacheOptimize: false,interleave: false,compressVertices: true,releaseGeometryInstances: true,allowPicking: true,cull: true,debugShowBoundingVolume: false,shadows: Cesium.ShadowMode.DISABLED,});viewer.scene.primitives.add(primitive);

在这里插入图片描述

  const redPlane = viewer.entities.add({name: "red_plane",position: Cesium.Cartesian3.fromDegrees(117.1, 40.0, 300.0),plane: {plane: new Cesium.Plane(Cesium.Cartesian3.UNIT_Y, 0.0),dimensions: new Cesium.Cartesian2(500.0, 300.0),material: Cesium.Color.RED.withAlpha(0.5),outline: true,outlineColor: Cesium.Color.BLACK,},});

在这里插入图片描述

  const redBox = viewer.entities.add({name: "red_box",position: Cesium.Cartesian3.fromDegrees(117.3, 40.0, 400.0),box: {dimensions: new Cesium.Cartesian3(400.0, 200.0, 300.0),material: Cesium.Color.RED.withAlpha(0.5),outline: true,outlineColor: Cesium.Color.BLACK,},});

在这里插入图片描述

标签

文字

  const label = viewer.entities.add({position: Cesium.Cartesian3.fromDegrees(117.4, 40, 1500),label: {text: "这是一团火",font: "24px sans-serif", // 大小 字型fillColor: Cesium.Color.WHITE, //字体颜色outlineColor: Cesium.Color.BLACK, //字体外框颜色outlineWidth: 4, // 字边宽style: Cesium.LabelStyle.FILL_AND_OUTLINE, // FILL填充文字,OUTLINE勾勒标签,FILL_AND_OUTLINE填充文字和勾勒标签pixelOffset: new Cesium.Cartesian2(0, -24),// 设置文字的偏移量  horizontalOrigin: Cesium.HorizontalOrigin.CENTER, // 设置文字的显示位置,LEFT /RIGHT /CENTERverticalOrigin: Cesium.VerticalOrigin.BOTTOM,       // 设置文字的显示位置},});

图标

  const label = viewer.entities.add({position: Cesium.Cartesian3.fromDegrees(117.4, 40, 1500),billboard: {image: "../texture/Fire.png",width: 50,height: 50,verticalOrigin: Cesium.VerticalOrigin.TOP, //垂直显示位置horizontalOrigin: Cesium.HorizontalOrigin.CENTER,  // 水平显示位置},});

在这里插入图片描述

几何文件

常见的几何文件包括GeoJson、KML,除此外,Cesium还在JSON数据的基础上扩充了CZML类型来自持更大的数据流。DataSoureCollection 是 Cesium中加载矢量数据的主要方式之一,最大特点是支持加载矢量数据集与外部文件的调用,主要分为CzmlDataSourceKmlDataSourceGeoJsonDataSource三种,分别对应加载CZMLKMLGeoJSON 格式数据。

更多代码示例见官网:https://sandcastle.cesium.com/?src=KML.html&label=DataSources

GeoJson

  // geojsonconst chinaGeoJson = Cesium.GeoJsonDataSource.load("https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json",{stroke: Cesium.Color.RED, // 边线默认色fill: Cesium.Color.SKYBLUE.withAlpha(0.5), // 默认填充色strokeWidth: 4, // 多边形线条和多边形轮廓的默认宽});chinaGeoJson.then((dataSources) => { // geojson加载完成的回调viewer.dataSources.add(dataSources);const entities = dataSources.entities.values;entities.forEach((entity, i) => {entity.polygon.material = new Cesium.ColorMaterialProperty(Cesium.Color.fromRandom({ // 每个json随机赋色alpha: 1,}));entity.polygon.outline = false;entity.polygon.extrudedHeight = 1000 // 拉伸高});});

在这里插入图片描述

KML

  const kmlDataPromise = Cesium.KmlDataSource.load(kmlUrl, {camera: viewer.scene.camera,canvas: viewer.scene.canvas,screenOverlayContainer: viewer.container,});kmlDataPromise.then(function (dataSource) {viewer.dataSources.add(dataSource);});

在这里插入图片描述

CZML

CZML的使用可见 Cesium_CZML

三维模型

  // 创建模型function createModel(url, height) {const position = Cesium.Cartesian3.fromDegrees(117, 40.01, height);const heading = Cesium.Math.toRadians(135);const pitch = 0;const roll = 0;const hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);const orientation = Cesium.Transforms.headingPitchRollQuaternion(position,hpr);const entity = viewer.entities.add({name: url,position: position,orientation: orientation,model: {uri: url,minimumPixelSize: 128,maximumScale: 20000,},});viewer.trackedEntity = entity;}createModel("../model/Air.glb", 1000)createModel("../Assets/CesiumMilkTruck.glb",150)

在这里插入图片描述

总结

  • 几何形体:点、线、面、体

  • 标签:文字、图标

  • 几何文件:GeoJson、KML、CZML

  • 三维模型:glb/gltf

相关文章:

Cesium实践(4)——空间数据加载

文章目录 前言几何形体点线面体 标签文字图标 几何文件GeoJsonKMLCZML 三维模型总结 前言 本文介绍Cesium如何加载空间数据,空间数据即明确定义在三维空间中的数据,空间数据包括以下几类:1、几何形体(点、线、面、体)…...

FreeRTOS(三)——应用开发(一)

文章目录 0x01 FreeRTOS文件夹FreeRTOSConfig.h文件内容上面定义的宏决定FreeRTOS.h文件中的定义0x02 创建任务创建静态任务过程configSUPPORT_STATIC_ALLOCATION创建动态任务过程configSUPPORT_DYNAMIC_ALLOCATION 0x03 FreeRTOS启动流程启动流程概述 0x04 任务管理任务调度器…...

这些 Linux 的自动化技巧,教你轻松完成任务

linux 系统的 web 网站在运营状态时,我们常需要对网站进行维护,例如查看资源剩余并做出响应、日志分割、数据整理,在特定状态执行特定任务等等,这些都会需要 linux能实现自动执行某些任任务。本篇博文介绍如何进行常见的linux自动…...

PAL制搜台

PAL电视制式 PAL电视制式(Phase Alternating Line)采用625线制式,视讯制式采用PAL-B/G、PAL-D/K、PAL-I等。PAL电视不像NTSC制式有中心频点,它采用宽带的频率范围进行电视信号的调制和传输。 PAL电视制式频率 PAL电视采用UHF(超高频)和VHF(甚高频)两个频段进行电视信号的传输…...

SpringBoot 使用 Docker Registry Api

Spring Boot是一个快速开发Web应用程序的框架,它提供了许多方便的工具和库,使得开发过程更加高效。在部署Spring Boot应用程序时,使用Docker容器是现代化和流行的选择。在此背景下,本文将介绍如何使用Docker Registry API来构建、…...

Win10任务栏卡死怎么办?这3个方法快收藏!

案例:win10任务栏卡死 【姐妹们,我的win10任务栏一直卡着,我完全没法使用计算机了,遇到这种情况,我应该怎么做呢?求大家给我支支招!感谢感谢!】 我们使用电脑的过程中,…...

这一篇搞定Spring

文章目录 一、引言1.1 原生web开发中存在哪些问题? 二、Spring框架2.1 概念2.2 访问与下载 三、Spring架构组成四、山寨版的Spring容器4.1准备工作4.2 山寨IOC容器4.3 配置文件告诉容器 管理哪些bean4.4 相关类4.5 测试 容器 五、构建Maven项目5.1 新建项目5.2 选择…...

软测如果这么学,培训班都得倒闭,直接省去上万元的学费

俗话说外行看热闹,内行看门道。 写这篇文章,是希望把我的一些我认为是非常有价值的经验总结出来,能够帮助刚做测试不久的新同学,或者是测试经验丰富的老同学以共享。 希望我们可爱的新同学,准备要在测试领域耕耘的伙…...

赎金信(Hash的应用)

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 来源:力扣&#xff0…...

4月更新!EasyOps®全平台27项新功能一口气来袭~

又到了每月产品盘点时刻,27大新功能上线和升级优化,设计Hyperlnsight超融合持续观测平台、DevOps持续交付平台、AutoOps自动化运维平台、ITSM服务平台、公共服务,在不断的技术创新过程中,进一步加速IT运维效率升级。 下面和小编一…...

程序计算任意连续的12个月公里数不超三万公里预警

为了比亚迪的电池终身质保,写了个简单算法,计算任意12个连续的月份公里数加起来不超过3万公里的预警import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; import java.util.stream.Collectors;/***…...

【IMU】IMU知多少之42866

ICM-42688-P数据手册中加速度计和角速度计的超量程阈值分别如下: 加速度计超量程阈值: 数字量(LSB):16g 模拟量(g):22g 角速度计超量程阈值: 数字量(LSB&a…...

谁说不能用中文写代码?

入门教程、案例源码、学习资料、读者群 请访问: python666.cn 大家好,欢迎来到 Crossin的编程教室 ! 现代计算机和编程的起源和推动力量主要源自美国,再加上26个字母很便于表示(算上大小写,6位bit就够了&am…...

Java阶段二Day07

Java阶段二Day07 文章目录 Java阶段二Day07V17UserControllerDispatcherServletControllerRequestMapping V18DispatcherServletHandleMapping V19BirdBootApplication 线程池线程的执行过程线程池API 数据库数据库的基本概念数据库管理系统中常见的概念 SQL分类DDL语言-数据定…...

React Native iOS打包详细步骤

一、在自己项目的iOS文件夹下新建一个文件夹取名bundle 二、将打包命令写到项目package.json文件里,终端执行 npm run bundle-ios 先添加如下(注意:这里写的路径"./ios/bundle"就是上面bundle创建的文件夹)&#xff1a…...

I/O复用函数,poll和epoll的用法与select、poll、epoll的区别

1.poll的接口介绍 poll系统调用和select类似&#xff0c;也是在指定时间内轮询一定数量的文件描述符&#xff0c;已测试其中是否有就绪者。poll的原型如下&#xff1a; # include <poll.h> int poll(struct pollfd*fds,nfds_t nfds,int timeout); poll系统调用成功返回就…...

大数据周会-本周学习内容总结011

开会时间&#xff1a;2023.04.23 15:00 线下会议 目录 01【spark】 02【es同步mysql】 03【下周任务】 01【spark】 尚硅谷大数据技术Spark教程-笔记01【Spark&#xff08;概述、快速上手、运行环境、运行架构&#xff09;】尚硅谷大数据技术Spark教程-笔记02【SparkCore&am…...

常见的NoSQL数据库介绍

目录 一、NoSQL概述 二、为什么用NoSQL 三、NoSQL特点 四、NoSQL的分类 五、NoSQL适用场景 六、NoSQL不适用场景 一、NoSQL概述 NoSQL(NoSQL Not Only SQL )&#xff0c;意即“不仅仅是SQL”&#xff0c;泛指非关系型的数据库。 NoSQL 不依赖业务逻辑方式存储&#xf…...

记录安装Nodejs和HBuilderX搭建、部署微信小程序开发环境(一)

文章目录 1 前言2 注册小程序账号3 安装微信开发者工具4 安装Nodejs和HBuilderX4.1 windows用户安装Nodejs4.2 macos/linux用户安装Nodejs4.3 安装HBuilder X 5 创建项目5.1 新建一个项目5.2 进行基本配置 6 HBuilderX同步微信开发者工具6.1 打开服务端口6.2 调用微信开发者工具…...

(一)pyahocorasick和marisa_trie,字符串快速查找的python包,自然语言处理,命名实体识别可用的高效包...

Pyahocorasick Pyahocorasick是一个基于AC自动机算法的字符串匹配工具。它可以用于快速查找多个短字符串在一个长字符串中的所有出现位置。Pyahocorasick可以在构建状态机时使用多线程&#xff0c;从而大大加快构建速度。 安装Pyahocorasick Pyahocorasick可以使用pip命令进行安…...

基于Java+SpringBoot+vue+element驾校管理系统设计和实现

基于JavaSpringBootvueelement驾校管理系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 …...

Unity中值类型和引用类型及使用时的注意事项

什么是值类型&#xff0c;什么是引用类型&#xff0c;Unity中值类型有哪些&#xff0c;引用类型有哪些&#xff0c;使用时需要注意些什么&#xff1f; 一、值类型和引用类型的概念 A. 值类型 值类型是指变量直接存储其值的数据类型&#xff0c;变量的值被保存在栈中&#xff0…...

PM510V16 3BSE008358R1嵌入式卡件用于励磁系统多用于工业发电

​ PM510V16 3BSE008358R1嵌入式卡件用于励磁系统多用于工业发电 物联网与工业自动化控制系统的联系 当今&#xff0c;物联网可谓是在各大媒体出镜率最高、而且与“智能”联系密切的名词之一。从“管理、控制、智能”的角度来看&#xff0c;其实物联网与工业自动化是一脉相承的…...

AI 这是要杀疯啦!

ChatGPT 是基于 GPT 系列大模型开发出来的一个对话场景的 Demo&#xff0c;它已经让我们见识到了大模型的威力。 但有些开发者的胃口不满足于此&#xff0c;已经开始尝试“突破” AI 的边界了&#xff0c;本文推荐 5 个人工智能的开源项目。其中前两个项目&#xff0c;让人细思…...

【精品示例】超实用Python爬虫入门实例——做一个优质舔狗

引言 最近发现了一个有意思的网站&#xff0c;里面充斥了大量的舔狗箴言。作为一个爬虫发烧友怎么能错过此等机会&#xff0c;咱们直接就是上才艺&#xff01; 类的编写 本次爬虫使用了多协程的方案进行&#xff0c;保证了爬虫的速度。在这里我们新建一个爬虫类&#xff0c;…...

TCP流量控制与拥塞控制

什么是流量控制 一条TCP连接的每一侧主机都为该连接设置了接收缓存。当该TCP连接接收到正确的、有序的报文段&#xff0c;就会将数据放入接收缓存。相关联的应用会从缓存中读取数据。 如果发送者发送数据过快、过多&#xff0c;而接收方的应用程序从缓冲区读取的速度较慢&…...

Java_异常

Java_异常 1.什么是异常 ​ 生活中的异常&#xff1a;感冒发烧、电脑蓝屏、手机死机等。 ​ 程序中的异常&#xff1a;磁盘空间不足、网络连接中断、被加载的资源不存在等。 ​ 程序异常解决办法&#xff1a;针对程序中非正常情况&#xff0c;Java语言引入了异常&#xff0…...

自动化工具 接口自动化测试引擎

一、前言&#xff1a; 1、解决痛点&#xff1a;接口自动化测试用例需要人去开发、去维护。 2、实现第一性原理&#xff1a;根据定义的测试策略自动生成接口测试用例。 二、引擎优势&#xff1a; 1、提升人效&#xff1a;降低传统方式中接口测试开发与维护的工作量。 2、覆盖更…...

十三、详解Kubernetes的存储管理器

Kubernetes是一个开源的容器编排系统,它可以自动化地管理容器的部署、扩展和运维。在Kubernetes中,存储管理器是一个重要的组件,它负责管理容器的存储资源,包括持久化存储和临时存储。 Kubernetes的存储管理器主要有以下几个功能: 提供持久化存储:Kubernetes的存储管理器…...

java版 工程管理系统源码之提高工程项目管理软件的效率

高效的工程项目管理软件不仅能够提高效率还应可以帮你节省成本提升利润 在工程行业中&#xff0c;管理不畅以及不良的项目执行&#xff0c;往往会导致项目延期、成本上升、回款拖后&#xff0c;最终导致项目整体盈利下降。企企管理云业财一体化的项目管理系统&#xff0c;确保…...