web-dev-qa-db-fra.com

Interrogé dans la longitude et la latitude dans MySQL

Avant de demander des exemples de code spécifiques, je voulais juste demander s'il est possible de faire une requête quelque chose comme ce pseudo code:

sélectionnez les éléments du tableau où Lat/Lon = -Within x miles d'un certain point/lon

Est-ce que c'est faisable? Ou dois-je sauter à travers des cerceaux? Toutes les bonnes approches pouvant être recommandées seraient super!

25
Genadinik

Vous devriez rechercher la formule Haversine, mais un bon départ pourrait être:

Citant de la première URL:

Voici l'instruction SQL qui trouvera les 20 emplacements les plus proches situés dans un rayon de 25 milles à la coordonnée 37, -122. Il calcule la distance en fonction de la latitude/longitude de cette ligne et de la latitude/longitude cible, puis ne demande que des lignes uniquement lorsque la valeur de distance est inférieure à 25, commande toute la requête de distance et la limite à atteindre 20 résultats. Pour rechercher par kilomètres au lieu de miles, remplacez 3959 avec 6371.

SELECT
    id,
    ( 3959
      * acos( cos( radians(37) )
              * cos(  radians( lat )   )
              * cos(  radians( lng ) - radians(-122) )
            + sin( radians(37) )
              * sin( radians( lat ) )
            )
    )
    AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20;
56
daroczig