java使用jeids实现redis2.6的GEO(地理位置)数据结构的操作

代码:

    https://github.com/viakiba/redis

主要是:

    GEOADD GEOPOS GEODIST GEORADIUS GEORADIUSBYMEMBER GEOHASH

import org.junit.Test;
import redis.clients.jedis.Jedis;

/**
 * @description: GEO(地理位置)
 * 			参考:Redis版本3.2
 * 				http://redisdoc.com/geo/index.html
 * 			GEOADD GEOPOS GEODIST GEORADIUS GEORADIUSBYMEMBER GEOHASH
 * @author viakiba
 * @date 2017年8月17日
 */
public class App24 {
	static interface RedisConfig {
		public final static String HOST = "localhost";
		public final static int PORT = 6379;
	}
	
	/**
	 * @description: 测试连接是否通过
	 * @author: viakiba
	 * @throws Exception
	 */
	@Test
	public void test1() throws Exception {
		//连接测试是否通过
		Jedis jedis = new Jedis(RedisConfig.HOST,RedisConfig.PORT);
		System.out.println(jedis.ping());//pong则通过
		jedis.close();
	}
	
	@Test
	public void test2() throws Exception {
		Jedis jedis = new Jedis(RedisConfig.HOST,RedisConfig.PORT);
		
	/*
		将给定的空间元素(纬度、经度、名字)添加到指定的键里面。 这些数据会以有序集合的形式被储存
		在键里面, 从而使得像 GEORADIUS 和 GEORADIUSBYMEMBER 这样的命令可以在之后通过位置查询取得这些元素。
		GEOADD 命令以标准的 x,y 格式接受参数, 所以用户必须先输入经度, 然后再输入纬度。
		GEOADD 能够记录的坐标是有限的: 非常接近两极的区域是无法被索引的。
		精确的坐标限制由 EPSG:900913 / EPSG:3785 / OSGEO:41001 等坐标系统定义, 具体如下:
			有效的经度介于 -180 度至 180 度之间。
			有效的纬度介于 -85.05112878 度至 85.05112878 度之间。
		当用户尝试输入一个超出范围的经度或者纬度时, GEOADD 命令将返回一个错误。
	*/
		//返回值:新添加到键里面的空间元素数量, 不包括那些已经存在但是被更新的元素。
//		Long geoadd = jedis.geoadd("Sicily", 13.361389, 38.115556, "Palermo");
//		Map<String,GeoCoordinate> sicilys = new HashMap<String,GeoCoordinate>();
//		sicilys.put("s1", new GeoCoordinate(13.361385, 38.115555));
//		sicilys.put("s2", new GeoCoordinate(13.361383, 37.115553));
//		Long geoadd2 = jedis.geoadd("Sicilys",sicilys);
//		
//		System.out.println(geoadd+":"+geoadd2);
		
		
		
//		从键里面返回所有给定位置元素的位置(经度和纬度)。
//		因为 GEOPOS 命令接受可变数量的位置元素作为输入, 所以即使用户只给定了一个位置元素,
//		命令也会返回数组回复。
//		返回值:
//			GEOPOS 命令返回一个数组, 数组中的每个项都由两个元素组成: 
//				第一个元素为给定位置元素的经度, 而第二个元素则为给定位置元素的纬度。
//				当给定的位置元素不存在时, 对应的数组项为空值。
//		List<GeoCoordinate> geopos = jedis.geopos("Sicily", "Palermo");
//		System.out.println(geopos);
		
		
	/*
		返回两个给定位置之间的距离。
		如果两个位置之间的其中一个不存在, 那么命令返回空值。
		指定单位的参数 unit 必须是以下单位的其中一个:
			m 表示单位为米。
			km 表示单位为千米。
			mi 表示单位为英里。
			ft 表示单位为英尺。
		===>如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用m作为单位。
		GEODIST 命令在计算距离时会假设地球为完美的球形, 在极限情况下, 这一假设最大会造成 0.5% 的误差。
		返回值:
		计算出的距离会以双精度浮点数的形式被返回。 如果给定的位置元素不存在, 那么命令返回空值。
	*/
		Double geodist = jedis.geodist("Sicilys", "s1", "s2");
		System.out.println(geodist);
		jedis.close();
	}
}

 

转载于:https://my.oschina.net/viakiba/blog/1513855

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值