Spring ElasticsearchTemplate 经纬度按距离排序
es实体,用 @GeoPointField 注解,值为:中间逗号隔开,如 29.477000,119.278536(经度, 维度)
@Document(indexName = "v_intelligent_store")
@Data
public class IntelligentStore implements Serializable {
private String id; /** 体验店名称 */
private String name;
/** 联系人姓名 */
private String contactsName;
/** 联系手机号 */
private String phoneNumber;
/** 联系电话 */
private String telePhone;
/** 场景分类 */
private String category;
/** 开店时间 */
private LocalDate foundTime;
/** 营业时间 */
private String openHours;
/** 主营产品 */
private String mainProduct;
/** 店铺面积 */
private Double shopSize;
/** xx省xx市xx区 */
private String area;
/** 店铺面积 */
private String detailAddress;
/** 经维度,中间逗号隔开 */
@GeoPointField private String location;
...
}
接口:
/**
* 搜索附近的体验店
*
* @param lat 经度
* @param lon 维度
* @param distance 距离
* @param pageable
* @return
*/
Page<IntelligentStoreDTO> findAllByLocaltion(
double lat, double lon, double distance, Pageable pageable);
实现:
@Override
public Page<IntelligentStoreDTO> findAllByLocaltion(
double lat, double lon, double distance, Pageable pageable) { GeoDistanceQueryBuilder builder =
QueryBuilders.geoDistanceQuery("location")//查询字段
.point(lat, lon)//设置经纬度
.distance(distance, DistanceUnit.METERS)//设置距离和单位(米)
.geoDistance(GeoDistance.ARC);
GeoDistanceSortBuilder sortBuilder =
SortBuilders.geoDistanceSort("location")
.point(lat, lon)
.unit(DistanceUnit.METERS)
.order(SortOrder.ASC);//排序方式
//构造查询条件
NativeSearchQueryBuilder nativeSearchQueryBuilder =
new NativeSearchQueryBuilder()
.withFilter(builder)
.withSort(sortBuilder)
.withPageable(pageable); Page<IntelligentStoreDTO> page =
elasticsearchTemplate.queryForPage(
nativeSearchQueryBuilder.build(), IntelligentStoreDTO.class);
return page;
}
查询10公里范围数据,返回:
{
"code": "0",
"msg": "成功",
"result": [
{
"id": "5af2c615e15b402c54c390b9",
"name": "智哪儿体验店1",
"area": "浙江省杭州市余杭区",
"detailAddress": "梦想小镇",
"location": "30.292227,120.004870",
"distance": "13", //距离目标位置多少米
"createTime": "2018-05-09 17:57:41",
"updateTime": "2018-05-09 17:57:41"
},
{
"id": "5af2c62ce15b402c54c390bc",
"name": "智哪儿体验店3",
"area": "浙江省杭州市余杭区",
"detailAddress": "仓前工业园",
"location": "30.282905,119.987661",
"distance": "1962",//距离目标位置多少米
"createTime": "2018-05-09 17:58:04",
"updateTime": "2018-05-09 17:58:04"
},
{
"id": "5af2c61fe15b402c54c390ba",
"name": "智哪儿体验店1",
"area": "浙江省杭州市余杭区",
"detailAddress": "中国移动杭州研发中心",
"location": "30.316513,120.021278",
"distance": "3111",//距离目标位置多少米
"createTime": "2018-05-09 17:57:51",
"updateTime": "2018-05-09 17:57:51"
},
{
"id": "5af2c626e15b402c54c390bb",
"name": "智哪儿体验店2",
"area": "浙江省杭州市余杭区",
"detailAddress": "杭州师范大学",
"location": "30.241073,119.949798",
"distance": "7774",//距离目标位置多少米
"createTime": "2018-05-09 17:57:58",
"updateTime": "2018-05-09 17:57:58"
},
{
"id": "5b0fbe41d601800007db438c",
"name": "社会主义学院智能锁店",
"contactsName": "健康的风景",
"area": "浙江省杭州市余杭区",
"detailAddress": "浙江省社会主义学院",
"location": "30.291823,120.138587",
"distance": "12818",//距离目标位置多少米
"createTime": "2018-05-31 17:20:01",
"updateTime": "2018-05-31 17:21:06"
}
]
}
Spring ElasticsearchTemplate 经纬度按距离排序的更多相关文章
- Solr 空间搜索配置、按经纬度计算距离排序
Solr 空间搜索配置 1. 在solr目录下的找到conf文件夹下的schema.xml. <fields> <!-- 在fields元素中添加如下代码 --> <fi ...
- mysql使用sql语句根据经纬度计算距离排序
CREATE TABLE `locationpoint` ( `id` int(11) NOT NULL, `province` varchar(20) NOT NULL, `city` varcha ...
- Mysql 之根据经纬度按距离排序
一.方式一 st_distance 计算的结果单位是度,需要乘111195(地球半径6371000*PI/180)是将值转化为米. SELECT *, (st_distance(point(lng,l ...
- 使用.Net+非关系型数据库MongoDB 实现LBS商家按距离排序_按离我最近排序
.Net MongoDB LBS地理位置定位 开发过程,实现商家按距离排序 前言: 在使用美团点外卖,看电影,找好吃的时候,经常会注意到软件有一个按距离排序,找离我最近的商家,心中有一些疑问,.Net ...
- entity framework 实现按照距离排序
在做项目时,经常会遇到“离我最近”这种需求.顾名思义,它需要根据用户的经纬度和事物的经纬度计算距离,然后进行排序,最后分页(当然这些操作要在数据库中进行,否则就变成假分页了). 我们通常可以用sql语 ...
- php+高德地图webapi 高德jsapi 实现 当前位置与目标位置距离 并按照距离排序(坐标逆转换)
<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak='自己 ...
- 【Python学习】指定两点地理位置经纬度的距离计算
指定两点地理位置经纬度的距离计算 #coding=utf-8 from math import * # input Lat_A 纬度A # input Lng_A 经度A # input Lat_B ...
- iOS根据2个经纬度计算距离
#pragma mark - calculate distance 根据2个经纬度计算距离 #define PI 3.14159265358979323 +(double) CalculationDi ...
- java工具类(六)根据经纬度计算距离
Java实现根据经纬度计算距离 在项目开发过程中,需要根据两地经纬度坐标计算两地间距离,所用的工具类如下: Demo1: public static double getDistatce(double ...
随机推荐
- liteos简介(一)
LiteOS是在2015华为网络大会上华为发布的敏捷网络3.0中的一个轻量级的物联网操作系统,LiteOS体积只有10KB级. 在Hi3559A中,liteos是用于Cortex-A53,用于处理MP ...
- [POI2015]PUS
嘟嘟嘟 这题只要往正确的方面想,就很简单. 首先,这是一道图论题! 想到这,这题就简单了.对于两个数\(i\)和\(j\),如果\(i\)比\(j\)大,就从\(i\)向\(j\)连边.然后如果图中存 ...
- [认证授权] 5.OIDC(OpenId Connect)身份认证(扩展部分)
在上一篇[认证授权] 4.OIDC(OpenId Connect)身份认证(核心部分)中解释了OIDC的核心部分的功能,即OIDC如何提供id token来用于认证.由于OIDC是一个协议族,如果只是 ...
- WPF效果(GIS三维续篇)
去年这个时候简单的摸索了一下三维的GIS相关的东西,也就是仅仅玩耍了一把,这次来点真正用的上的干货效果效果: 1.加载自定义百度样式的瓦片效果 2.加载自定义百度样式的缩放效果 3.快速手动进去咱的大 ...
- iOS 友盟错误分析-2019
友盟的错误分析越来越人性化了 前提集成了友盟统计,并打包的时候保留了.dSYM文件 先看看效果 可以看到bug显而易见的被发现了!那个文件夹,那一行代码 那么怎么才能这样呢 首先加入符号表,就是.dS ...
- springboot 与任务
异步任务.定时任务.邮件任务 一.异步任务 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在 处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用 多线程来 ...
- Mysql中的explain和desc
查询分析器 desc 和 explain 作用基本一样,explain速度快一点 explain 一条SQL语句出出现以下参数, 其中id,select_type,table 用于定位查询,表示本行参 ...
- 一道B树的题目---先记一下, 还没看到B树
D
- setData 和 直接赋值的区别
wxml: <view> <block wx:for="{{dataArray}}" wx:key="id"> <v-book b ...
- MDS
转载:https://blog.csdn.net/victoriaw/article/details/78500894 多维缩放(Multidimensional Scaling, MDS)是一组对象 ...