CesiumJS 笔记 - 获取容器中心点、Cartesian3 clone 方法、修改 Cartesian3 对象的高度

CesiumJS

  • CesiumJS 是一个开源的 JavaScript 库,它用于在网页中创建和控制 3D 地球仪(地图)
  1. CesiumJS 官网:https://www.cesium.com/

  2. CesiumJS 下载地址:https://www.cesium.com/platform/cesiumjs/

  3. CesiumJS API 文档:https://cesium.com/learn/cesiumjs/ref-doc/index.html


一、获取容器中心点

1、演示
html 复制代码
<!doctype html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>Scene - 获取容器中心点</title>
		<link rel="stylesheet" href="../js/Cesium-1.112/Build/Cesium/Widgets/widgets.css" />
		<style>
			* {
				margin: 0;
				padding: 0;
				box-sizing: border-box;
			}

			html,
			body {
				width: 100%;
				height: 100%;
			}

			.box {
				width: 200px;
				height: 200px;
				background-color: green;
			}

			#container {
				width: 500px;
				height: 500px;
			}
		</style>
	</head>

	<body>
		<div class="box"></div>
		<div id="container"></div>
	</body>

	<script src="../js/Cesium-1.112/Build/Cesium/Cesium.js"></script>
	<script>
		const viewer = new Cesium.Viewer("container");

		const canvas = viewer.scene.canvas;
		const rect = canvas.getBoundingClientRect();
		console.log("X:", rect.left + rect.width / 2);
		console.log("Y:", rect.top + rect.height / 2);
	</script>
</html>
复制代码
# 输出结果

X: 250
Y: 450
2、解读
js 复制代码
const canvas = viewer.scene.canvas;
  1. viewer 是 Cesium 三维地球的实例对象

  2. .scene 是场景管理器,包含所有 3D 内容

  3. .canvas 返回底层的 HTML <canvas> 元素,即 WebGL 渲染 3D 图形的画布

js 复制代码
const rect = canvas.getBoundingClientRect();
  • 这是一个原生 DOM 方法,返回值是一个 DOMRect 对象,包含相对于浏览器视口(viewport) 的坐标信息
  1. left / top:画布左上角距视口左上角的偏移量,单位为像素

  2. right / bottom:画布右下角坐标

  3. width / height:画布实际渲染宽高

  4. x / y:同 left / top

3、注意事项
  • getBoundingClientRect 方法如果在视图未加载完成时调用,可能会得到错误的值

二、Cartesian3 clone 方法

1、基本介绍
js 复制代码
clone(result) → Cartesian3
  1. clone 方法用于创建一个与当前对象值完全相同的新 Cartesian3 实例

  2. 参数 result 是可选的,如果传入一个现有的 Cartesian3 对象,结果会写入这个对象并返回,以复用内存;如果不传,会创建一个全新的对象

2、演示
js 复制代码
const original = new Cesium.Cartesian3(1.0, 2.0, 3.0);
const result = original.clone();

console.log(original);
console.log(result);
console.log(original === result);
复制代码
# 输出结果

et {x: 1, y: 2, z: 3}
et {x: 1, y: 2, z: 3}
false
js 复制代码
const original = new Cesium.Cartesian3(1.0, 2.0, 3.0);
const result = new Cesium.Cartesian3(10.0, 20.0, 30.0);

const newPosition = original.clone(result);

console.log(original);
console.log(result);
console.log(newPosition);

console.log(newPosition === original);
console.log(newPosition === result);
复制代码
# 输出结果

et {x: 1, y: 2, z: 3}
et {x: 1, y: 2, z: 3}
et {x: 1, y: 2, z: 3}
false
true

三、修改 Cartesian3 对象的高度

1、基本介绍
  • 不能直接改 Cartesian3 对象。需要先转成地理坐标(Cartographic),修改高度,再转回 Cartesian3
2、演示
js 复制代码
const original = new Cesium.Cartesian3(1.0, 2.0, 3.0);

const cartographic = Cesium.Cartographic.fromCartesian(original);

cartographic.height = cartographic.height + 1000;

const newPosition = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, cartographic.height);

console.log(original);
console.log(newPosition);
复制代码
# 输出结果

et {x: 1, y: 2, z: 3}
et {x: 7613.4815126920585, y: 15226.963025384117, z: -11396.224708943628}
相关推荐
酷炫码神5 小时前
Day 1|HTML5:一个商城首页的骨架,从 DOCTYPE 到语义化
前端·html·html5
AI源码5 小时前
鲜花商城(HTML 版)
前端·html
hiahiahia1235 小时前
Message 和对话
服务器·前端·数据库
溪语流沙6 小时前
【Web全栈进阶】Composition API与组件通信:props深入、emit、插槽
前端·css·vue.js
ZoeLandia6 小时前
TypeScript 03:泛型与工具类型
前端·typescript
code_Bo6 小时前
从策划到上线:我和 AI 一起做了个微信记账小程序
前端·ai编程·cursor
Shirley~~6 小时前
Three.js加载Gltf模型并播放动画
前端·3d
Data analyse4566 小时前
Session超时与浏览器休眠的计时校验
大数据·前端·数据库·数据分析
星始流年6 小时前
AI 时代,软件程序员未来 10—15 年的职业前景
前端·后端·ai编程
猪猪拆迁队6 小时前
跨电脑复制共享-局域网直连踩坑
前端·后端·go