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

之前在mybatis中的写法:

/**
 * @author zengwei
 * @email 1014483974@qq.com
 * @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)

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

/**
 * @author zengwei
 * @email 1014483974@qq.com
 * @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());

}

整理的靠谱的软件试玩平台,已亲测能提现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值