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}
相关推荐
郑州光合科技余经理1 小时前
本地生活服务系统:成品模块和定制接口怎么划界
java·前端·人工智能·后端·系统架构·php·ai编程
平头哥~5 小时前
Day 07 _ 那条 1px 的线,为什么在手机上忽粗忽细
前端·css·样式·学习资料
小江的记录本5 小时前
【CSS】CSS 动画:transition、animation、transform、CSS3 新特性(附《思维导图》)
前端·css·安全·spring·前端框架·css3·动画
circuitsosk5 小时前
任务规划器的三种范式对比:ReAct、Plan-and-Execute 与 Tree-of-Thought 在真实业务中的取舍
前端·javascript·python·react.js·llm·ai agent
hzxpaipai6 小时前
企业官网技术架构拆解:前端、后台、数据库、服务器如何协同
前端·数据库·架构
小磊哥er7 小时前
深入解构Claude Code - 第 12 篇 · 整体串起来
javascript·ai编程
小磊哥er7 小时前
深入解构Claude Code - 第 11 篇 · 工程上的讲究
javascript·ai编程
深念Y9 小时前
Lenovo XiaoXinAir 14 — 性能模式切换
前端·网络
计算机魔术师9 小时前
Meta突然杀进第一梯队:一个新模型,把AI推理成本打下来8倍
前端