PHP使用Redis的GEO(地理位置)命令
Redis自3.2版本开始新增对GEO(地理位置)的支持,但是地球不是一个完美的球体,在最坏的情况下的偏差可能是0.5%。接近两极的区域是不支持的,支持坐标的有效的经度从-180度到180度;有效的纬度从-85.05112878度到85.05112878度,超出范围将会报错。
我喜欢爬山,学习GEO的时候我也以山的坐标做演示,我的坐标是:
116.517159,39.922267
我整理了一些山的坐标
$mountainCoordinates = array( array('115.793844', '40.584459', 'Hai_tuo'),//海陀山坐标 array('115.056232', '39.948933', 'Small_wutai'),//小五台山坐标 array('114.173822', '27.474563', 'Wu_gong'),//武功山坐标 array('111.341648', '25.518178', 'Leek_ridge'),//韭菜岭坐标 array('103.901761', '31.60487', 'Jiu_ding'),//九顶山坐标 array('107.398009', '34.057777', 'Ao_Shan'),//鳌山坐标 );
1.向mountainCoordinates的key里增加坐标
try { $redis = new Redis(); $redis->connect('192.168.75.132', 6379); foreach ($mountainCoordinates as $coordinates){ $param = array('geoadd', 'mountainCoordinates'); $param = array_merge($param, $coordinates); $ret = call_user_func_array(array($redis, 'rawCommand'), $param); print_r($ret); } } catch (Exception $e){ echo $e->getMessage(); }
执行结果
int(1) int(1) int(1) int(1) int(1) int(1)
2.获取坐标
try { $redis = new Redis(); $redis->connect('192.168.75.132', 6379); $param = array('geopos', 'mountainCoordinates', 'Hai_tuo', 'Wu_gong', 'Jiu_ding'); $ret = call_user_func_array(array($redis, 'rawCommand'), $param); print_r($ret); } catch (Exception $e){ echo $e->getMessage(); }
执行结果
Array ( [0] => Array ( [0] => 115.79384654760360718 [1] => 40.58445845049069334 ) [1] => Array ( [0] => 114.1738244891166687 [1] => 27.47456377424472151 ) [2] => Array ( [0] => 103.90176326036453247 [1] => 31.60486909089710394 ) )
3.计算两个坐标间距离
try { $redis = new Redis(); $redis->connect('192.168.75.132', 6379); $param = array('geodist', 'mountainCoordinates', 'Hai_tuo', 'Small_wutai', 'km'); $ret = call_user_func_array(array($redis, 'rawCommand'), $param); var_dump($ret); } catch (Exception $e){ echo $e->getMessage(); }
执行结果:海陀山和小五台山之间距离是94.4219km
string(7) "94.4219"
4.以我的坐标为原点,按半径100km取坐标(找出离我100公里以内的山)
try { $redis = new Redis(); $redis->connect('192.168.75.132', 6379); $param = array('georadius', 'mountainCoordinates', '116.517159', '39.922267', '100', 'km', 'WITHDIST', 'WITHCOORD'); $ret = call_user_func_array(array($redis, 'rawCommand'), $param); print_r($ret); } catch (Exception $e){ echo $e->getMessage(); }
执行结果:只有海陀山,离我95.8884km
Array ( [0] => Array ( [0] => Hai_tuo [1] => 95.8884 [2] => Array ( [0] => 115.79384654760360718 [1] => 40.58445845049069334 ) ) )
5.以我的坐标为原点,按半径1500km取坐标(找出离我1500公里以内的山)
try { $redis = new Redis(); $redis->connect('192.168.75.132', 6379); $param = array('georadius', 'mountainCoordinates', '116.517159', '39.922267', '1500', 'km', 'WITHDIST', 'WITHCOORD'); $ret = call_user_func_array(array($redis, 'rawCommand'), $param); print_r($ret); } catch (Exception $e){ echo $e->getMessage(); }
执行结果:找出了5座山
Array ( [0] => Array ( [0] => Jiu_ding [1] => 1464.4350 [2] => Array ( [0] => 103.90176326036453247 [1] => 31.60486909089710394 ) ) [1] => Array ( [0] => Ao_Shan [1] => 1039.1217 [2] => Array ( [0] => 107.3980066180229187 [1] => 34.05777705537607147 ) ) [2] => Array ( [0] => Wu_gong [1] => 1401.2353 [2] => Array ( [0] => 114.1738244891166687 [1] => 27.47456377424472151 ) ) [3] => Array ( [0] => Small_wutai [1] => 124.6283 [2] => Array ( [0] => 115.05623370409011841 [1] => 39.94893288365195616 ) ) [4] => Array ( [0] => Hai_tuo [1] => 95.8884 [2] => Array ( [0] => 115.79384654760360718 [1] => 40.58445845049069334 ) ) )
6.以小五台山的坐标为原点,按半径1000km取坐标(找出离小五台山1000公里以内的山)
try { $redis = new Redis(); $redis->connect('192.168.75.132', 6379); $param = array('georadiusbymember', 'mountainCoordinates', 'Small_wutai', '1000', 'km', 'WITHDIST', 'WITHCOORD'); $ret = call_user_func_array(array($redis, 'rawCommand'), $param); print_r($ret); } catch (Exception $e){ echo $e->getMessage(); }
执行结果:排除小五台自己,找到了鳌山和海陀山
Array ( [0] => Array ( [0] => Small_wutai [1] => 0.0000 [2] => Array ( [0] => 115.05623370409011841 [1] => 39.94893288365195616 ) ) [1] => Array ( [0] => Hai_tuo [1] => 94.4219 [2] => Array ( [0] => 115.79384654760360718 [1] => 40.58445845049069334 ) ) [2] => Array ( [0] => Ao_Shan [1] => 943.7873 [2] => Array ( [0] => 107.3980066180229187 [1] => 34.05777705537607147 ) ) )
以上是PHP使用Redis的GEO(地理位置)命令的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

CMS 代表内容管理系统。它是一种软件应用程序或平台,使用户能够创建、管理和修改数字内容,而无需先进的技术知识。 CMS 允许用户轻松创建和组织内容

数组是编程中用于处理数据的线性数据结构。有时在处理数组时,我们需要向现有数组中添加新元素。在本文中,我们将讨论几种在PHP中向数组末尾添加元素的方法,并附带代码示例、输出以及每种方法的时间和空间复杂度分析。 以下是向数组添加元素的不同方法: 使用方括号 [] 在PHP中,向数组末尾添加元素的方法是使用方括号[]。此语法仅适用于我们只想添加单个元素的情况。以下是语法: $array[] = value; 示例

Nexo交易所:瑞士加密货币借贷平台深度解析Nexo是一个提供加密货币借贷服务的平台,支持超过40种加密资产、法币和稳定币的抵押和借贷。它在欧洲和美国市场占据主导地位,并致力于提升平台的效率、安全性和合规性。许多投资者都想知道Nexo交易所的注册地,答案是:瑞士。Nexo由瑞士金融科技公司Credissimo于2018年创立。Nexo交易所的地理位置及监管:Nexo总部位于瑞士楚格,这是一个知名的加密货币友好型地区。平台积极配合各国政府监管,已在美国金融犯罪执法网络(FinCEN)、加拿大金融
