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-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpGeoQueryEntityServiceImpl.java |   66 ++++++++++++++++++--------------
 1 files changed, 37 insertions(+), 29 deletions(-)

diff --git a/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpGeoQueryEntityServiceImpl.java b/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpGeoQueryEntityServiceImpl.java
index 6db288e..e084621 100644
--- a/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpGeoQueryEntityServiceImpl.java
+++ b/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpGeoQueryEntityServiceImpl.java
@@ -5,10 +5,9 @@
 import com.xiaopeng.itinerary.repository.XpGeoQueryEntityRepository;
 import com.xiaopeng.itinerary.service.IXpGeoQueryEntityService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.geo.GeoResults;
-import org.springframework.data.geo.Metrics;
-import org.springframework.data.geo.Point;
+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;
@@ -52,36 +51,45 @@
         Long startTime = calendar.getTime().getTime();
 
         // 1. 创建查询点
-        Point referencePoint = new Point(longitude, latitude);
+//        Point referencePoint = new Point(longitude, latitude);
+//
+//        // 2. 构建 NearQuery - 完全使用 NearQuery 的 API
+//        NearQuery nearQuery = NearQuery.near(referencePoint, Metrics.KILOMETERS)
+//                .maxDistance(0.5)  // 转成公里
+//                .spherical(true);
+//
+//
+//        // 3.时间>startTime time = time参数
+//        // 3. 创建额外的查询条件
+//        Query query = new Query();
+//        query.addCriteria(Criteria.where("timestamp").gte(startTime));
+//        query.addCriteria(Criteria.where("time").is(time));
+//
+//        // 将 NearQuery 和额外的查询条件合并
+//        nearQuery.query(query);
+//
+//
+//        // 4. 执行查询 - 明确指定集合名
+//        GeoResults<XpGeoQueryEntity> geoResults = mongoTemplate.geoNear(nearQuery, XpGeoQueryEntity.class);
+//
+//        // 5. 提取结果
+//        return geoResults.getContent().stream()
+//                .map(geoResult -> geoResult.getContent())
+//                .collect(Collectors.toList());
 
-        // 2. 构建 NearQuery - 完全使用 NearQuery 的 API
-        NearQuery nearQuery = NearQuery.near(referencePoint, Metrics.KILOMETERS)
-                .maxDistance(0.5)  // 转成公里
-                .spherical(true);
-
-
-        // 3.时间>startTime time = time参数
-        // 3. 创建额外的查询条件
-        Query query = new Query();
+        //找到中心点
+        GeoJsonPoint geoJsonPoint = new GeoJsonPoint(longitude, latitude);
+        //构造半径
+        Distance distanceR = new Distance(5, Metrics.KILOMETERS);
+        //画圆
+        Circle circle = new Circle(geoJsonPoint, distanceR);
+        // 构造query对象
+        Query query = Query.query(Criteria.where("location").withinSphere(circle));
         query.addCriteria(Criteria.where("timestamp").gte(startTime));
         query.addCriteria(Criteria.where("time").is(time));
+        List<XpGeoQueryEntity> driverPositions = mongoTemplate.find(query, XpGeoQueryEntity.class);
 
-        // 将 NearQuery 和额外的查询条件合并
-        nearQuery.query(query);
-
-
-        // 4. 执行查询 - 明确指定集合名
-        GeoResults<XpGeoQueryEntity> geoResults = mongoTemplate.geoNear(
-                nearQuery,
-                XpGeoQueryEntity.class,
-                "xp_geo_query_entity"  // 明确指定集合名,避免映射错误
-        );
-
-        // 5. 提取结果
-        return geoResults.getContent().stream()
-                .map(geoResult -> geoResult.getContent())
-                .collect(Collectors.toList());
-
+        return driverPositions;
     }
 
     /**

--
Gitblit v1.7.1