iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >redis轻松处理经纬度坐标点数据的实现方法
  • 570
分享到

redis轻松处理经纬度坐标点数据的实现方法

2024-04-02 19:04:59 570人浏览 泡泡鱼
摘要

目录1. GEOADD2. GEOPOS3. GEODIST4. GEORADIUS5. GEORADIUSBYMEMBERRedis 3.2 之后,支持地理坐标数据的管理。将给定的

Redis 3.2 之后,支持地理坐标数据的管理。将给定的坐标元素(纬度、经度、名字)添加到指定的键里面。 这些数据就会以有序集合的形式被储, 可以通过GEORADIUS 计算两个坐标点的距离,或者使用GEORADIUS 和 GEORADIUSBYMEMBER查询某个坐标半径内的数据。下面对其中常用的命令进行一个简单的介绍。

1. GEOADD

将坐标信息添加到指定的键里面。

 GEOADD key longitude latitude member [longitude latitude member ...]

longitude:坐标点经度,有效值[ -180,180 ]

latitude:坐标点纬度,有效值[ -85.05112878, 85.05112878 ]

示例:


127.0.0.1:6379> geoadd parks 116.300892 40.009462 yuanmingyuan
(integer) 1
127.0.0.1:6379>  geoadd parks 116.188797 39.990132 xiangshan 116.255916 40.030233 baiwangshan
(integer) 2
 
127.0.0.1:6379> GEOADD parks 110 89.9 nanji
(error) ERR invalid longitude,latitude pair 110.000000,89.900000

可以看到,GEOADD 支持一次添加一个或多个地点,每个地点需要包含精度维度和名称,当尝试添加合法经纬度外的坐标(维度为89.9的nanji) 时, 会报错。

2. GEOPOS

GEOPOS命令根据地点的名称返回对应的经纬度。集合中不存在时,返回数据为空

示例:


127.0.0.1:6379> GEOPOS parks xiangshan baiwangshan nanji
1) 1) "116.18879646062850952"
   2) "39.99013224137585354"
2) 1) "116.2559160590171814"
   2) "40.03023406483775659"
3) (nil)

3. GEODIST

GEODIST 返回两个给定位置之间的距离。如果两个位置之间的其中一个不存在, 那么命令返回空值。

GEODIST key member1 member2 [unit]

合法的unit值

unit: m(缺省值) km mi ft
说明: 千米 英里 英尺

示例:


127.0.0.1:6379> GEODIST parks xiangshan baiwangshan
"7251.9492"
127.0.0.1:6379> GEODIST parks xiangshan baiwangshan km
"7.2519"
127.0.0.1:6379> GEODIST parks xiangshan nanji km
(nil)

4. GEORADIUS

以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

经纬度和单位参数与前面命令保持一致。 其他可选参数说明

  • WITHCOORD: 将坐标数据的经纬度一并返回
  • WITHDIST:将坐标数据与当前坐标的距离一并返回
  • WITHHASH:以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值
  • COUNT:返回指定条数的数据
  • ASC|DESC:根据中心的位置, 按照从近到远或者从远到近的方式返回位置元素
  • STORE和STOREDIST:将返回结果保存至一个有序集合,区别是STORE保存的是hash值,STOREDIST保存的是距离

示例:

返回额外信息


127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km
1) "xiangshan"
2) "baiwangshan"
3) "yuanmingyuan"
127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km WITHCOORD WITHDIST WITHHASH
1) 1) "xiangshan"
   2) "10.9353"
   3) (integer) 4069878528493207
   4) 1) "116.18879646062850952"
      2) "39.99013224137585354"
2) 1) "baiwangshan"
   2) "3.6941"
   3) (integer) 4069880373231506
   4) 1) "116.2559160590171814"
      2) "40.03023406483775659"
3) 1) "yuanmingyuan"
   2) "4.3576"
   3) (integer) 4069880708898691
   4) 1) "116.30089133977890015"
      2) "40.00946202493697257"

指定数据条数和排序


127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km WITHDIST ASC
1) 1) "baiwangshan"
   2) "3.6941"
2) 1) "yuanmingyuan"
   2) "4.3576"
3) 1) "xiangshan"
   2) "10.9353"
127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km WITHDIST DESC
1) 1) "xiangshan"
   2) "10.9353"
2) 1) "yuanmingyuan"
   2) "4.3576"
3) 1) "baiwangshan"
   2) "3.6941"
127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km WITHDIST ASC COUNT 2
1) 1) "baiwangshan"
   2) "3.6941"
2) 1) "yuanmingyuan"
   2) "4.3576"

将结果保存到新的zset, hash值或者距离


127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km ASC COUNT 2 STORE store_20km
(integer) 2
127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km ASC COUNT 2 STOREDIST storedist_20km
(integer) 2
127.0.0.1:6379> ZRANGE store_20km 0 -1 WITHSCORES
1) "baiwangshan"
2) "4069880373231506"
3) "yuanmingyuan"
4) "4069880708898691"
127.0.0.1:6379> ZRANGE storedist_20km 0 -1 WITHSCORES
1) "baiwangshan"
2) "3.6941190849982757"
3) "yuanmingyuan"
4) "4.3576262236174665"

5. GEORADIUSBYMEMBER

这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是GEORADIUSBYMEMBER的中心点是由给定的位置元素决定的, 而不是像GEORADIUS 那样, 使用输入的经度和纬度来决定中心点。

示例:


GEORADIUSBYMEMBER parks yuanmingyuan 5 km ASC
1) "yuanmingyuan"
2) "baiwangshan"

查询圆明园5公里内的公园

到此这篇关于redis轻松处理经纬度坐标点数据的实现方法的文章就介绍到这了,更多相关redis 经纬度坐标点内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: redis轻松处理经纬度坐标点数据的实现方法

本文链接: https://www.lsjlt.com/news/154935.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作