QueryDSL根据经纬度获取附近的地点或人

之前在mybatis中的写法:

/**

 * @author zengwei

 * @email [email protected]

 * @date 2020/7/23

 */

ROUND(6378.138*2*ASIN(SQRT(POW(SIN((#{lat}*PI()/180-`lat`*PI()/180)/2),2)+COS(#{lat}*PI()/180)*COS(`lat`*PI()/180)*POW(SIN((#{lng}*PI()/180-`lng`*PI()/180)/2),2)))*1000)

【能日赚30的软件试玩平台,亲测能提现】

现在公司用的是QueryDSL,写法和之前不一样,这里做个记录;

/**

 * @author zengwei

 * @email [email protected]

 * @date 2020/7/23

 */

public JPAQuery<UserDetails> findAllQuery(UserQueryParam param) {



    QUserDTO qu = QUserDTO.userDTO;

    

    NumberExpression<Double> distance = acos(sin(radians(Expressions.constant(param.getLatitude())))

                .multiply(sin(radians(qu.latitude)))

                .add(cos(radians(Expressions.constant(param.getLatitude())))

                        .multiply(cos(radians(qu.latitude)))

                        .multiply(cos(radians(Expressions.constant(param.getLongitude())).subtract(radians(qu.longitude))))

                )).multiply(6371);

    

    JPAQuery jpaQuery = jpaQueryFactory.select(Projections.bean(UserDetails.class,

                        ql.id, ql.username, distance.as("distance")))

                        .from(qu).orderBy(distance.asc());



}

猜你喜欢

转载自www.cnblogs.com/shiqiboy3974/p/13374891.html