您现在的位置是:首页 > 文章详情

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

日期:2019-04-26点击:393

相关笔记:CentOS6.9源码编译安装redis和php-redis扩展
我喜欢爬山,学习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 ) ) )

原文地址:https://www.jmsite.cn/blog-578.html

原文链接:https://yq.aliyun.com/articles/700379
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章