Maison > base de données > tutoriel mysql > Comment sélectionner des points dans un cercle à l'aide des extensions spatiales MySQL et de la latitude/longitude ?

Comment sélectionner des points dans un cercle à l'aide des extensions spatiales MySQL et de la latitude/longitude ?

Mary-Kate Olsen
Libérer: 2025-01-06 12:23:41
original
379 Les gens l'ont consulté

How to Select Points Within a Circle Using MySQL Spatial Extensions and Latitude/Longitude?

Extensions spatiales MySQL : sélection de points dans un cercle en fonction de la latitude/longitude

Arrière-plan :

MySQL peut stocker des données géospatiales à l'aide de ses extensions spatiales. Cela permet une interrogation et une manipulation efficaces des objets spatiaux, notamment des points, des lignes et des polygones. Une tâche courante consiste à sélectionner des points dans un rayon spécifié à partir d'un emplacement donné.

Utilisation des extensions géospatiales :

Pour effectuer cette tâche, MySQL fournit plusieurs fonctions géospatiales, notamment Buffer (), qui crée une zone tampon autour d'un point ou d'une ligne. Cependant, il est important de noter que MySQL ne prend pas nativement en charge les calculs de proximité basés sur la latitude et la longitude.

Approche alternative :

Pour déterminer des points dans un cercle en fonction de latitude et longitude, une approche différente est nécessaire. La formule de la distance du grand cercle peut être utilisée pour calculer la distance entre deux points à la surface de la Terre. Cela peut être incorporé dans une requête MySQL pour filtrer les points dans un rayon spécifié.

Exemple de requête :

La requête suivante montre comment utiliser la formule de distance orthodromique pour sélectionnez des drapeaux dans un rayon de 100 mètres d'une latitude et d'une longitude données :

SELECT id, coordinates, name, r,
        units * DEGREES(ACOS(LEAST(1.0, COS(RADIANS(latpoint))
                  * COS(RADIANS(latitude))
                  * COS(RADIANS(longpoint) - RADIANS(longitude))
                  + SIN(RADIANS(latpoint))
                  * SIN(RADIANS(latitude))))) AS distance
   FROM flags
   JOIN (
        SELECT 42.81  AS latpoint,  -70.81 AS longpoint, 
               10.0 AS r, 69.0 AS units
        ) AS p ON (1=1)
  WHERE MbrContains(GeomFromText (
        CONCAT('LINESTRING(',
              latpoint-(r/units),' ',
              longpoint-(r /(units* COS(RADIANS(latpoint)))),
              ',', 
              latpoint+(r/units) ,' ',
              longpoint+(r /(units * COS(RADIANS(latpoint)))),
              ')')),  coordinates)
Copier après la connexion

Dans cette requête, les paramètres latpoint et longpoint représentent le l'emplacement de l'utilisateur. Les paramètres r et unités spécifient le rayon (en mètres) et les unités de distance par degré de latitude.

Considérations supplémentaires :

  • La requête ci-dessus calcule les distances en utilisant la formule de distance du grand cercle, qui est plus précise que la distance cartésienne pour les latitudes et les longitudes.
  • Pour limiter les résultats aux points à l'intérieur du cercle, ajoutez un Clause WHERE pour filtrer les distances inférieures ou égales au rayon.
  • Classez les résultats par distance pour afficher en premier les drapeaux les plus proches.
  • L'indexation spatiale sur la colonne de coordonnées peut améliorer considérablement les performances des requêtes.

En suivant cette approche, vous pouvez sélectionner efficacement des points dans un cercle en fonction de la latitude et de la longitude, vous permettant ainsi de créer des applications basées sur la localisation à l'aide de l'outil spatial MySQL. extensions.

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!

source:php.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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal