java geo_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 sicilys = new HashMap();

//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 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();

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值