3) 1) "114.29000169038772583"
2) "38.01999994251037407"
2) 1)"天津"
2) "186.6937"
3) 1) "117.02000230550765991"
2) "39.0800000535766543"
你可以加上计数一来查找比较近的一个位置 。
3.基于redisgeo实战
大致的原理思路说完了,接下来就是实操了 。结合springboot应用我们应该如何做?
3.1 开发环境
需要具有geo特性的redis版本,这里我使用的是redis4 。另外我们客户端使用spring-boot-starter-data-redis 。这里我们会使用到使用对象 。
3.2 批量添加位置信息
第一步,我们需要将位置数据初始化到redis中 。在springdataredis中一个位置坐标(液化天然气,lat)可以封装到org 。spring框架 。数据 。geo 。要点对象中 。然后指定一个名称,就组成了一个位置geo信息redistemplate 。提供了批量添加位置信息的方法 。我们可以将章节2.1中的添加命令转换为下面的代码:
mapstring,pointpoints=newhashmap;
points.put("天津",newpoint(117.12,39.08));
points.put("石家庄",新点(114.29,38.02));
//redistemplate批量添加长狭潮道
redis模板 。边界城市:个位置.添加(分);
可以结合弹簧靴提供的applicationrunner接口来实现初始化,建议从mysql等数据库同步地理信息 。
@豆
publicapplicationrunnercacheactiveapprunner(redistemplatestring,stringredistemplate) {
返回参数- {
比较终字符串geo_ key=" cities:locs
//清理缓存
redistemplate 。删除(geo_ key);
//建议从关系型数据库同步地理信息
mapstring,pointpoints=newhashmap;
points.put("天津",newpoint(117.12,39.08));
points.put("石家庄",新点(114.29,38.02));
//redistemplate批量添加地理定位
boundgeooperationsstring,stringgeoops=redistemplate 。boundgeoops(geo_ key);
geoops.add(点);
};
}
3.3 查询附近的特定位置
使用针对georadius命令也有封装:
地理位置半径(k键,内圆,地理坐标标准参数)
圆对象是封装覆盖的面积(图1),需要的要素为中心点坐标要点对象、半径(半径)、计量单位(公制),例如:
点点=新点(115.03,38.44);
公制公制=redisgeocommands.距离单位 。kumts
距离距离=新距离(200,公制);
圆圆=新圆(点,距离);
地理标准用来封装georadius的一些可选命令参数,参见章节2.2中的带门、计数、asc等,例如我们需要在返回结果中包含坐标、中心距离、由近到远排序的前5条数据:
redisgeocommands.地理社区标准参数=地理社区 。地理标准 。newgeoradiusargs 。includedistance 。包括坐标 。排序排序 。极限(限制);
然后执行半径方法就会拿到georesultsredisgeocommands.地理位置字符串封装的结果,我们对这个可迭代对象进行解析就可以拿到我们想要的数据:
georesultsredisgeocommands.geolocationstringradius=redistemplate 。opsforgeo 。半径(geo_stage,圆,args);
if(radius!=) {
liststagedtostagedtos=newarraylist;
半径 。foreach(地理定位地理结果-->
重新调用命令地理位置字符串内容=地理位置
georesult. getcontent;
//成员姓名如天津
stringname=content. getname;
//对应的经纬度坐标
pointpos=content. getpoint;
//到中心点的距离
distancedis=geolocationgeoresult. getdistance;
});
}
3.4删除元素
有时我们可能需要删除位置元素,但是redis的geo没有删除成员的命令 。但是因为它的底层是zset,我们可以借助zrem命令删除,对应的java代码是:
redistemplate. boundsetops(geo_ stage) 。移除(“天津”);
4.摘要
【搜索附近的人代码】,我们使用redis"sgeo功能来实现附近常见的地理信息查询需求,简单易用 。事实上,nosql,的另一个mongodb数据库,也可以使用 。在数据量较小的情况下,redis能够很好地满足需求 。如果数据量大,可以用mongodb.来实现,本文涉及的demo可以通过文末相关文章的链接来获得 。
- 宁波附近哪里好玩
- 怎么查全国高校名单
- 济南章丘附近有什么好玩的地方吗
- 电视锅子怎么超级搜索
- 屏幕镜像搜索不到电视
- 电视机怎么搜索台
- 和巅峰之作意思相近的成语
- 百度竞价恶意点击软件
- GTA5帮会怎么创建
- 哪些属于目录搜索引擎