package com.itcast.redis;
import org.junit.Test;
import redis.clients.jedis.*;
import redis.clients.jedis.params.GeoRadiusParam;
import java.util.*;
import static redis.clients.jedis.GeoUnit.*;
public class TestGeospatial {
//连接远程数据库,IP都使用192.168.22.100
private static Jedis jedis = new Jedis("192.168.20.107", 6379);
public static void main(String[] args) {
String ping = jedis.ping();
System.out.println("数据库正在连接:"+ping);
System.out.println("数据库正在清空:"+jedis.flushDB());
}
/*
* 1.getadd 添加地理位置
* GEOADD key [ NX | XX] [CH] longitude latitude member [ longitude latitude member ...]
* 参数 key(经度、维度、名称)
**/
@Test
public void geoaddTest(){
//当坐标位置超出上述指定范围时,该命令将会返回一个错误。
//Long location = jedis.geoadd("china:city", 39.90,116.40,"beijing");
Long location = jedis.geoadd("china:city", 116.40, 39.90, "beijing");
System.out.println(location);
}
/*
* 2.getpos 获取指定的城市的经度和纬度
**/
@Test
public void geoposTest(){
List<GeoCoordinate> location = jedis.geopos("china:city", "beijing");
System.out.println("北京的地理位置信息是:"+location);
}
/*
* 3.Pipeline 批量添加多个城市的地理位置信息
* 在 Jedis 中,geoadd 方法本身不提供直接的批量添加多个城市的功能。但你可以使用 Jedis 提供的 Pipeline 来执行批量操作,以提高性能。
* 使用 Pipeline 来批量执行多个 geoadd 操作,这样可以减少与 Redis 服务器的通信次数,提高效率。
* 在实际应用中,你可以根据需求动态构建城市和地理位置的数据结构,并使用 Pipeline 执行批量添加操作。
**/
@Test
public void geoaddmulTest(){
// 使用 Pipeline 批量添加地理位置信息
Pipeline pipeline = jedis.pipelined();
// 创建一个 Map 用于存储城市和对应的地理位置信息
Map<String, GeoCoordinate> cityCoordinates = new HashMap<>();
cityCoordinates.put("shanghai", new GeoCoordinate(121.47, 31.23));
cityCoordinates.put("hangzhou", new GeoCoordinate(120.16, 30.24));
cityCoordinates.put("xian", new GeoCoordinate(108.96, 34.26));
cityCoordinates.put("chongqing", new GeoCoordinate(106.50, 29.53));
cityCoordinates.put("shenzhen", new GeoCoordinate(114.05, 22.52));
cityCoordinates.put("beijing", new GeoCoordinate(116.40, 39.90));
// 添加更多城市...
// 使用 Pipeline 一次性添加多个城市的地理位置信息
for (Map.Entry<String, GeoCoordinate> entry : cityCoordinates.entrySet()) {
String city = entry.getKey();
GeoCoordinate coordinate = entry.getValue();
pipeline.geoadd("china:city", coordinate.getLongitude(), coordinate.getLatitude(), city);
}
// 执行 Pipeline
pipeline.sync();
// 输出地理位置信息
for (String city : new String[]{"beijing","shanghai","hangzhou", "xian","chongqing","shenzhen"}) {
System.out.println( city + "的地理位置信息是: " + jedis.geopos("china:city", city));
}
}
/*
* 4.GEODIST 是 Redis 中用于计算地理位置距离的命令。该命令用于计算两个位置之间的距离,单位是米(m)。
* m 表示单位为米。
* km 表示单位为千米。
* mi 表示单位为英里。
* ft 表示单位为英尺
**/
@Test
public void geodistTest(){
// 计算 上海到北京的直线距离,默认单位为米
Double distance1 = jedis.geodist("china:city", "shanghai", "beijing",M);
System.out.println("上海到北京的直线距离: " + distance1 + " 米");
// 计算 重庆到北京的直线距离,单位为千米
Double distance2= jedis.geodist("china:city", "chongqing", "beijing",KM);
System.out.println("重庆到北京的直线距离: " + distance2 + " 公里");
}
/*
* 5.georadius 以给定的经纬度为中心, 找出某一半径内的元素 (附近的人)
* 获得指定数量的人,200
* 所有数据应该都录入:china:city ,才会让结果更加请求!
* withcoord:带上坐标;
* withdist:带上距离,单位与半径单位相同;
* COUNT n : 只显示前n个(按距离递增排序)
**/
@Test
public void georadiusTest(){
double radius = 1000;
// 以110,30 这个经纬度为中心,寻找方圆1000km内的城市
List<GeoRadiusResponse> georadius = jedis.georadius("china:city", 110, 30, radius, KM, GeoRadiusParam.geoRadiusParam().sortAscending());
// 打印结果 找城市
System.out.println("找到的城市有:");
for (GeoRadiusResponse city : georadius) {
System.out.printf("%s 在" + radius + "公里范围内%n", city.getMemberByString());
}
}
@Test
public void georadiuswithdistTest(){
//查询经纬度(110,30)坐标500km半径内的成员,带距离
double radius = 1000;
// 中心点经纬度
double centerLongitude = 110;
double centerLatitude = 30;
// 查询方圆 500 公里内的城市,并获取坐标信息
List<GeoRadiusResponse> georadiusWithDist = jedis.georadius("china:city", centerLongitude, centerLatitude, radius,KM, GeoRadiusParam.geoRadiusParam().withDist().sortAscending());
// 打印结果
System.out.println("找到的城市有:");
for (GeoRadiusResponse city : georadiusWithDist) {
// 打印输出,显示城市名称和坐标信息
System.out.printf("%s 在" + radius + "公里范围内,距离中心点 %.2f 千米%n", city.getMemberByString(),city.getDistance());
}
}
@Test
public void georadiuswithcoordTest(){
//查询经纬度(110,30)坐标500km半径内的成员,带坐标
double radius = 500;
// 中心点经纬度
double centerLongitude = 110;
double centerLatitude = 30;
// 查询方圆 500 公里内的城市,并获取坐标信息
List<GeoRadiusResponse> georadiusWithCoord = jedis.georadius("china:city", centerLongitude, centerLatitude, radius,KM, GeoRadiusParam.geoRadiusParam().withCoord().sortAscending());
// 打印结果
System.out.println("找到的城市有:");
for (GeoRadiusResponse city : georadiusWithCoord) {
GeoCoordinate coordinates = city.getCoordinate();
double latitude = coordinates.getLatitude();
double longitude = coordinates.getLongitude();
// 打印输出,显示城市名称和坐标信息
System.out.printf("%s 在" + radius + "公里范围内,坐标:(%f, %f)%n", city.getMemberByString(), longitude, latitude);
}
}
/*
* 6.GEORADIUSBYMEMBER 找出位于指定元素周围的其他元素
**/
@Test
public void georadiusbymemberTest(){
// 查询以 "beijing" 为中心,方圆 1000 公里内的城市
double radius = 1000;
String location = "xian";
List<GeoRadiusResponse> georadiusByMember = jedis.georadiusByMember("china:city", location, radius,KM, GeoRadiusParam.geoRadiusParam().sortAscending());
// 打印结果
System.out.println("找到的城市有:");
for (GeoRadiusResponse city : georadiusByMember) {
System.out.printf("%s 在" +location + "的方圆"+ radius + "公里范围内%n", city.getMemberByString());
}
}
/*
*7. GEO 底层的实现原理其实�
没有合适的资源?快使用搜索试试~ 我知道了~
redis期末作业作业作业
共28个文件
java:11个
class:9个
xml:7个
需积分: 0 0 下载量 158 浏览量
2024-01-04
19:49:39
上传
评论
收藏 43KB ZIP 举报
温馨提示
作业
资源推荐
资源详情
资源评论
收起资源包目录
Redis.zip (28个子文件)
Redis
pom.xml 2KB
src
test
java
Testping.java 349B
main
resources
java
com
itcast
redis
ZhangchulanListOperate.java 3KB
ZhangchulanSetOperate.java 4KB
TestHashOperate.java 4KB
TestListOperate.java 6KB
TestBitMap.java 1KB
TestKeyOperate.java 2KB
TestGeospatial.java 8KB
TestStringOperate.java 5KB
TestSsetsOperate.java 3KB
TestSetOperate.java 6KB
.idea
jarRepositories.xml 864B
uiDesigner.xml 9KB
vcs.xml 188B
workspace.xml 7KB
misc.xml 550B
compiler.xml 538B
.gitignore 190B
target
classes
com
itcast
redis
TestStringOperate.class 5KB
TestBitMap.class 2KB
TestGeospatial.class 7KB
TestKeyOperate.class 3KB
TestHashOperate.class 5KB
TestSetOperate.class 5KB
TestListOperate.class 5KB
TestSsetsOperate.class 3KB
test-classes
Testping.class 992B
generated-test-sources
test-annotations
generated-sources
annotations
共 28 条
- 1
资源评论
无危险
- 粉丝: 231
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 卡方数据.sav
- Python实现基于Django框架的二手物品购物网站设计源码+数据库.zip
- 基于Python和Django的二手物品购物网站设计源码+数据库脚本.zip
- 【计算机毕业设计】基于h5的移动网赚项目小程序【源码+lw+部署文档+讲解】
- 【计算机毕业设计】基于ssm-vue的oa系统设计与实现【源码+lw+部署文档+讲解】
- 基于pytorch实现的YOLOV5+SORT的车辆行人目标识别及追踪系统源码.zip
- 【计算机毕业设计】基于servlet+jdbc的在线选房系统设计与实现【源码+lw+部署文档+讲解】
- 投身科技创新,勇担时代先锋.pptx
- 【计算机毕业设计】基于SSM的仿微博系统的设计与实现【源码+lw+部署文档+讲解】
- 使用 Web Components 实现,遵循 Material You 设计规范的 Web 前端组件库
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功