各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHP

PHP使用Redis的GEO(地理位置)命令

管理员 2023-09-05
PHP
121

PHP使用Redis的GEO(地理位置)命令

内容导读

收集整理的这篇技术教程文章主要介绍了PHP使用Redis的GEO(地理位置)命令,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4211字,纯文字阅读大概需要7分钟

内容图文

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(地理位置)命令的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的PHP使用Redis的GEO(地理位置)命令全部内容,希望文章能够帮你解决PHP使用Redis的GEO(地理位置)命令所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

扫码关注

qrcode

QQ交谈

回顶部