這篇文章給大家分享的是有關PHP如何使用Redis的GEO(地理位置)命令的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
Redis自3.2版本開始新增對GEO(地理位置)的支持,但是地球不是一個完美的球體,在最壞的情況下的偏差可能是0.5%。接近兩極的區(qū)域是不支持的,支持坐標的有效的經(jīng)度從-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(); }
執(zhí)行結果
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(); }
執(zhí)行結果
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(); }
執(zhí)行結果:海陀山和小五臺山之間距離是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(); }
執(zhí)行結果:只有海陀山,離我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(); }
執(zhí)行結果:找出了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(); }
執(zhí)行結果:排除小五臺自己,找到了鰲山和海陀山
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(地理位置)命令就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
網(wǎng)站題目:PHP如何使用Redis的GEO(地理位置)命令-創(chuàng)新互聯(lián)
標題路徑:http://chinadenli.net/article18/dojhgp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、外貿(mào)網(wǎng)站建設、App設計、網(wǎng)站內鏈、移動網(wǎng)站建設、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)