xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpGeoQueryEntityServiceImpl.java
@@ -5,12 +5,11 @@ import com.xiaopeng.itinerary.repository.XpGeoQueryEntityRepository; import com.xiaopeng.itinerary.service.IXpGeoQueryEntityService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.geo.Circle; 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; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Service; @@ -18,6 +17,7 @@ import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * MongoDB 地理查询服务实现类 xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/utils/mango/VehiclePositionService.java
File was deleted xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpMapController.java
@@ -3,8 +3,11 @@ import com.xiaopeng.api.dto.map.OrderRouteAndFareDto; import com.xiaopeng.api.dto.map.RouteAndFareDto; import com.xiaopeng.api.dto.operation.LonLatDto; import com.xiaopeng.api.feignClient.order.XpOrderClient; import com.xiaopeng.api.model.order.XpOrder; import com.xiaopeng.api.vo.map.PointByIpVo; import com.xiaopeng.api.vo.map.XpDistanceAndDurationVo; import com.xiaopeng.api.vo.operation.RouteVo; import com.xiaopeng.common.core.constant.CacheConstants; import com.xiaopeng.common.core.domain.R; @@ -13,6 +16,7 @@ import com.xiaopeng.map.mangodb.service.XpGeoFencingPolygonService; import com.xiaopeng.map.utils.AmapWalkingRouteUtil; import com.xiaopeng.map.utils.GDMapGeocodingUtil; import com.xiaopeng.map.utils.mangoUtils.MongoGeoFenceUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -25,6 +29,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @Slf4j @RestController 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; } /** 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<>();