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

目录
  • 1. GEOADD
  • 2. GEOPOS
  • 3. GEODIST
  • 4. GEORADIUS
  • 5. GEORADIUSBYMEMBER

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 经纬度坐标点内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python经纬度坐标转换为距离及角度的实现

    最近项目上有这样的需求,需要依据设备的经纬度坐标计算距离及角度.经验证后效果较好,并分享. 1 经纬度转换距离代码 #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'Seven' import math # 计算距离 def getDistance(latA, lonA, latB, lonB): ra = 6378140 # 赤道半径 rb = 6356755 # 极半径 flatten = (ra - rb) / ra #

  • 如何用php根据地址获取经纬度

    这里用的是百度地图的接口,你需要先申请百度的服务秘钥(ak). 百度地图有这样一个接口:地理编码 1.php代码: /** * 根据地址获取经纬度 -- 百度地图 */ public function queryAddress(){ $ak = '你的ak'; //填写你的ak $address = '北京市海淀区上地七街'; //要获取的位置 $url = 'http://api.map.baidu.com/geocoding/v3/?output=json&address='.$addres

  • Python版中国省市经纬度

    一级行政区经纬度 一级行政区(省级行政区):34个(23个省.5个自治区.4个直辖市.2个特别行政区) provinces = { '吉林省': [125.326800, 43.896160], '黑龙江省': [126.662850, 45.742080], '辽宁省': [123.429250, 41.835710], '内蒙古自治区': [111.765220, 40.817330], '新疆维吾尔自治区': [87.627100, 43.793430], '青海省': [101.7801

  • vue中调用百度地图获取经纬度的实现

    项目中,需要实现获取当前位置的经纬度,或者搜索某个位置并获取经纬度信息,我使用的的是vue,地图使用的是百度地图. 默认自动获取当前位置经纬度 拖动小红标 获取经纬度 关键词 查询获取经纬度 前期准备 首先,我们需要取百度官方申请一个地图api秘钥,https://lbsyun.baidu.com/apiconsole/key 进入后在应用管理,我的应用去申请即可. 申请好以后,我们打开vue项目中public文件下的index.html文件,拼接百度AK值并引入 <script type=&quo

  • c# 获取照片的经纬度和时间的示例代码

    public List<string> GetXYFromPic(String jpgPath) { List<string> sXY = new List<string>(); try { //载入图片 Image objImage = Image.FromFile(jpgPath); //取得所有的属性(以PropertyId做排序) var propertyItems = objImage.PropertyItems.OrderBy(x => x.Id);

  • Python调用高德API实现批量地址转经纬度并写入表格的功能

    本段代码是先将需要转换经纬度的地址爬取在 '地址.csv' 文件里,文件截图示例: 代码展示 # coding=utf-8 # SPL # 时间:2020/12/20 21:15 import csv import requests import json import pandas as pd num=0 y=[] with open("地址.csv", 'r') as f: #写入将要转换的地址的文件路径,此处为默认文件路径(要先将文件提前导入)(注意是csv格式文件) r = c

  • javaweb实现百度GPS定位接口(经纬度)

    百度web GPS定位(经纬度) 注册账号及配置地址 http://lbsyun.baidu.com/apiconsole/key 主类 BaiduWebAPI import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import

  • Python编程调用百度API实现地理位置经纬度坐标转换示例

    目录 1.1,用百度账号登陆百度地图控制台 1.2,创建一个应用,获取 AK 参数 1.3,地理编码.逆地理编码 1.3.1 地理编码 1.3.2 逆地理编码 经纬度坐标转换最常见办法就是调用第三方 API,例如百度.高德地图等服务平台,提供了相应的功能接口,它们的这类技术已经非常成熟啦,准确稳定,关键还是免费的 ~ 本期教程以百度为例(高德的用方类似),介绍一下其用法 1.1,用百度账号登陆百度地图控制台 百度地图开放平台 1.2,创建一个应用,获取 AK 参数 登录控制台之后,选择左侧 应用

  • React+高德地图实时获取经纬度,定位地址

    目录 1. 初始化地图 2. 地图扎点 3. 开启定位 4. 监听地图变化 5. 获取详细地址 6. 扎点动画

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

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

  • springboot + mongodb 通过经纬度坐标匹配平面区域的方法

    java api 自带的mongodb实体无法满足环状多边形的区域匹配(大概是我没用对方法可能)所以我们要自定义一个空间坐标类型 废话不多说 上代码 /** * * @author cy */ @Configuration @ReadingConverter public class CustomReadGeoJsonConverter implements Converter<Document, CustomGeoJson> { @Override public CustomGeoJson

  • 地址到经纬度坐标转化的JAVA代码

    任务:有1000多条门店信息(放在excel中,包括地址,店名,电话等,但是没有经纬度坐标),老大让我用地址通过百度地图拾取坐标系统找到相应的坐标,然后加上坐标后更新到公司的数据库. 失败的方案:1.使用按键精灵,按键精灵是一个模仿键盘鼠标操作的软件,用来写动作脚本的,由于时间紧,没怎么研究,因为整套动作太复杂了按键精灵尝试了下不行就放弃了. 2.表单填充工具(就是把exel表格批量提交到网页),什么风越.乌溜漆(特别是这乌溜漆,还要钱,坑货)都尝试了下,结果都不满意.因为我要把excel中的内

  • 基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标

    前言 近来由于工作需要,需要提取某些城市的经纬度坐标,稍微搜索了一下,发现百度地图和高德地图都提供了相关的函数和例子.那么剩余的工作也就比较简单了,保存坐标,然后转换为WGS坐标,这样才能和现有的GPS数据以及地图匹配. 主要问题和解决方法 本地保存文件跨浏览器支持 由于安全的原因,JavaScript本地保存文件的方式通常都只有IE支持的ActiveXObject/Open方法,每次都要提示不安全和允许运行,非常麻烦.好在其他浏览器目前都支持<a>标签实现文件下载的方法.经测试最新的Goog

  • Java将GeoHash转化为对应的经纬度坐标实例代码

    本文实例介绍了JAVA实现将GeoHash转化为对应的经纬度坐标的详细代码,分享给大家供大家参考,具体内容如下 package com.lulei.geo; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import com.lulei.geo.bean.LocationBean; import com.lulei.util.JsonUti

  • 微信小程序实现获取自己所处位置的经纬度坐标功能示例

    本文实例讲述了微信小程序实现获取自己所处位置的经纬度坐标功能.分享给大家供大家参考,具体如下: 1.效果展示 2.关键代码 index.wxml布局文件代码 <view>纬度:{{latitude}}</view> <view>经度:{{longitude}}</view> index.js逻辑文件代码 Page({ data: { latitude:'', longitude:'' }, onLoad: function () { var that=thi

  • Java通过经纬度坐标获取两个点之间的直线距离的示例

    前言 现在很多App都需要附带着附近人列表功能,所以我在这里实现2个点之间的距离计算 经纬度的获取需要第三方来支持,高德地图.百度地图.... 附近人功能具体的实现逻辑: 1.获取每个人的经纬度坐标,存库记录 2.通过SQL获取指定距离范围内的用户列表(文章的 "二.MySQL中通过经纬度,获取范围内的用户") 3.通过获取到的用户列表,计算自己与用户之间度距离(文章的 "一.JAVA代码实现计算AB两点的直线距离") 一.JAVA代码实现计算AB两点的直线距离 我

  • Qt编写地图之实现经纬度坐标纠偏

    目录 一.前言 二.功能特点 三.体验地址 四.效果图 五.相关代码 一.前言 地图应用中都涉及到一个问题就是坐标纠偏的问题,这个问题的是因为根据地方规则保密性要求不允许地图厂商使用标准的GPS坐标,而是要用国家定义的偏移标准,或者在此基础上再做算法运算,所以这就出现了三种常规的坐标标准:GPS坐标(WGS-84,国际标准,谷歌地球软件,硬件GPS模块等).中国坐标偏移标准(GCJ-02,谷歌地图.腾讯地图.高德地图等).百度坐标偏移标准(BD-09,仅仅百度地图采用).由于不允许其他坐标转换成

  • Vue结合openlayers按照经纬度坐标实现锚地标记及绘制多边形区域

    目录 前言 1.安装openlayers 2.引入模块 3.地图与弹窗html样式 4.data数据定义 5.methods方法 6.mounted数据加载 7.锚地数据获取 前言 本文介绍vue结合openlayers实现根据返回的经纬度坐标完成锚地标记.绘制多边形区域: 注意点: 1.根据返回的经纬度取第一个坐标作为锚地图标位置: 2.根据返回的经纬度坐标数据,这里的后台数据需要处理(根据返回的数据处理成需要的格式),得到坐标数组渲染绘制区域画图显示在航道图层上. 3.关于数据渲染的问题:

随机推荐