【小沐学GIS】基于Cesium实现三维数字地球Earth(CesiumJS入门安装)

news2024/11/26 16:50:07

文章目录

  • 1、简介
    • 1.1 平台
      • 1.1.1 Cesium ion
      • 1.1.2 CesiumJS
      • 1.1.3 Cesium for Unity
      • 1.1.4 Cesium for Unreal
      • 1.1.4 Cesium for Omniverse
      • 1.1.5 Cesium for O3DE
    • 1.2 支持的数据格式
  • 2、CesiumJS安装
  • 3、代码测试
    • 3.1 安装node
    • 3.2 安装依赖项
    • 3.3 运行测试示例
    • 3.4 注册获取token
  • 4、扩展功能
    • 4.1 添加高德地图
    • 4.2 添加glb模型
    • 4.3 去除logo
    • 4.4 设置相机信息
    • 4.5 获取当前瓦片缩放级别
  • 结语

1、简介

面向 Web 的 3D 地理空间可视化

CesiumJS 是一个开源 JavaScript 库,用于创建具有最佳性能、精度、视觉质量和易用性的世界级 3D 地球仪和地图。从航空航天到智能城市再到无人机,各行各业的开发人员都使用 CesiumJS 创建交互式 Web 应用程序,以共享动态地理空间数据。

CesiumJS 基于开放格式构建,旨在实现海量数据集的强大互操作性和扩展。

  • 从Cesium ion 或其他来源以 3D 图块和其他标准格式流式传输
  • 在高精度 WGS84 地球上进行可视化和分析
  • 在桌面设备或移动设备上与用户共享
    在这里插入图片描述

1.1 平台

Cesium 是用于创建强大的 3D 地理空间应用程序的基础开放平台。

  • Fastest available pipelines for creating 3D Tiles from heterogeneous data
  • Global 3D content including 3D terrain and buildings
  • CesiumJS (open source) best-in-class for accurate 3D visualization on the web
  • Cesium for Unity (open source) 3D geospatial capability for the Unity ecosystem
  • Cesium for Unreal (open source) first high-precision (WGS84) globe for game engines
  • Cesium for O3DE (open source) WGS84 globe for the open source Open 3D Engine
    在这里插入图片描述

1.1.1 Cesium ion

将 Cesium ion 精选的 3D 全局内容与您的点云、摄影测量、BIM 或其他 3D 数据相结合,以快速启动应用程序开发。您的Cesium ion帐户包括最快的可用切片管道,用于将内容流式传输为 3D 切片,并且您可以控制谁可以访问您的数据。

  • 包括世界上最高效的 3D 图块创建管道
  • 精选的 3D 全球建筑物、地形和影像
  • 安全云托管,可扩展
  • 基于令牌的共享,因此您可以控制谁有权访问您的数据
  • 商业订阅(非商业用途免费)

1.1.2 CesiumJS

CesiumJS是最先进的开源Javascript库,用于在Web上进行美观,准确的3D可视化。添加Cesium ion SDK,在自定义CesiumJS 应用中创建高级分析。

  • JavaScript 库,用于创建在浏览器和跨设备运行的世界级 3D 地理空间可视化
  • 支持精确分析的高精度 WGS84 地球仪
  • 针对海量数据集进行扩展的流畅用户体验
  • 来自Cesium ion或其他来源的 3D 图块和其他标准格式的流
  • 开源且免费 — 下载量达数百万次
  • 使用 Cesium ion SDK 添加高级分析(需要订阅)

Features:

  • 3D Tiles
    使用 3D 切片开放规范对 3D 建筑物、摄影测量和点云进行流式传输、设置样式并与之交互。
  • 3D模型
    使用 glTF(WebGL 的运行时资产格式)可视化 3D 模型。
  • 地形和影像图层
    使用开放标准和自定义切片方案流式传输影像和全球地形。
  • 矢量和几何
    加载 KML、GeoJSON 和 CZML,或使用 API 绘制各种要素和几何。
  • 时间动态可视化
    利用对时间动态模拟、实时遥测流式处理和 4D 可视化的一流支持。
  • 3D, 2D, and 2.5D Columbus view
    在运行时查看数据并在三种不同的地图模式之间切换。

1.1.3 Cesium for Unity

Cesium for Unity 为 Unity 生态系统提供全尺寸、高精度 (WGS84) 地球和运行时 3D Tiles 引擎。

1.1.4 Cesium for Unreal

Cesium for Unreal是游戏引擎中的第一个高精度(WGS84)地球仪,将Cesium 中真实世界的细节和准确性带到模拟环境中。

1.1.4 Cesium for Omniverse

