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 经纬度按距离排序的更多相关文章

  1. Solr 空间搜索配置、按经纬度计算距离排序

    Solr 空间搜索配置 1. 在solr目录下的找到conf文件夹下的schema.xml. <fields> <!-- 在fields元素中添加如下代码 --> <fi ...

  2. mysql使用sql语句根据经纬度计算距离排序

    CREATE TABLE `locationpoint` ( `id` int(11) NOT NULL, `province` varchar(20) NOT NULL, `city` varcha ...

  3. Mysql 之根据经纬度按距离排序

    一.方式一 st_distance 计算的结果单位是度,需要乘111195(地球半径6371000*PI/180)是将值转化为米. SELECT *, (st_distance(point(lng,l ...

  4. 使用.Net+非关系型数据库MongoDB 实现LBS商家按距离排序_按离我最近排序

    .Net MongoDB LBS地理位置定位 开发过程,实现商家按距离排序 前言: 在使用美团点外卖,看电影,找好吃的时候,经常会注意到软件有一个按距离排序,找离我最近的商家,心中有一些疑问,.Net ...

  5. entity framework 实现按照距离排序

    在做项目时,经常会遇到“离我最近”这种需求.顾名思义,它需要根据用户的经纬度和事物的经纬度计算距离,然后进行排序,最后分页(当然这些操作要在数据库中进行,否则就变成假分页了). 我们通常可以用sql语 ...

  6. php+高德地图webapi 高德jsapi 实现 当前位置与目标位置距离 并按照距离排序(坐标逆转换)

    <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak='自己 ...

  7. 【Python学习】指定两点地理位置经纬度的距离计算

    指定两点地理位置经纬度的距离计算 #coding=utf-8 from math import * # input Lat_A 纬度A # input Lng_A 经度A # input Lat_B ...

  8. iOS根据2个经纬度计算距离

    #pragma mark - calculate distance 根据2个经纬度计算距离 #define PI 3.14159265358979323 +(double) CalculationDi ...

  9. java工具类(六)根据经纬度计算距离

    Java实现根据经纬度计算距离 在项目开发过程中,需要根据两地经纬度坐标计算两地间距离,所用的工具类如下: Demo1: public static double getDistatce(double ...

随机推荐

  1. Python递归函数

    参考: https://pythonspot.com/recursion/ https://www.python-course.eu/recursive_functions.php 一.递归函数两大要 ...

  2. 迁移FRS至DFSR SYSVOL

    截至2017年6月20日,Windows 2016 RS1系统为最后一版支持FRS,后续版本将不再包含该功能,详细见 https://support.microsoft.com/en-us/help/ ...

  3. 【spring源码分析】IOC容器初始化(八)

    前言:在上文bean加载过程中还要一个非常重要的方法没有分析createBean,该方法非常重要,因此特意提出来单独分析. createBean方法定义在AbstractBeanFactory中: 该 ...

  4. MySQL 常用语句总结

    用一个表更新另一个表 UPDATE table1 t1, table2 t2 SET t1.field1 = t2.field1, t1.field2 = t2.field2 WHERE t1.fie ...

  5. Pyinstaller 打包exe

    安装 ​ pip insatll Pyinstaller 参数 pyinstaller -Fw main.py 参数 概述 -F,-onefile 打包一个单个文件,如果你的代码都写在一个.py文件的 ...

  6. MongoDB系列:五、MongoDB Driver使用正确的姿势连接复制集

    MongoDB复制集(Replica Set)通过存储多份数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用.但需要注意的时,连接副本集的姿势如果不对,服务高可用将不复存在. 使用复 ...

  7. [转]html5监听任何App自带返回键javascript事件

    1.前言 如今h5新特性.新标签.新规范等有很多,而且正在不断完善中,各大浏览器商对它们的支持,也是相当给力.作为前端程序员,我觉得我们还是有必要积极关注并勇敢地加以实践.接下来我将和各位分享一个特别 ...

  8. React Navigation & React Native & React Native Navigation

    React Navigation & React Native & React Native Navigation React Navigation https://facebook. ...

  9. think

    https://github.com/crossoverJie/Java-Interview Java-Interview https://github.com/aalansehaiyang/tech ...

  10. 关于TVWALL 通过AS300获取状态连接失败

    昨天晚会突然之间频繁出现tvwall视频软件,断开AS300管理软件的故障 发现AS300当中的cms服务进程,占用内存250M左右,一般情况下估计就是50M左右,增长了不少 无奈之下,只有重启AS3 ...