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. 教你在浏览器里做出EXCEL的效果

    在浏览器里做出EXCEL的效果,复制.粘贴.设置公式.双击编辑等效果,如果自己开发的话,比较麻烦,建议使用成熟的插件.这里介绍使用智表ZCELL插件,实现用户快捷操作. 首先下载插件,引入到页面中,一 ...

  2. yum下载安装redis

    有时需要离线安装redis,所以需要redis离线安装包,不同的centos版本和redis版本,依赖包不同,本例中,centos: CentOS Linux release 7.0.1406 (Co ...

  3. random使用方法

    random.random() 没有参数,选择0到1之间的随机浮点数 random.uniform(a, b) 生成指定范围内的随机浮点数如果a.b哪个大那个小都没关系,生成的都是在小的与大的之间的随 ...

  4. VSCode 配置并使用less

    1.安装node.js 2.安装less npm install less -g 3.安装VS插件 Easy LESS 4.编辑保存.less文件,会在对应的目录下生成对应的.css文件

  5. Windows API方式直接调用C#的DLL,支持多音字转拼音、Gzip解压缩、公式计算(VBA、C++、VB、Delphi甚至java都可以)

    原始链接 https://www.cnblogs.com/Charltsing/p/DllExport.html 这两年,我在VBA应用方面一直有几大痛点:1.多音字转拼音:2.64位下的GZIP解压 ...

  6. 3 Eclipse 查看不了源码

    Eclipse 查看源码时,报source not found问题,经查资料,需要配置环境变量才能查看到. 在用户变量或者系统变量下,配置CLASSPATH,值为JDK的lib路径:D:\Progra ...

  7. 【调试工具】tcpdump

    [tcpdump]https://linux.cn/article-10191-1.html

  8. React Native & Android & iOS & APK

    React Native & Android & iOS & APK https://play.google.com/apps/publish/signup/ $ 25 bui ...

  9. ElementUI DatePicker 日期选择器控制选择时间范围

    选择今天以及今天之后的日期 <el-date-picker v-model="value1" type="date" placeholder=" ...

  10. 关于【jq插件开发】

    很详细,原文链接:https://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html#commentform和https://www.cnblogs ...