学校品牌建设,太原seo代理商,做的网站底部应该标注什么,godaddy上传网站概述
Geo就是Geolocation的简写形式#xff0c;代表地理坐标。在Redis中#xff0c;构造了能够存储地址坐标信息的一种数据结构#xff0c;帮助我们根据经纬度来检索数据。
命令行操作方法
GEOADD
可以用来添加一个或者多个地理坐标。 GEODIST
返回一个key中两个成员之…概述
Geo就是Geolocation的简写形式代表地理坐标。在Redis中构造了能够存储地址坐标信息的一种数据结构帮助我们根据经纬度来检索数据。
命令行操作方法
GEOADD
可以用来添加一个或者多个地理坐标。 GEODIST
返回一个key中两个成员之间的距离。 GEOHASH
将指定member的坐标转为哈希字符串形式返回。 GEOPOS
返回指定member的坐标。 GEORADIUS
指定圆心、半径找到该圆内包含的member。 GEOSEARCH
在指定范围内搜索member。最新的一个命令可以指定中心点的经纬度也可以使用member并且还可以指定搜索范围是圆形还是正方形。 StringRedisTemplate操作方法
add
用于添加地理坐标。 Resourceprivate StringRedisTemplate stringRedisTemplate;Testpublic void test(){Point point new Point(112.653652,37.809874);Long add this.stringRedisTemplate.opsForGeo().add(ShanXi, point, SXU);System.out.println(add);} radius
用来查找坐标 Resourceprivate StringRedisTemplate stringRedisTemplate;Test void test() {// 中心点Point point new Point(112.617734,37.797128);// 半径Distance radius new Distance(100, RedisGeoCommands.DistanceUnit.KILOMETERS);// 由中心点和半径组成的圆圈Circle circle new Circle(point, radius);// 获取值之后要带回来的参数RedisGeoCommands.GeoRadiusCommandArgs args RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance() // 包含距离.includeCoordinates() // 包含坐标.sortAscending(); // 升序// 进行查询GeoResultsRedisGeoCommands.GeoLocationString search this.stringRedisTemplate.opsForGeo().radius(ShanXi, circle, args);ListGeoResultRedisGeoCommands.GeoLocationString content search.getContent();if(content null || content.isEmpty()) {System.out.println(没有数据);}for (GeoResultRedisGeoCommands.GeoLocationString geoLocationGeoResult : content) {// 输出距离System.out.println(距离 geoLocationGeoResult.getDistance());RedisGeoCommands.GeoLocationString locationGeoResultContent geoLocationGeoResult.getContent();// 输出名称System.out.println(member locationGeoResultContent.getName());// 输出坐标System.out.println(坐标 locationGeoResultContent.getPoint());}}
search
和radius方法类似只不过search还可以查找矩形范围之内的坐标。 remove
删除操作 Resourceprivate StringRedisTemplate stringRedisTemplate;Test void test() {Long remove this.stringRedisTemplate.opsForGeo().remove(ShanXi, TaiYuanXueYuan);System.out.println(remove);} distance
查看两个地理位置之间的直线距离 Resourceprivate StringRedisTemplate stringRedisTemplate;Test void test() {Distance distance this.stringRedisTemplate.opsForGeo().distance(ShanXi, SXU, ZonBei);System.out.println(distance);}
代码示例
需求山西所有高校建立之后都会把自己的位置上传到某信息平台并且还会查询距离自己学校30公里之内的其他学校。当学校换位置之后就会删除当前信息。
基础配置
RestController
RequestMapping(/school)
public class SchoolController {Resourceprivate SchoolService schoolService;}
Service
public class SchoolService extends ServiceImplSchoolMapper, School {Resourceprivate StringRedisTemplate stringRedisTemplate;}
public interface SchoolMapper extends BaseMapperSchool {
}
Data
public class School {// 学校idprivate Integer id;// 学校名private String name;// 经度private BigDecimal longitude;// 纬度private BigDecimal latitude;}
上传位置信息 public String add(School school) {// TODO 更新信息到数据库boolean save this.save(school);// TODO 判断是否更新成功if(save) {// TODO 封装位置信息Point point new Point(school.getLongitude().doubleValue(), school.getLatitude().doubleValue());// TODO 存入数据库this.stringRedisTemplate.opsForGeo().add(GEO:SCHOOL, point, school.getName());}return 成功;}
查询附近学校
public void queryMessage() {// 距离Distance distance new Distance(30, RedisGeoCommands.DistanceUnit.KILOMETERS);// 参数RedisGeoCommands.GeoRadiusCommandArgs args RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance() // 包含距离.includeCoordinates() // 包含坐标.sortDescending(); // 降序// 开始查找GeoResultsRedisGeoCommands.GeoLocationString results this.stringRedisTemplate.opsForGeo().radius(GEO:SCHOOL, SXU, distance, args);ListGeoResultRedisGeoCommands.GeoLocationString content results.getContent();// 输出结果for (GeoResultRedisGeoCommands.GeoLocationString geoLocationGeoResult : content) {System.out.println(距离山西大学30公里之内大学的名称 geoLocationGeoResult.getContent().getName());System.out.println(距离山西大学30公里之内大学的坐标 geoLocationGeoResult.getContent().getPoint());System.out.println(距离山西大学30公里之内大学的距离 geoLocationGeoResult.getDistance());}}
删除位置信息 public boolean remove(String name) {LambdaQueryWrapperSchool lambdaQueryWrapper new LambdaQueryWrapper();lambdaQueryWrapper.eq(School::getName, name);boolean subtract this.remove(lambdaQueryWrapper);if(!subtract) {return false;}Long remove this.stringRedisTemplate.opsForGeo().remove(GEO:SCHOOL, name);return remove ! null remove 1;}