PHP uses the geo command of Redis

Keywords: PHP Redis CentOS

Notes: CentOS 6.9 source compilation and installation of redis and PHP redis extension
I like to climb mountains. When I study GEO, I also demonstrate the coordinates of mountains. My coordinates are:
116.517159,39.922267
I sorted out the coordinates of some mountains

$mountainCoordinates = array(
    array('115.793844', '40.584459', 'Hai_tuo'),//Haituoshan coordinates
    array('115.056232', '39.948933', 'Small_wutai'),//Xiaowutaishan coordinates
    array('114.173822', '27.474563', 'Wu_gong'),//Wugong Mountain coordinates
    array('111.341648', '25.518178', 'Leek_ridge'),//Leek ridge coordinates
    array('103.901761', '31.60487', 'Jiu_ding'),//Jiudingshan coordinates
    array('107.398009', '34.057777', 'Ao_Shan'),//Ao Shan coordinates
);

1. Add coordinates to the key of mountain coordinates

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();
}

results of enforcement

int(1)
int(1)
int(1)
int(1)
int(1)
int(1)

2. Get coordinates

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();
}

results of enforcement

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. Calculate the distance between two coordinates

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();
}

Execution result: the distance between Haituo mountain and Xiaowutai Mountain is 94.4219km

string(7) "94.4219"

4. Take my coordinates as the origin and take the coordinates according to the radius of 100km (find the mountain within 100km from me)

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();
}

Execution result: only haituoshan, 95.8884km away from me

Array
(
    [0] => Array
        (
            [0] => Hai_tuo
            [1] => 95.8884
            [2] => Array
                (
                    [0] => 115.79384654760360718
                    [1] => 40.58445845049069334
                )

        )

)

5. Take my coordinates as the origin and take the coordinates according to the radius of 1500km (find the mountain within 1500km from me)

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();
}

Execution result: 5 mountains were found

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. Take the coordinates of Xiaowutai Mountain as the origin, and take the coordinates according to the radius of 1000km (find the mountain within 1000km from Xiaowutai Mountain)

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();
}

Execution result: excluding Xiaowutai, we found Aoshan and haituoshan

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
                )

        )

)

Original address: https://www.jmsite.cn/blog-578.html

Posted by Dorin85 on Thu, 21 Nov 2019 08:35:35 -0800