From 2800fa4f32f3900509cb4d6eefaf2bfaf54efdd7 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Mon, 21 Apr 2025 18:29:09 +0800
Subject: [PATCH] fix: 天气显示

---
 src/utils/cesium/mapUtil.js |   33 +++++++++++++++++++++++++++++++++
 1 files changed, 33 insertions(+), 0 deletions(-)

diff --git a/src/utils/cesium/mapUtil.js b/src/utils/cesium/mapUtil.js
index 176ecca..e0230e2 100644
--- a/src/utils/cesium/mapUtil.js
+++ b/src/utils/cesium/mapUtil.js
@@ -347,3 +347,36 @@
 		return true
 	}
 }
+
+/**
+ * 飞到中心点并且所有点在可视范围
+ * @param lngLatArr
+ * @param viewer
+ * @param rangeMultiple 范围倍数越大飞的越高默认2
+ */
+export function flyVisual(lngLatArr,viewer,rangeMultiple = 2) {
+	if (!Array.isArray(lngLatArr) || lngLatArr.length === 0) return
+	const positions = lngLatArr.map(([lon, lat]) =>
+		Cesium.Cartesian3.fromDegrees(Number(lon), Number(lat))
+	)
+	// 计算包围盒 BoundingSphere(所有点的外接球)
+	const boundingSphere = Cesium.BoundingSphere.fromPoints(positions)
+	viewer.camera.flyToBoundingSphere(boundingSphere, {
+		duration: 0,
+		offset: new Cesium.HeadingPitchRange(0, 0, boundingSphere.radius * rangeMultiple),
+	})
+}
+
+// 获取视口地图中心点
+export function getMapCenterPoint(viewer) {
+	const centerResult = viewer.camera.pickEllipsoid(
+		new Cesium.Cartesian2(
+			viewer.canvas.clientWidth / 2,
+			viewer.canvas.clientHeight / 2
+		)
+	);
+	const curPosition = Cesium.Ellipsoid.WGS84.cartesianToCartographic(centerResult);
+	const longitude = (curPosition.longitude * 180) / Math.PI;
+	const latitude = (curPosition.latitude * 180) / Math.PI;
+	return { longitude, latitude };
+}

--
Gitblit v1.9.3