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}
相关推荐
Hopebearer_2 小时前
页面突然只剩 DOM?一次静态资源版本错配排查
前端·部署
抱抱宝3 小时前
Agent-study项目教程(03):手写 Mini-ReAct Agent(不依赖框架)
javascript·人工智能·gpt·react.js·prompt·agent
东风破_3 小时前
ESLint 是什么?为什么你的项目需要它?
前端·后端·代码规范
用户938515635073 小时前
Next.js 笔记系统(二):Redis 数据服务与侧边栏组件拆分实战
javascript·全栈
圣殿骑士-Khtangc4 小时前
Go字符串高效拼接性能对比与底层原理分析
服务器·前端·golang
BigTopOne5 小时前
【ijkplayer】 硬解码流程
前端
kyriewen6 小时前
DeepSeek Harness开源第一天我就上手了——和Claude Code的差距比想象中大
前端·ai编程·deepseek
捡田螺的小男孩6 小时前
什么是 Skill?手把手带你写一个简单有用的 Skill!
前端·后端·程序员
IT_陈寒6 小时前
Redis集群这个坑,差点让我通宵
前端·人工智能·后端