From 7f6661cca40e3530111d628222fa25462022ec78 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期四, 04 九月 2025 18:25:36 +0800
Subject: [PATCH] 2025.9.4

---
 src/utils/map/calculate.js |   37 ++++++++++++++++++++++++++++++++++++-
 1 files changed, 36 insertions(+), 1 deletions(-)

diff --git a/src/utils/map/calculate.js b/src/utils/map/calculate.js
index 01ffd8d..152837c 100644
--- a/src/utils/map/calculate.js
+++ b/src/utils/map/calculate.js
@@ -286,5 +286,40 @@
   gcj02towgs84,
 
   //浠嶨PS杞珮寰�
-  wgs84_To_Gcj02
+  wgs84_To_Gcj02,
+
+  /**
+   * 璁$畻涓�缁勭粡绾害鍧愭爣鐨勪腑蹇冪偣
+   * @param {Array} coordinates - 缁忕含搴︽暟缁勶紝鏍煎紡: [{lng: number, lat: number}, ...]
+   * @returns {Object} 涓績鐐瑰潗鏍� {lng: number, lat: number}
+   */
+  calculateCenterCoordinates(coordinates) {
+    if (coordinates.length === 0) return { lng: 0, lat: 0 };
+    if (coordinates.length === 1) return coordinates[0];
+
+    let x = 0,
+      y = 0,
+      z = 0;
+    coordinates.forEach((p) => {
+      const lng = (p.lng * Math.PI) / 180; // 缁忓害杞姬搴�
+      const lat = (p.lat * Math.PI) / 180; // 绾害杞姬搴�
+
+      // 杞崲涓轰笁缁村潗鏍�
+      x += Math.cos(lat) * Math.cos(lng);
+      y += Math.cos(lat) * Math.sin(lng);
+      z += Math.sin(lat);
+    });
+
+    // 鍙栧钩鍧囧��
+    const avgX = x / coordinates.length;
+    const avgY = y / coordinates.length;
+    const avgZ = z / coordinates.length;
+
+    // 杞崲鍥炵粡绾害
+    const lng = (Math.atan2(avgY, avgX) * 180) / Math.PI;
+    const hypotenuse = Math.sqrt(avgX ** 2 + avgY ** 2);
+    const lat = (Math.atan2(avgZ, hypotenuse) * 180) / Math.PI;
+
+    return { lng, lat };
+  }
 };

--
Gitblit v1.9.3