9
votes

Php mysql et géolocalisation

J'écris un site qui cherche essentiellement des endroits dans un rayon de 25 milles d'une lat et longue avec PHP et MySQL.

Je me demande comment quelque chose comme ça fonctionnerait?

Je voudrais Passez un lat et de long au scripre et tirez-le uniquement des emplacements situés à moins de 25 milles du lat et de la base de ma base de données d'emplacements.

Quelle est la meilleure façon de faire cela?

EDIT: J'ai trouvé ce code pour calculer la distance entre 2 points. xxx

est un moyen de faire ce calcité dans la recherche mysql afin que je ne puisse retourner que si miles = <25 ?


3 commentaires

D'où vient-il d'autres endroits? Avez-vous l'emplacement de l'emplacement de la localisation ou la base de données de l'emplacement de l'emplacement?


J'ai édité la question. J'aurai certains endroits dans ma base de données et je verrai si l'un d'entre eux se trouvent à moins de 25 km. Sinon, aucun n'est retourné.


Quelque plus d'informations ici: Stackoverflow.com/Questions/20865747/geolocation-mysql-query < / a>


3 Réponses :



0
votes

Vous pouvez le faire facilement en deux étapes:

  • Trouvez tous les emplacements dans un rayon de 25 miles dans chaque direction du point. Cela ressemblera à: où set entre $ latc et $ lat2 et gng entre $ LNG1 et $ lng2 code> p> p> p> p> p> p> p> p> p> p> p> p> p> p> p> p> P> P> P> P> P> P> P> P> P> P> P> P> P> P> L>

  • puis en boucle à travers chaque résultat et vérifiez s'il est réellement à moins de 25 miles à l'aide de votre code. (C'est-à-dire, filtrez ces emplacements qui sont dans les coins de la place.) p> li> ul>

    Pour la première partie, voici un code que je me pose (ne vous souvenez pas de la source): p>

    $lat_range = $radius / ((6076 / 5280) * 60);
    $lng_range = $radius / (((cos(($city['lat'] * 3.141592653589 / 180)) * 6076) / 5280) * 60);
    


2 commentaires

Cela a bien sûr l'inconvénient d'avoir besoin de deux étapes de filtrage, car elle renvoie des lignes inutiles.


Oui, mais cela évite d'effectuer des calculs contre toute la base de données. Avec un petit rayon et un vaste ensemble de données, cela peut être important.