定位功能 显示好友距离 API


API 接口


/**

* 查询用户地理位置

*

* @param userId

* @return

*/

UserLocationVo queryByUserId(Long userId);

/**

* 根据位置搜索

*

* @param longitude 经度

* @param latitude 纬度

* @param distance 距离(米)

* @param page 页数

* @param pageSize 页面大小

*/

PageInfo queryUserFromLocation(Double longitude, Double latitude, Double distance, Integer page, Integer pageSize);





=============================================================



API IMPL


/**

* 查询用户的位置信息

*

* @param userId

* @return

*/

@Override

public UserLocationVo queryByUserId(Long userId) {

GetQuery getQuery = new GetQuery();

getQuery.setId(String.valueOf(userId));

UserLocation userLocation = this.elasticsearchTemplate.queryForObject(getQuery, UserLocation.class);

if(ObjectUtil.isNotEmpty(userLocation)){

return UserLocationVo.format(userLocation);

}

return null;

}

/**

* 根据位置搜索

*

* @param longitude 经度

* @param latitude 纬度

* @param distance 距离(米)

* @param page 页数

* @param pageSize 页面大小

*/

@Override

public PageInfo queryUserFromLocation(Double longitude, Double latitude, Double distance, Integer page, Integer pageSize) {

PageInfo pageInfo = new PageInfo<>();

pageInfo.setPageNum(page);

pageInfo.setPageSize(pageSize);

String fieldName = "location";

//实现了SearchQuery接口,构造分页、排序

NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder();

//分页

PageRequest pageRequest = PageRequest.of(page - 1, pageSize);

searchQueryBuilder.withPageable(pageRequest);

BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();

//以一个点为中心,指定范围查询

GeoDistanceQueryBuilder geoDistanceQueryBuilder = new GeoDistanceQueryBuilder(fieldName);

//中心点

geoDistanceQueryBuilder.point(new GeoPoint(latitude, longitude));

//距离(画圆的半径)单位:公里

geoDistanceQueryBuilder.distance(distance / 1000, DistanceUnit.KILOMETERS);

boolQueryBuilder.must(geoDistanceQueryBuilder);

searchQueryBuilder.withQuery(boolQueryBuilder);

//排序,由近到远排序

GeoDistanceSortBuilder geoDistanceSortBuilder = new GeoDistanceSortBuilder(fieldName, latitude, longitude);

geoDistanceSortBuilder.order(SortOrder.ASC); //正序排序

geoDistanceSortBuilder.unit(DistanceUnit.KILOMETERS); //设置单位

searchQueryBuilder.withSort(geoDistanceSortBuilder);

AggregatedPage aggregatedPage = this.elasticsearchTemplate.queryForPage(searchQueryBuilder.build(), UserLocation.class);

if(CollUtil.isEmpty(aggregatedPage.getContent())){

return pageInfo;

}

pageInfo.setRecords(UserLocationVo.formatToList(aggregatedPage.getContent()));

return pageInfo;

}

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章