


Comment implémenter la recherche de personnes à proximité en php
Comment implémenter la recherche de personnes à proximité en PHP : déclarez d'abord une fonction pour calculer la plage de longitude et de latitude, puis recherchez tous les enregistrements qui remplissent les conditions dans cette plage de longitude et de latitude dans la base de données ; la longitude et la latitude en "$radius ". Les adresses détaillées des centrales électriques situées à proximité suffisent.
Recommandé : "Tutoriel vidéo PHP》
Un projet récent nécessite d'interroger les personnes à moins de dix kilomètres de l'utilisateur en fonction de la longitude et de la latitude de l'emplacement actuel de l'utilisateur. Cette fonction n'est pas une implémentation très technique (bien sûr, nous faisons uniquement référence au. Lorsque la fonction elle-même et la quantité de données sont petites, cela n'inclut pas les autres problèmes qui en découlent depuis longtemps), mais pour diverses considérations, j'ai décidé de l'enregistrer.
À l'avenir, que nous soyons engagés dans le développement de serveurs APP ou dans le développement WEB, les clients pourront souvent demander la mise en œuvre d'une telle fonction, nous devons donc encore maîtriser ses principes.
[Problème soulevé]
Comment devrions-nous penser à ce problème ? Certains amis voudront peut-être dire : « Maintenant que nous connaissons déjà la longitude et la latitude de l'utilisateur actuel, nous interrogeons la longitude et la latitude de l'utilisateur dans la base de données, puis les calculons un par un pour filtrer tous les utilisateurs qualifiés
Je l'ai pris une fois pour acquis et je n'ai pas pris en compte les sensations de la base de données. Lorsque vous exploitez une base de données à l'échelle de cent mille ou d'un million, les problèmes causés par une telle approche seront donc catastrophiques. que devons-nous faire ? [Idée de mise en œuvre]Tout d'abord, nous devrions penser comme ceci : maintenant que nous connaissons la longitude et la latitude de l'emplacement actuel de l'utilisateur et la plage que nous allons rechercher, pouvons-nous calculer une fourchette ? C'est-à-dire, en fonction d'un point central et d'un rayon, calculer les valeurs maximales et minimales de longitude et de latitude qui remplissent les conditions. [Mise en œuvre détaillée]Ça y est, les amis qui veulent penser de manière indépendante et le compléter, ne lisez pas plus loin. Nous avons mentionné ci-dessus un principe de mise en œuvre de cette fonction. Ensuite, nous expliquerons les étapes spécifiques de mise en œuvre. Nous déclarons d'abord une fonction pour calculer la plage de latitude et de longitude :/** * 根据经纬度和半径计算出范围 * @param string $lat 纬度 * @param String $lng 经度 * @param float $radius 半径 * @return Array 范围数组 */private function calcScope($lat, $lng, $radius) { $degree = (24901*1609)/360.0; $dpmLat = 1/$degree; $radiusLat = $dpmLat*$radius; $minLat = $lat - $radiusLat; // 最小纬度 $maxLat = $lat + $radiusLat; // 最大纬度 $mpdLng = $degree*cos($lat * (PI/180)); $dpmLng = 1 / $mpdLng; $radiusLng = $dpmLng*$radius; $minLng = $lng - $radiusLng; // 最小经度 $maxLng = $lng + $radiusLng; // 最大经度 /** 返回范围数组 */ $scope = array( 'minLat' => $minLat, 'maxLat' => $maxLat, 'minLng' => $minLng, 'maxLng' => $maxLng ); return $scope; }
/** * 根据经纬度和半径查询在此范围内的所有的 * @param String $lat 纬度 * @param String $lng 经度 * @param float $radius 半径 * @return Array 计算出来的结果 */public function searchByLatAndLng($lat, $lng, $radius) { $scope = $this->calcScope($lat, $lng, $radius); // 调用范围计算函数,获取最大最小经纬度 /** 查询经纬度在 $radius 范围内的电站的详细地址 */ $sql = 'SELECT `字段` FROM `表名` WHERE `Latitude` < '.$scope['maxLat'].' and `Latitude` > '.$scope['minLat'].' and `Longitude` < '.$scope['maxLng'].' and `Longitude` > '.$scope['minLng']; $stmt = self::$db->query($sql); $res = $stmt->fetchAll(PDO::FETCH_ASSOC); // 获取查询结果并返回 return $res; }
/** * 获取两个经纬度之间的距离 * @param string $lat1 纬一 * @param String $lng1 经一 * @param String $lat2 纬二 * @param String $lng2 经二 * @return float 返回两点之间的距离 */public function calcDistance($lat1, $lng1, $lat2, $lng2) { /** 转换数据类型为 double */ $lat1 = doubleval($lat1); $lng1 = doubleval($lng1); $lat2 = doubleval($lat2); $lng2 = doubleval($lng2); /** 以下算法是 Google 出来的,与大多数经纬度计算工具结果一致 */ $theta = $lng1 - $lng2; $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; return ($miles * 1.609344); }
La méthode de calcul de la distance de latitude et de longitude a été trouvée sur Google, et les résultats du calcul sont similaires à ceux de la plupart des outils de calcul. La raison pour laquelle j'ai cherché sur Google était parce que j'avais recherché diverses méthodes de calcul sur Baidu, mais les résultats n'étaient pas satisfaisants.
Lors du calcul de la portée par rayon, latitude et longitude, l'unité de rayon est m lors du calcul de la distance, le résultat est km. Soyez donc conscient des changements d’unités.
Je travaille toujours dur pour vérifier et demander l'aide d'un professionnel pour obtenir des résultats de calcul plus précis.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Travailler avec la base de données dans CakePHP est très simple. Nous comprendrons les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) dans ce chapitre.

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Se connecter à CakePHP est une tâche très simple. Il vous suffit d'utiliser une seule fonction. Vous pouvez enregistrer les erreurs, les exceptions, les activités des utilisateurs, les actions entreprises par les utilisateurs, pour tout processus en arrière-plan comme cronjob. La journalisation des données dans CakePHP est facile. La fonction log() est fournie

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c
