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? P>
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. P>
Quelle est la meilleure façon de faire cela? P >
EDIT:
J'ai trouvé ce code pour calculer la distance entre 2 points. P> est un moyen de faire ce calcité dans la recherche mysql afin que je ne puisse retourner que si miles = <25 ? p> p>
3 Réponses :
Calcul de la distance à l'aide de cette fonction, il est assez coûteux de calcul, car cela implique un tas de fonctions transcendantales. Cela va être problématique lorsque vous avez un grand nombre de lignes à filtrer.
Voici une alternative, une approximation de manière moins coûteuse: p>
distance approximative en miles: p> < Pré> xxx pré>
Vous pouvez améliorer la précision de ce calcul de distance approximative en ajoutant la fonction mathématique cosinoise: p>
amélioration de la distance approximative en miles: p> Source: http://www.meridianworlddata.com/distance-calculation.asp < / a> p> J'ai couru un tas d'essais avec des jeux de données générés aléatoirement. p> définitivement pas la peine. Juste aller avec une approximation. à utiliser Ceci sur MySQL, créez un Procédure stockée qui prend des arguments de coordonnées et Renvoie la distance, alors vous pouvez faire quelque chose comme: p>
Le code est ici: http://pastebin.org/424186 p>
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 à: 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> 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>
$lat_range = $radius / ((6076 / 5280) * 60);
$lng_range = $radius / (((cos(($city['lat'] * 3.141592653589 / 180)) * 6076) / 5280) * 60);
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.
Vous voudrez peut-être jeter un coup d'œil sur Cette solution < / a> - une solution de contournement quelque peu brillante. P>
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>