From a6f0b69caf5c1913b6fec8b94d2454b33d15d649 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期六, 07 三月 2026 21:00:56 +0800
Subject: [PATCH] 修改mongodb查询
---
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpGeoQueryEntityServiceImpl.java | 75 +++++++++++++++++++++----------------
1 files changed, 42 insertions(+), 33 deletions(-)
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpGeoQueryEntityServiceImpl.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpGeoQueryEntityServiceImpl.java
index 3740056..1b5f6b9 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpGeoQueryEntityServiceImpl.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpGeoQueryEntityServiceImpl.java
@@ -5,11 +5,9 @@
import com.xiaopeng.operation.repository.XpGeoQueryEntityRepository;
import com.xiaopeng.operation.service.IXpGeoQueryEntityService;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.geo.Distance;
-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,37 +50,48 @@
calendar.add(Calendar.DAY_OF_YEAR, -7);
Long startTime = calendar.getTime().getTime();
- // 1. 创建查询点
- 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();
+// // 1. 创建查询点
+// 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,
+// "xp_geo_query_entity" // 明确指定集合名,避免映射错误
+// );
+//
+// // 5. 提取结果
+// return geoResults.getContent().stream()
+// .map(geoResult -> geoResult.getContent())
+// .collect(Collectors.toList());
+ //找到中心点
+ GeoJsonPoint geoJsonPoint = new GeoJsonPoint(longitude, latitude);
+ //构造半径
+ Distance distanceR = new Distance(0.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));
-
- // 将 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());
-
+ List<XpGeoQueryEntity> xpGeoQueryEntities = mongoTemplate.find(query, XpGeoQueryEntity.class);
+ return xpGeoQueryEntities;
}
/**
--
Gitblit v1.7.1