mysql redis geo_使用 Redis GeoHash 实现附近的XXX

功能概述

用户A打开手机,可以看到附件的商铺,或者附件的人。甚至告诉用户,你正在某个商铺中。

geohash 的疑问

geohash 能否实现直接告诉用户正在某个商铺中?

geohash 代表了一个块状区域,而不是一个点,但是商铺一定是个正方形区域么?

数据库选型

目前暂定 redis。Redis 于 3.2.0 版本加入了 geohash 的支持,而目前的稳定版是 3.2.3.

Redis geohash

如何找到关于 redis geohash 的资料?当然是 redis 官网。

GEOADD key 看这个文档基本就明白了。但是,那个示例想看懂的话,还是需要查一下意大利地理

redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"

(integer) 2

redis> GEODIST Sicily Palermo Catania

"166274.15156960039"

redis> GEORADIUS Sicily 15 37 100 km

1) "Catania"

redis> GEORADIUS Sicily 15 37 200 km

1) "Palermo"

2) "Catania"

redis>

这里 sicily 类似山东省,而 Palermo, Catania 类似烟台、威海,即 Palermo、Catania 是 sicily 辖区内的城市。

Data is stored into the key as a sorted set, in a way that makes it possible to later retrieve items using a query by radius with theGEORADIUS or GEORADIUSBYMEMBER commands.

注意,添加时,经度在前,维度在后。

GEORADIUSBYMEMBER yeda "富士康" 1 km

小心,前方有坑! 返回的结果默认是无序的,即不会按照距离远近进行排序。需要手动加上 ASC, DESC 进行排序。

GEORADIUSBYMEMBER yeda "富士康" 10 km WITHDIST ASC

如何在 Laravel 中使用

composer require predis/predis

$items = Redis::georadius("yeda", $lng, $lat, 20, "km", "WITHDIST", "ASC");

微信获取地理位置信息接口的坑

在 weixin js sdk config 信息未验证之前,如果调用微信 js sdk 实际上不会正确执行。需要使用

wx.ready(function() {

// ...

});

专业术语

latitude 纬度

longitude 经度

MySQL 的实现方案

参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值