| | |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | 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.Point; |
| | | 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.Query; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | |
| | | }) |
| | | public ResultUtil<List<Map<String, Object>>> queryNearbyCar(String lon, String lat){ |
| | | //mongodb查询附近5公里范围内的坐标 |
| | | Query query = Query.query(Criteria.where("point").nearSphere(new Point(Double.parseDouble(lon), Double.parseDouble(lat))).maxDistance(5000)); |
| | | //找到中心点 |
| | | GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.parseDouble(lon), Double.parseDouble(lat)); |
| | | //构造半径 |
| | | Distance distanceR = new Distance(5, Metrics.KILOMETERS); |
| | | //画圆 |
| | | Circle circle = new Circle(geoJsonPoint, distanceR); |
| | | // 构造query对象 |
| | | Query query = Query.query(Criteria.where("point").withinSphere(circle)); |
| | | List<DriverPosition> driverPositions = mongoTemplate.find(query, DriverPosition.class); |
| | | |
| | | log.info("地理空间检索出的数据:{}", JSON.toJSONString(driverPositions)); |
| | | List<Map<String, Object>> collect = new ArrayList<>(); |
| | | if(driverPositions.size() > 0){ |
| | |
| | | List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().in("id", driverIds) |
| | | .eq("authState", 2).eq("state", 2)); |
| | | collect = drivers.stream().map(driver -> { |
| | | String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId())); |
| | | String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + driver.getId()); |
| | | if(ToolUtil.isNotEmpty(value)){ |
| | | Optional<DriverPosition> driverPosition = driverPositions.stream().filter(position -> position.getDriverId().equals(driver.getId())).findFirst(); |
| | | Map<String, Object> map = new HashMap<>(); |