国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

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

2024-05-04 21:51:04
字體:
來源:轉載
供稿:網友

Redis自3.2版本開始新增對GEO(地理位置)的支持,但是地球不是一個完美的球體,在最壞的情況下的偏差可能是0.5%。接近兩極的區域是不支持的,支持坐標的有效的經度從-180度到180度;有效的緯度從-85.05112878度到85.05112878度,超出范圍將會報錯。

我喜歡爬山,學習GEO的時候我也以山的坐標做演示,我的坐標是:

116.517159,39.922267

我整理了一些山的坐標

  1. $mountainCoordinates = array
  2.  
  3.     array('115.793844''40.584459''Hai_tuo'),//海陀山坐標 
  4.  
  5.     array('115.056232''39.948933''Small_wutai'),//小五臺山坐標 
  6.  
  7.     array('114.173822''27.474563''Wu_gong'),//武功山坐標 
  8.  
  9.     array('111.341648''25.518178''Leek_ridge'),//韭菜嶺坐標 
  10.  
  11.     array('103.901761''31.60487''Jiu_ding'),//九頂山坐標 
  12.  
  13.     array('107.398009''34.057777''Ao_Shan'),//鰲山坐標 
  14.  
  15. ); 

1.向mountainCoordinates的key里增加坐標

  1. try { 
  2.  
  3.     $redis = new Redis(); 
  4.  
  5.     $redis->connect('192.168.75.132', 6379); 
  6.  
  7.     foreach ($mountainCoordinates as $coordinates){ 
  8.  
  9.         $param = array('geoadd''mountainCoordinates'); 
  10.  
  11.         $param = array_merge($param$coordinates); 
  12.  
  13.         $ret = call_user_func_array(array($redis'rawCommand'), $param); 
  14.  
  15.         print_r($ret); 
  16.   //Vevb.com 
  17.     } 
  18.  
  19. } catch (Exception $e){ 
  20.  
  21.     echo $e->getMessage(); 
  22.  

執行結果

  1. int(1) 
  2.  
  3. int(1) 
  4.  
  5. int(1) 
  6.  
  7. int(1) 
  8.  
  9. int(1) 
  10.  
  11. int(1) 

2.獲取坐標

  1. try { 
  2.  
  3.     $redis = new Redis(); 
  4.  
  5.     $redis->connect('192.168.75.132', 6379); 
  6.  
  7.     $param = array('geopos''mountainCoordinates''Hai_tuo''Wu_gong''Jiu_ding'); 
  8.  
  9.     $ret = call_user_func_array(array($redis'rawCommand'), $param); 
  10.  
  11.     print_r($ret); 
  12.  
  13. } catch (Exception $e){ 
  14.  
  15.     echo $e->getMessage(); 
  16.  

執行結果

  1. Array 
  2.  
  3.  
  4.     [0] => Array 
  5.  
  6.         ( 
  7.  
  8.             [0] => 115.79384654760360718 
  9.  
  10.             [1] => 40.58445845049069334 
  11.  
  12.         ) 
  13.  
  14.     [1] => Array 
  15.  
  16.         ( 
  17.  
  18.             [0] => 114.1738244891166687 
  19.  
  20.             [1] => 27.47456377424472151 
  21.  
  22.         ) 
  23.  
  24.     [2] => Array 
  25.  
  26.         ( 
  27.  
  28.             [0] => 103.90176326036453247 
  29.  
  30.             [1] => 31.60486909089710394 
  31.  
  32.         ) 
  33.  

3.計算兩個坐標間距離

  1. try { 
  2.  
  3.     $redis = new Redis(); 
  4.  
  5.     $redis->connect('192.168.75.132', 6379); 
  6.  
  7.     $param = array('geodist''mountainCoordinates''Hai_tuo''Small_wutai''km'); 
  8.  
  9.     $ret = call_user_func_array(array($redis'rawCommand'), $param); 
  10.  
  11.     var_dump($ret); 
  12.  
  13. } catch (Exception $e){ 
  14.  
  15.     echo $e->getMessage(); 
  16.  

執行結果:海陀山和小五臺山之間距離是94.4219km

string(7) "94.4219"

4.以我的坐標為原點,按半徑100km取坐標(找出離我100公里以內的山)

  1. try { 
  2.  
  3.     $redis = new Redis(); 
  4.  
  5.     $redis->connect('192.168.75.132', 6379); 
  6.  
  7.     $param = array('georadius''mountainCoordinates''116.517159''39.922267''100''km''WITHDIST''WITHCOORD'); 
  8.  
  9.     $ret = call_user_func_array(array($redis'rawCommand'), $param); 
  10.  
  11.     print_r($ret); 
  12.  
  13. } catch (Exception $e){ 
  14.  
  15.     echo $e->getMessage(); 
  16.  

執行結果:只有海陀山,離我95.8884km

  1. Array 
  2.  
  3.  
  4.     [0] => Array 
  5.  
  6.         ( 
  7.  
  8.             [0] => Hai_tuo 
  9.  
  10.             [1] => 95.8884 
  11.  
  12.             [2] => Array 
  13.  
  14.                 ( 
  15.  
  16.                     [0] => 115.79384654760360718 
  17.  
  18.                     [1] => 40.58445845049069334 
  19.  
  20.                 ) 
  21.  
  22.         ) 
  23.  

5.以我的坐標為原點,按半徑1500km取坐標(找出離我1500公里以內的山)

  1. try { 
  2.  
  3.     $redis = new Redis(); 
  4.  
  5.     $redis->connect('192.168.75.132', 6379); 
  6.  
  7.     $param = array('georadius''mountainCoordinates''116.517159''39.922267''1500''km''WITHDIST''WITHCOORD'); 
  8.  
  9.     $ret = call_user_func_array(array($redis'rawCommand'), $param); 
  10.  
  11.     print_r($ret); 
  12.  
  13. } catch (Exception $e){ 
  14.  
  15.     echo $e->getMessage(); 
  16.  

執行結果:找出了5座山

  1. Array 
  2.  
  3.  
  4.     [0] => Array 
  5.  
  6.         ( 
  7.  
  8.             [0] => Jiu_ding 
  9.  
  10.             [1] => 1464.4350 
  11.  
  12.             [2] => Array 
  13.  
  14.                 ( 
  15.  
  16.                     [0] => 103.90176326036453247 
  17.  
  18.                     [1] => 31.60486909089710394 
  19.  
  20.                 ) 
  21.  
  22.         ) 
  23.  
  24.     [1] => Array 
  25.  
  26.         ( 
  27.  
  28.             [0] => Ao_Shan 
  29.  
  30.             [1] => 1039.1217 
  31.  
  32.             [2] => Array 
  33.  
  34.                 ( 
  35.  
  36.                     [0] => 107.3980066180229187 
  37.  
  38.                     [1] => 34.05777705537607147 
  39.  
  40.                 ) 
  41.  
  42.         ) 
  43.  
  44.     [2] => Array 
  45.  
  46.         ( 
  47.  
  48.             [0] => Wu_gong 
  49.  
  50.             [1] => 1401.2353 
  51.  
  52.             [2] => Array 
  53.  
  54.                 ( 
  55.  
  56.                     [0] => 114.1738244891166687 
  57.  
  58.                     [1] => 27.47456377424472151 
  59.  
  60.                 ) 
  61.  
  62.         ) 
  63.  
  64.     [3] => Array 
  65.  
  66.         ( 
  67.  
  68.             [0] => Small_wutai 
  69.  
  70.             [1] => 124.6283 
  71.  
  72.             [2] => Array 
  73.  
  74.                 ( 
  75.  
  76.                     [0] => 115.05623370409011841 
  77.  
  78.                     [1] => 39.94893288365195616 
  79.  
  80.                 ) 
  81.  
  82.         ) 
  83.  
  84.     [4] => Array 
  85.  
  86.         ( 
  87.  
  88.             [0] => Hai_tuo 
  89.  
  90.             [1] => 95.8884 
  91.  
  92.             [2] => Array 
  93.  
  94.                 ( 
  95.  
  96.                     [0] => 115.79384654760360718 
  97.  
  98.                     [1] => 40.58445845049069334 
  99.  
  100.                 ) 
  101.  
  102.         ) 
  103.  

6.以小五臺山的坐標為原點,按半徑1000km取坐標(找出離小五臺山1000公里以內的山)

  1. try { 
  2.  
  3.     $redis = new Redis(); 
  4.  
  5.     $redis->connect('192.168.75.132', 6379); 
  6.  
  7.     $param = array('georadiusbymember''mountainCoordinates''Small_wutai''1000''km''WITHDIST''WITHCOORD'); 
  8.  
  9.     $ret = call_user_func_array(array($redis'rawCommand'), $param); 
  10.  
  11.     print_r($ret); 
  12.  
  13. } catch (Exception $e){ 
  14.  
  15.     echo $e->getMessage(); 
  16.  

執行結果:排除小五臺自己,找到了鰲山和海陀山

  1. Array 
  2.  
  3.  
  4.     [0] => Array 
  5.  
  6.         ( 
  7.  
  8.             [0] => Small_wutai 
  9.  
  10.             [1] => 0.0000 
  11.  
  12.             [2] => Array 
  13.  
  14.                 ( 
  15.  
  16.                     [0] => 115.05623370409011841 
  17.  
  18.                     [1] => 39.94893288365195616 
  19.  
  20.                 ) 
  21.  
  22.         ) 
  23.  
  24.     [1] => Array 
  25.  
  26.         ( 
  27.  
  28.             [0] => Hai_tuo 
  29.  
  30.             [1] => 94.4219 
  31.  
  32.             [2] => Array 
  33.  
  34.                 ( 
  35.  
  36.                     [0] => 115.79384654760360718 
  37.  
  38.                     [1] => 40.58445845049069334 
  39.  
  40.                 ) 
  41.  
  42.         ) 
  43.  
  44.     [2] => Array 
  45.  
  46.         ( 
  47.  
  48.             [0] => Ao_Shan 
  49.  
  50.             [1] => 943.7873 
  51.  
  52.             [2] => Array 
  53.  
  54.                 ( 
  55.  
  56.                     [0] => 107.3980066180229187 
  57.  
  58.                     [1] => 34.05777705537607147 
  59.  
  60.                 ) 
  61.  
  62.         ) 
  63.  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昭平县| 外汇| 台安县| 临城县| 前郭尔| 新巴尔虎左旗| 曲松县| 乐亭县| 竹山县| 澳门| 北安市| 通化县| 红原县| 邹平县| 西平县| 齐齐哈尔市| 涡阳县| 平乡县| 格尔木市| 平武县| 惠水县| 县级市| 秦安县| 新河县| 湖州市| 墨江| 格尔木市| 梁山县| 新绛县| 永登县| 滨海县| 建宁县| 江津市| 东乌珠穆沁旗| 无锡市| 辽宁省| 上饶县| 崇文区| 邹城市| 大兴区| 凌云县|