php : redis 使用 地理空间(geospatial)

 直接上代码:

//geoAdd:将给定的空间元素(经度、纬度、名字)添加到指定的键里面。 这些数据会以有序集合的形式被储存在键里面, 从而使得像 GEORADIUS 和 GEORADIUSBYMEMBER 这样的命令可以在之后通过位置查询取得这些元素
//geoAdd($key, $longitude(经度), $latitude(纬度), $name [, $longitude, $latitude, $member, ...]);
        $redis->del("myplaces");
        //key值是否存在
        $redis->exists("myplaces");
        //有效的经度是-180度到180度
        //有效的纬度是-85.05112878度到85.05112878度 (只要出现无效经纬度所有数据会添加失败)
        $result = $redis->geoAdd('myplaces', '-157.478799', '21.235456', 'Honolulu', '116.404269', '39.91582', 'beijing', '121.47879', '31.235456', 'shanghai');
        dump($result);
//geoHash(key,name1,name2,namen)  返回一个或多个位置元素的Geohash字符串     返回一个或多个元素组成的Geohash字符串数组
        $hashes = $redis->geoHash("myplaces", "San Francisco", "Honolulu","beijing","shanghai");//['87z9pyek3y0','8e8y6d5jps0']
        dump($hashes);
//geoPos(key,name1,name2,namen):从键里面返回所有给定位置元素的位置(经度和纬度) 命令返回一个数组, 数组中的每个项都由两个元素(经度,纬度)组成
        $positions = $redis->geoPos("myplaces", "San Francisco", "Honolulu");//[[37.773, -122.431],[-157.858, 21.315]]
        dump($positions);
//GeoDist(key,name1,name2 [, $unit='m']):返回两个给定位置之间的距离 unit包含m、km、mi(英里)、ft(英尺)
        $kilometers  = $redis->geoPos("myplaces", "San Francisco", "Honolulu",'km');//168.2752
        dump($kilometers);
//geoRadius($key, $longitudee(经度), $latitude(纬度), $radius(半径), $unit [, Array $options]):以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大半径radius距离的所有位置元素
        dump($redis->geoRadius("myplaces", 123.858, 42.306, 10000, 'km'));

        //表示10000km范围的提取2个
        $options['count'] = 2;
        //ASC|DESC
        $options[] = 'ASC';
        //WITHCOORD:还返回匹配项目的经度,纬度坐标。
        $options[] = 'WITHCOORD';
        //WITHDIST:还要返回指定中心返回物品的距离。距离以与指定为命令的半径参数的单位相同的单位返回。
        $options[] = 'WITHDIST';
        dump($redis->geoRadius("myplaces", 123.858, 42.306, 10000, 'km', $options));
//geoRadiusByMember($key, $name, $radius, $units [, Array $options]):作用和    geoRadius一样只是原点是name决定而不是像geoRadius输入经度和纬度来决定
        dump($redis->geoRadiusByMember("myplaces", "shanghai", 3000, 'km'));

执行结果: 

int(3)
array(4) {
  [0] => bool(false)
  [1] => string(11) "8eb0b3z3w00"
  [2] => string(11) "wx4g0f7n800"
  [3] => string(11) "wtw3sq4psz0"
}
array(2) {
  [0] => array(0) {
  }
  [1] => array(2) {
    [0] => string(22) "-157.47879713773727417"
    [1] => string(20) "21.23545663354175161"
  }
}
array(3) {
  [0] => array(0) {
  }
  [1] => array(2) {
    [0] => string(22) "-157.47879713773727417"
    [1] => string(20) "21.23545663354175161"
  }
  [2] => array(0) {
  }
}
array(3) {
  [0] => string(8) "shanghai"
  [1] => string(7) "beijing"
  [2] => string(8) "Honolulu"
}
array(2) {
  [0] => array(3) {
    [0] => string(7) "beijing"
    [1] => string(8) "678.5471"
    [2] => array(2) {
      [0] => string(21) "116.40426903963088989"
      [1] => string(20) "39.91581928642635546"
    }
  }
  [1] => array(3) {
    [0] => string(8) "shanghai"
    [1] => string(9) "1249.2980"
    [2] => array(2) {
      [0] => string(21) "121.47878855466842651"
      [1] => string(20) "31.23545629441388627"
    }
  }
}
array(2) {
  [0] => string(8) "shanghai"
  [1] => string(7) "beijing"
}
array(1) {
  [0] => array(0) {
  }
}

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值