From 87e19b5a396ac8fed6a551828b87d263f6425c31 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期四, 16 十月 2025 10:26:12 +0800
Subject: [PATCH] 2025.10.16 修改季度报告生成逻辑
---
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