Cesium for Omniverse 是为 NVIDIA Omniverse 启用 3D 地理空间功能的扩展。

1.1.5 Cesium for O3DE

Cesium for O3DE为开源的Open 3D Engine (O3DE) 提供全尺寸、高精度 (WGS84) 地球和运行时 3D Tiles 引擎。

1.2 支持的数据格式

  • 影像数据:Bing、天地图、ArcGIS、OSM、WMTS、WMS等
  • 地形数据:ArcGIS、谷歌、STK等
  • 矢量数据:KML、KMZ、GeoJSON、TopoJSON、CZML
  • 三维模型:GLTF、GLB(二进制glTF文件)
  • 三维瓦片:3D Tiles(倾斜摄影、人工模型、 三维建筑物、CAD、BIM,点云数据等)

2、CesiumJS安装

  • (1)通过npm安装
npm install cesium
  • (2)直接下载源码

在这里插入图片描述
在这里插入图片描述

3、代码测试

3.1 安装node

node -v
npm -v

在这里插入图片描述
输出对应版本,说明node安装成功。

3.2 安装依赖项

在Cesium代码根目录输入:

npm install

在这里插入图片描述
在这里插入图片描述

3.3 运行测试示例

npm run start

在这里插入图片描述
在这里插入图片描述
浏览器访问:

http://127.0.0.1:8080

出现了如下的首页内容:
在这里插入图片描述
点击“Hello World”试试,如下:
在这里插入图片描述
地球终于出来了!

3.4 注册获取token

如果地球没有出现的话,就需要注册账户,获取token了。
在这里插入图片描述
填写相关信息如下:
在这里插入图片描述
获取token:
在这里插入图片描述
修改“Hello World”页面代码,填写token。

Cesium.Ion.defaultAccessToken='your tokens';

在这里插入图片描述
再运行“Hello World”试试。

4、扩展功能

4.1 添加高德地图

		const viewer = new Cesium.Viewer("cesiumContainer");
		
		// Cesium加载高德矢量图
		tdtLayer = new Cesium.UrlTemplateImageryProvider({
			url: "http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
			minimumLevel: 3,
			maximumLevel: 18
		})
		viewer.imageryLayers.addImageryProvider(tdtLayer);
		
		// Cesium加载高德影像图
		 tdtLayer = new Cesium.UrlTemplateImageryProvider({
			url: "https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}",
			minimumLevel: 3,
			maximumLevel: 18
		})
		viewer.imageryLayers.addImageryProvider(tdtLayer);
		
		// Cesium加载高德标记图
		tdtLayer = new Cesium.UrlTemplateImageryProvider({
			url: "http://webst02.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8",
			minimumLevel: 3,
			maximumLevel: 18
		})
		viewer.imageryLayers.addImageryProvider(tdtLayer);

运行如下:
在这里插入图片描述

4.2 添加glb模型

https://cesium.com/learn/cesiumjs/ref-doc/Model.html

  • 例子1:
// Load a model and add it to the scene
try {
 const model = await Cesium.Model.fromGltfAsync({
   url: "../../SampleData/models/CesiumMan/Cesium_Man.glb"
 });
 viewer.scene.primitives.add(model);
} catch (error) {
 console.log(`Failed to load model. ${error}`);
}
  • 例子2:
// Position a model with modelMatrix and display it with a minimum size of 128 pixels
const position = Cesium.Cartesian3.fromDegrees(
  -123.0744619,
  44.0503706,
  5000.0
);
const headingPositionRoll = new Cesium.HeadingPitchRoll();
const fixedFrameTransform = Cesium.Transforms.localFrameToFixedFrameGenerator(
  "north",
  "west"
);
try {
 const model = await Cesium.Model.fromGltfAsync({
   url: "../../SampleData/models/CesiumAir/Cesium_Air.glb",
   modelMatrix: Cesium.Transforms.headingPitchRollToFixedFrame(
     position,
     headingPositionRoll,
     Cesium.Ellipsoid.WGS84,
     fixedFrameTransform
   ),
   minimumPixelSize: 128,
 });
 viewer.scene.primitives.add(model);
} catch (error) {
 console.log(`Failed to load model. ${error}`);
}
  • 例子3:
const viewer = new Cesium.Viewer("cesiumContainer");

// Cesium加载高德矢量图
tdtLayer = new Cesium.UrlTemplateImageryProvider({
	url: "http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
	minimumLevel: 3,
	maximumLevel: 18
})
viewer.imageryLayers.addImageryProvider(tdtLayer);

