J'ai une table mySQL avec le nom d'utilisateur, la latitude et la longitude de l'utilisateur. Je voudrais obtenir une liste d'utilisateurs qui sont à l'intérieur du cercle ou du carré d'une latitude et d'une longitude données avec une distance donnée. Par exemple, mon entrée Lat = 78,3232 et Long = 65,3234 et la distance = 30 miles. Je voudrais obtenir la liste des utilisateurs qui se trouvent à moins de 30 miles du point 78.3232 et 65.3234. Est-il possible de résoudre ce problème avec une seule requête? Ou pouvez-vous me donner un indice pour commencer à résoudre cette requête? Je suis nouveau dans les informations géo-basées.
20
Réponses:
L'instruction SQL qui trouvera les 20 emplacements les plus proches dans un rayon de 30 miles par rapport aux coordonnées 78,3232, 65,3234. Il calcule la distance en fonction de la latitude / longitude de cette ligne et de la latitude / longitude cible, puis demande uniquement les lignes dont la valeur de distance est inférieure à 30 miles, ordonne la requête entière par distance et la limite à 20 résultats. Pour rechercher par kilomètres au lieu de miles, remplacez 3959 par 6371.
Cela utilise l'API Google Maps v3 avec un backend MySQL que vous avez déjà.
https://developers.google.com/maps/articles/phpsqlsearch_v3#findnearsql
la source
La réponse de Mapperz n'est pas valide. Le sinus doit être calculé à partir de la latitude et NON à partir de la longitude. Donc, l'instruction SQL corect est:
la source
Il peut être utile de créer une fonction. Vous pouvez donc la réutiliser dans d'autres domaines. Cela rendrait également votre requête un peu plus propre ... Au moins, c'est mes 2 cents.
la source
Voici ma variante de requête, semble un peu plus facile ( http://dexxtr.com/post/83498801191/how-to-determine-point-inside-circle-using-mysql )
la source