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