// 记载glb模型
const modelEntity = viewer.entities.add({
	name: "glb模型",
	position: new Cesium.Cartesian3.fromDegrees(120.14046454, 30.27415039),
	model: {
		uri: './data/a318.glb',
		minimumPixelSize: 256,
		maxumunScale: 20000,
	},
});
// 聚焦模型
viewer.trackedEntity = modelEntity;

在这里插入图片描述

4.3 去除logo

viewer.cesiumWidget.creditContainer.style.display = "none";

在这里插入图片描述

4.4 设置相机信息

输出当前相机信息:

console.log(viewer.camera.position);
console.log(viewer.camera.heading);
console.log(viewer.camera.pitch);
console.log(viewer.camera.roll);

设置相机信息:

// 设置相机位置
viewer.camera.setView({
    // 设置相机位置
    destination: {
        x: -2388744.838660655,
        y: 5388613.2412665,
        z: 2429186.308668634
    },
    orientation: {
        // 初始视角
        heading: 6.283185307179586,
        pitch: -1.5689097038798985,
        roll: 0
    }
});

4.5 获取当前瓦片缩放级别

// 获取当前地图瓦片级别
function tileLevel(){
	let tiles = new Set();
	let tilesToRender = viewer.scene.globe._surface._tilesToRender;
	if (Cesium.defined(tilesToRender)) {
	    for (let i = 0; i < tilesToRender.length; i++) {
	        tiles.add(tilesToRender[i].level);
	    }
	    console.log("当前地图瓦片级别为:");
	    console.log(tiles);
	}
}
//viewer.clock.onTick.addEventListener(() => {
viewer.camera.changed.addEventListener(() => {
	tileLevel();
})

在这里插入图片描述

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

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

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

相关文章

常见的前端框架

随着前端行业的发展&#xff0c;前端框架越来越多出现&#xff0c;为我们的项目开发工作带来了极大的便利&#xff0c;那目前主流的前端框架有哪些呢&#xff1f; 工作中我们常用的前端框架有vue框架、React框架、Bootstrap框架、Angular框架等&#xff0c;下面给大家简单介绍…

【AI绘图】二、stable diffusion环境准备与安装

前一篇&#xff1a;一、stable diffusion的发展史 放一张SD的效果图 硬件配置要求 Stable Diffusion是使用显卡生成图片&#xff0c;对电脑硬件有一定要求。 电脑配置最核心的关键点&#xff1a;看显卡、看内存、看硬盘、看 CPU。 显卡&#xff1a;N 卡&#xff08;英伟达 N…

基于内点法求解最优潮流研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Spring源码(二)— AbstractApplicationContext

上一篇文章简单的介绍了一下Spring框架大体的一个执行流程&#xff0c;整个专栏的内容也会根据第一篇序言中的流程图一步一步的向下梳理&#xff0c;并会慢慢补充更多的细节进去。 Test 创建ClassPathXmlApplicationContext来解析xml。 public class Test {public static vo…

剖析 OpenShift 中的 DNS

深入分析 OpenShift 内部 DNS OpenShift 中的DNS 相关组件及其配置1.1 Pod 中的 DNS 配置1.2 Pod 所在宿主机上的 DNS 配置及服务1.2.1 resolv.conf 文件 DNS 配置DNS 查询流程为什么需要内部 DNS&#xff1f; 本文基于 OpenShift 3.11&#xff0c;Kubernetes 1.11 进行测试 O…

2023/6/4周报

目录 摘要 论文阅读 1、标题和现存问题 2、使用GNN进行文本分类 3、INDUCT-GCN 4、实验准备 5、实验结果 深度学习 1、时空图的种类 2、图在环境中的应用 3、STGNN 总结 摘要 本周在论文阅读上&#xff0c;阅读了一篇InducT-GCN:归纳图卷积文本分类网络的论文。基…

python-pandas按各种时间统计和案例

使用到的库 pandas、matplotlib、numpy 使用到的函数 df.resample(“H”).sum() 参数 B business day frequency C custom business day frequency (experimental) D calendar day frequency W weekly frequency M month end frequency BM business month end frequency CBM…

【奶奶看了都会】云服务器ChatGLM模型fine-tuning微调,让你拥有自己的知识库

1.背景 大家好啊&#xff0c;上次给大家写了ChatGLM-6B的部署使用教程&#xff0c;【奶奶看了都会】云服务器部署开源ChatGLM-6B&#xff0c;让你拥有自己的ChatGPT 但是因为模型比较小的问题&#xff0c;所以日常工作中可能用不上。而且大家更希望的是模型能训练自己的数据&…

【Python Bokeh】零基础也能轻松掌握的学习路线与参考资料

