From 3e64bca8c8133298f242224f52b3d5f1278f68a6 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 04 三月 2026 16:00:04 +0800
Subject: [PATCH] 修改围栏查询及其他mongodb查询
---
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/mango/VehiclePositionService.java | 56 ++++++++++++++++++++++++++++++++------------------------
1 files changed, 32 insertions(+), 24 deletions(-)
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/mango/VehiclePositionService.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/mango/VehiclePositionService.java
index 5fc94c8..fed8f2a 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/mango/VehiclePositionService.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/mango/VehiclePositionService.java
@@ -2,11 +2,9 @@
import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
import org.springframework.data.domain.Sort;
-import org.springframework.data.geo.GeoResults;
-import org.springframework.data.geo.Point;
-import org.springframework.data.geo.Distance;
-import org.springframework.data.geo.Metrics;
+import org.springframework.data.geo.*;
import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.NearQuery;
import org.springframework.data.mongodb.core.query.Query;
@@ -33,27 +31,37 @@
double latitude,
double distanceInMeters,int num) {
try {
- // 1. 创建查询点
- Point referencePoint = new Point(longitude, latitude);
+// // 1. 创建查询点
+// Point referencePoint = new Point(longitude, latitude);
+//
+// // 2. 构建 NearQuery - 完全使用 NearQuery 的 API
+// NearQuery nearQuery = NearQuery.near(referencePoint, Metrics.KILOMETERS)
+// .maxDistance(distanceInMeters / 1000) // 转成公里
+// .spherical(true);
+//
+//
+// // 4. 执行查询 - 明确指定集合名
+// GeoResults<VehiclePosition> geoResults = mongoTemplate.geoNear(
+// nearQuery,
+// VehiclePosition.class,
+// "vehicle_position" // 明确指定集合名,避免映射错误
+// );
+//
+// // 5. 提取结果
+// return geoResults.getContent().stream()
+// .map(geoResult -> geoResult.getContent())
+// .collect(Collectors.toList());
- // 2. 构建 NearQuery - 完全使用 NearQuery 的 API
- NearQuery nearQuery = NearQuery.near(referencePoint, Metrics.KILOMETERS)
- .maxDistance(distanceInMeters / 1000) // 转成公里
- .spherical(true);
-
-
- // 4. 执行查询 - 明确指定集合名
- GeoResults<VehiclePosition> geoResults = mongoTemplate.geoNear(
- nearQuery,
- VehiclePosition.class,
- "vehicle_position" // 明确指定集合名,避免映射错误
- );
-
- // 5. 提取结果
- return geoResults.getContent().stream()
- .map(geoResult -> geoResult.getContent())
- .collect(Collectors.toList());
-
+ //找到中心点
+ GeoJsonPoint geoJsonPoint = new GeoJsonPoint(longitude, latitude);
+ //构造半径
+ Distance distanceR = new Distance(distanceInMeters / 1000, Metrics.KILOMETERS);
+ //画圆
+ Circle circle = new Circle(geoJsonPoint, distanceR);
+ // 构造query对象
+ Query query = Query.query(Criteria.where("point").withinSphere(circle));
+ List<VehiclePosition> vehiclePositions = mongoTemplate.find(query, VehiclePosition.class);
+ return vehiclePositions;
} catch (Exception e) {
e.printStackTrace();
return new ArrayList<>();
--
Gitblit v1.7.1