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. C# 得到EXCEL表格中的有效行数和列数 中 CurrentRegion 的有效范围

  2. RabbitMQ消息模型概览(简明教程)

    小菜最近用到RabbitMQ,由于之前了解过其他消息中间件,算是有些基础,所以随手从网上搜了几篇文章,准备大概了解下RabbitMQ的消息模型,没想到网上文章千篇一律,写一大堆内容,就是说不明白到底怎 ...

  3. maven-3.5.3通过eclipse打包问题(1)

    1.maven版本:3.5.3 2.ide: Eclipse Oxygen.2 (4.7.2)(Version: 3.9.2.RELEASE) 3. 配置ide 错误原因: 解决方法以及运行结果:

  4. cent os 7 与cent os 6区别

    原文地址:https://www.cnblogs.com/Csir/p/6746667.html 前言 centos7与6之间最大的差别就是初始化技术的不同,7采用的初始化技术是Systemd,并行的 ...

  5. jupyter notebook修改默认路径和浏览器

    1.jupyter notebook --generate-config 2.修改jupyter_notebook_config.py配置文件 3.修改默认路径: c.NotebookApp.note ...

  6. Recovering Low-Rank Matrices From Few Coefficients In Any Basis

    目录 引 主要结果 定理2,3 定理4 直观解释 Recovering Low-Rank Matrices From Few Coefficients In Any Basis-David Gross ...

  7. VS编程,C#串口通讯,通过串口读取数据的一种方法

    一.可能需要的软件:1.虚拟串口vspd(Virtual Serial Port Driver,用来在电脑上虚拟出一对串口,模拟通讯. 2.友善串口调试助手,用来发送.读取数据. 二.思路1.查询本机 ...

  8. 开发中,IDEA常用的快捷键

    Settings文件: Ctrl+Alt+S 搜索文件:Ctrl+Shift+N 全文搜索: Ctrl+Shift+F 全文替换: Ctrl+Shift+R 搜索内容: Ctrl+F 内容替换: Ct ...

  9. Go 目录

    Go语言 go语言初识 基本数据类型和操作符 字符串,时间,流程控制,函数 GOROOT,GOPATH,GOBIN,project目录 数组和切片 指针和内置函数 排序和查找 map

  10. CentOS系统版本的查看方法

    CentOS系统版本的查看方法 查看操作系统版本 1 [root@aliyun ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noa ...