Python Bokeh是一款为开发者提供数据可视化的Python库。它可以帮助开发者轻松地创建交互式网页应用程序&#xff0c;而无需编写大量的JavaScript代码。Bokeh支持各种绘图类型和工具&#xff0c;包括线图、散点图、条形图等。Python Bokeh非常适合在大数据分析、商业智能和数据科…

chatgpt赋能python:Python去除重复元素的几种方法

Python去除重复元素的几种方法 在Python编程中&#xff0c;去除列表、集合、字典等数据结构中的重复元素是一个常见的操作。本文将介绍Python中去除重复元素的几种方法&#xff0c;并分析它们的优缺点。 方法一&#xff1a;使用set去重 Set是Python中的一种集合类数据结构&a…

17_Linux根文件简介与Busybox构建文件系统

目录 根文件系统简介 文件目录简介 BusyBox简介 编译BusyBox构建根文件系统 修改Makefile添加编译器 busybox中文字符支持 配置 busybox 编译busybox 向根文件系统添加lib库 向rootfs的“usr/lib”目录添加库文件 创建其他文件夹 根文件系统初步测试 根文件系统简介…

Unity制作二次元卡通渲染角色材质——3、高光反射与ILM贴图

Unity制作二次元材质角色 回到目录 大家好&#xff0c;我是阿赵。 这里继续来讲二次元角色的材质。上次讲了光影的色阶化问题&#xff0c;这次继续讲光照模型效果的问题。 之前我们说过&#xff0c;光照模型的最后效果是&#xff1a; 环境色漫反射高光反射。 这里我们可以先忽略…

【嵌入式系统】思考题复习

嵌入式系统思考题 0. 名词解释1. 嵌入式系统概述2. ARM处理器体系结构3. ARM指令集4. S5PV210微处理器与接口5. ARM-Linux内核6. 嵌入式Linux文件系统7. 嵌入式Linux系统移植及调试8. 设备驱动程序设计9. QT图形界面应用程序开发基础10. SQLite数据库11. 嵌入式系统的开发设计案…

Qt6.5.1LTS搭建Android开发环境填坑

Qt6第二个LTS出来了&#xff0c;周日找时间安装并测试了Qt6.5LTS&#xff0c;安装我是按我之前的一个博客记录来做的&#xff0c;用的是国内境像&#xff0c;顺利快速安装完成&#xff0c;下面是设置的过程关键总结。 一、Devices Android设备(Device)选择 二、Kits &#xf…

网络安全-XSS的原理、攻击及防御

简介 跨站脚本攻击(全称Cross Site Scripting,为和CSS&#xff08;层叠样式表&#xff09;区分&#xff0c;简称为XSS)是指恶意攻击者在Web页面中插入恶意javascript代码&#xff08;也可能包含html代码&#xff09;&#xff0c;当用户浏览网页之时&#xff0c;嵌入其中Web里面…

【C++开发】Qt+Tesseract实现文字识别的各种坑(已解决)

文章目录 Tesseract库下载Qt版本选择安装步骤 VS2017安装MSVC调试器安装构建套件的导入文字识别功能的检测 最近在给之前Qt医疗管理系统项目添加一个文字识别功能&#xff0c;但是在其中遇到非常多坑&#xff0c;花费了我比较多的时间&#xff08;查阅了很多文章&#xff09;&a…

基础学习——关于list、numpy、torch在float和int等数据类型转换方面的总结

系列文章目录 Numpy学习——创建数组及常规操作&#xff08;数组创建、切片、维度变换、索引、筛选、判断、广播&#xff09; Tensor学习——创建张量及常规操作&#xff08;创建、切片、索引、转换、维度变换、拼接&#xff09; 基础学习——numpy与tensor张量的转换 基础学习…

【软件测试】一个完整的项目流程是什么样的?

软件测试是使用人工或者自动的手段来运行或者测定某个软件系统的过程&#xff0c;其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。 在软件投入使用前&#xff0c;要经过一系列的严格测试&#xff0c;才能保证交付质量。 一、引言 1.编写目的 本文档…

2023年度第四届全国大学生算法设计与编程挑战赛(春季赛)

目录 2023年度第四届全国大学生算法设计与编程挑战赛&#xff08;春季赛&#xff09;1、A2、Bx3、Cut4、Diff5、EchoN6、Farmer7、GcdGame8、HouseSub9、IMissYou!10、Jargonless 2023年度第四届全国大学生算法设计与编程挑战赛&#xff08;春季赛&#xff09; 1、A 题目描述…

【C++初阶】C/C++内存管理(没有对象的都进来看看吧~)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…