| | |
| | | |
| | | @Service |
| | | public class VehiclePositionService { |
| | | |
| | | |
| | | @Resource |
| | | private MongoTemplate mongoTemplate; |
| | | |
| | | |
| | | /** |
| | | * 查询附近指定距离内且状态正常的车辆 |
| | | * @param longitude 经度 |
| | |
| | | public List<VehiclePosition> findAvailableVehiclesNearby(double longitude, |
| | | double latitude, |
| | | double distanceInMeters,int num) { |
| | | // 创建查询点 |
| | | Point referencePoint = new Point(longitude, latitude); |
| | | |
| | | // 设置最大距离(MongoDB使用公里或米,这里转换为公里) |
| | | distanceInMeters = distanceInMeters / 1000; |
| | | try { |
| | | // 创建查询点 |
| | | Point referencePoint = new Point(longitude, latitude); |
| | | |
| | | // 构建查询条件 |
| | | Query query = new Query(); |
| | | query.addCriteria(Criteria.where("point") |
| | | .near(referencePoint) |
| | | .maxDistance(distanceInMeters)); |
| | | query.addCriteria(Criteria.where("status").is(1)); // 运营中 |
| | | query.addCriteria(Criteria.where("state").is(0)); // 空闲中 |
| | | |
| | | // 可以添加排序,按距离排序 |
| | | query.with(Sort.by(Sort.Direction.ASC, "point")); |
| | | |
| | | // // 可以限制返回数量 |
| | | // query.limit(num); |
| | | |
| | | return mongoTemplate.find(query, VehiclePosition.class); |
| | | // 构建查询条件 |
| | | Query query = new Query(); |
| | | |
| | | // 地理位置查询 |
| | | query.addCriteria(Criteria.where("point") |
| | | .near(referencePoint) |
| | | .maxDistance(distanceInMeters)); |
| | | |
| | | query.with(Sort.by(Sort.Direction.ASC, "point")); |
| | | |
| | | return mongoTemplate.find(query, VehiclePosition.class); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | |