PHP utilise la commande GEO (localisation géographique) de Redis

藏色散人
Libérer: 2023-04-06 14:52:01
avant
4237 Les gens l'ont consulté

Redis a ajouté la prise en charge de GEO (localisation géographique) depuis la version 3.2, mais la terre n'est pas une sphère parfaite et l'écart peut être de 0,5 % dans le pire des cas. Les zones proches des pôles ne sont pas prises en charge. La longitude valide des coordonnées prises en charge est de -180 degrés à 180 degrés ; la latitude valide est de -85,05112878 degrés à 85,05112878 degrés. Si elle dépasse la plage, une erreur sera signalée.

PHP utilise la commande GEO (localisation géographique) de Redis

J'aime escalader des montagnes Quand j'apprenais le GEO, j'ai aussi utilisé les coordonnées des montagnes pour démontrer Mes coordonnées sont :

116.517159,39.922267
Copier après la connexion

J'ai compilé. quelques coordonnées de montagne Coordonnées

$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'),//鳌山坐标
);
Copier après la connexion

1. Ajoutez les coordonnées

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();
}
Copier après la connexion

à la clé de mountainCoordonnées Résultat de l'exécution

int(1)
int(1)
int(1)
int(1)
int(1)
int(1)
Copier après la connexion

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();
}
Copier après la connexion

Résultat de l'exécution

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
        )
)
Copier après la connexion

3 Calculer la distance entre les deux coordonnées

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();
}
Copier après la connexion

Résultat de l'exécution : La distance entre la montagne Haituo et La montagne Xiaowutai est à 94,4219 km

string(7) "94.4219"
Copier après la connexion

4 Prenez mes coordonnées comme origine et obtenez les coordonnées selon le rayon de 100 km (trouver les montagnes à moins de 100 kilomètres de moi)

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();
}
Copier après la connexion
.

Résultat de l'exécution : seulement la mer Tuoshan, à 95,8884km de moi

Array
(
    [0] => Array
        (
            [0] => Hai_tuo
            [1] => 95.8884
            [2] => Array
                (
                    [0] => 115.79384654760360718
                    [1] => 40.58445845049069334
                )
        )
)
Copier après la connexion

5 En prenant mes coordonnées comme origine, prendre les coordonnées selon le rayon de 1500km (trouver les montagnes à moins de 1500. kilomètres de moi)

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();
}
Copier après la connexion

Résultats de l'exécution : 5 montagnes ont été trouvées

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
                )
        )
)
Copier après la connexion

6 En prenant les coordonnées de la montagne Xiaowutai comme origine, prendre les coordonnées en fonction d'un rayon. de 1000 km (trouver les montagnes à moins de 1000 kilomètres de la montagne Xiaowutai)

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();
}
Copier après la connexion

Résultats de l'exécution : à l'exclusion de Xiaowutai lui-même, Aoshan et la montagne Haituo ont été trouvées

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
                )
        )
)
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jmsite.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!