From 4f3466431b6ea9f16235a8021fca009b549f32e5 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 11 三月 2026 22:28:17 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java | 39 ++++++++++++++++++++++++++++-----------
1 files changed, 28 insertions(+), 11 deletions(-)
diff --git a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
index de03958..4e1b063 100644
--- a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
+++ b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
@@ -46,10 +46,7 @@
import javax.annotation.Resource;
import java.awt.geom.Point2D;
import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -729,14 +726,34 @@
* @return
*/
private org.locationtech.jts.geom.Point calculateCentroid(Coordinate[] coordinates) {
- GeometryFactory factory = new GeometryFactory();
- // 创建线性环 (LinearRing)
- LinearRing ring = factory.createLinearRing(coordinates);
- // 创建多边形 (Polygon)
- Polygon polygon = factory.createPolygon(ring);
- // 计算质心 (Centroid)
- org.locationtech.jts.geom.Point centroid = polygon.getCentroid();
+ // 1. 判空校验
+ if (coordinates == null || coordinates.length == 0) {
+ throw new ServiceException("坐标数组不能为空");
+ }
+ // 2. 过滤掉 null 坐标点
+ Coordinate[] validCoords = Arrays.stream(coordinates)
+ .filter(Objects::nonNull)
+ .toArray(Coordinate[]::new);
+
+ // 3. LinearRing 至少需要 4 个点(首尾相同),且必须闭合
+ if (validCoords.length < 4) {
+ throw new ServiceException("有效坐标点不足,至少需要4个点");
+ }
+
+ // 4. 确保首尾坐标相同(闭合)
+ Coordinate first = validCoords[0];
+ Coordinate last = validCoords[validCoords.length - 1];
+ if (!first.equals2D(last)) {
+ // 自动补上闭合点
+ validCoords = Arrays.copyOf(validCoords, validCoords.length + 1);
+ validCoords[validCoords.length - 1] = new Coordinate(first.x, first.y);
+ }
+
+ GeometryFactory factory = new GeometryFactory();
+ LinearRing ring = factory.createLinearRing(validCoords);
+ Polygon polygon = factory.createPolygon(ring);
+ org.locationtech.jts.geom.Point centroid = polygon.getCentroid();
System.out.println("中心点经度: " + centroid.getX());
System.out.println("中心点纬度: " + centroid.getY());
return centroid;
--
Gitblit v1.7.1