Comment calculer la distance entre lat/long en php?
Ce que je suis en train de faire c'est que j'ai des entrées dans la base de données qui ont un lat/long stockées avec eux. Je veux calculer la distance entre les utilisateurs lat/long et entrées lat/long (en DB). Après ça, je veux faire écho à ceux avec la distance à moins de 500 mètres. Jusqu'à présent, je suis en mesure de le faire à l'aide de foreach
.
<?php
mysql_connect("localhost", "beepbee_kunwarh", "kunwar") or die('MySQL Error.');
mysql_select_db("beepbee_demotest") or die('MySQL Error.');
$Lat = $_REQUEST['Lat'];
$long = $_REQUEST['long'];
$query = mysql_query("SELECT a.*, 3956 * 2 * ASIN(SQRT( POWER(SIN(($Lat - Lat) * pi()/180 /2), 2) + COS($Lat * pi()/180) * COS(Lat * pi()/180) *POWER(SIN(($long - long) * pi()/180 /2), 2) )) as distance FROM userResponse GROUP BY beepid HAVING distance <= 500 ORDER by distance ASC;");
$data = array();
while ($row = mysql_fetch_array($query)) {
$data[] = $row;
}
echo json_encode($data);
?>
Quel est le problème avec votre code?
son est le calcul de la même distance pour toutes les entrées, fondamentalement, je n'ai aucune idée de wat valeurs sont passé dans $lon2 = $data [$] ["long"]; $lat2 = $data [$] ["Lat"];
double possible de plus Rapide de la distance de recherche compte tenu de la latitude/longitude?
Tu as complètement changé le code dans votre question... C'est maintenant le calcul en SQL et pas en PHP. Pouvez-vous expliquer pourquoi/quel est le problème maintenant?
sa me donne erreur sur la ligne while ($row = mysql_fetch_array($query))
son est le calcul de la même distance pour toutes les entrées, fondamentalement, je n'ai aucune idée de wat valeurs sont passé dans $lon2 = $data [$] ["long"]; $lat2 = $data [$] ["Lat"];
double possible de plus Rapide de la distance de recherche compte tenu de la latitude/longitude?
Tu as complètement changé le code dans votre question... C'est maintenant le calcul en SQL et pas en PHP. Pouvez-vous expliquer pourquoi/quel est le problème maintenant?
sa me donne erreur sur la ligne while ($row = mysql_fetch_array($query))
OriginalL'auteur iPhoneDev | 2011-10-06
Vous devez vous connecter pour publier un commentaire.
Je l'ai fait il y a quelques semaines.
Ce lien est votre meilleur pari:
http://code.google.com/apis/maps/articles/phpsqlsearch.html
Même si vous n'avez pas l'utilisation de leur API, leur PHP et SQL de la requête a aidé à vraiment bien.
OriginalL'auteur Latox
je ne recommanderais pas le dumping des calculs de distance dans votre instruction sql, même si j'avoue que la solution présentée par "denil' est ingénieux.
il y a 3 inconvénients: la maintenance du code, sql server surcharge ET (surtout) la terre n'est pas symétrique (c'est comme un vieux cabossé de baseball qui a été écrasé par un camion). cela signifie que vous pouvez changer le code dans le futur (il y a des algorithmes sophistiqués, il http://en.wikipedia.org/wiki/Geographical_distance).
je recommande l'utilisation d'une fonction spécifique qui calcule la distance avec une simple commune de l'algorithme similaire, voire identique à denil). je remets ce code, qui est pure php (pas besoin d'utiliser l'api googlemaps):
il y a un certain nombre de logiciels libres (essayez de gps trackmaker) qui vous permettra de vérifier la marge d'erreur de votre part dans le monde (si vous avez besoin de précision). pour le dessus de lat/long de la paire, l'erreur est de +/- 0.1% (selon les topographes).
ATTENTION: cette formule vous donne CARTOGRAPHIQUE de la distance (distance au niveau de la mer), pas TOPOGRAPHIQUES distance (disconsiders topographie).
oui, mètres. mon mauvais 🙁
OriginalL'auteur tony gil
Essayer cette requête. J'ai trouvé lors de recherches sur google, mais j'ai oublié qui l'a créé
$lat et $variable de type long est la position actuelle de l'utilisateur. lat et longi est la latitude et la longitudle des entrées
OriginalL'auteur denil
http://www.geodatasource.com/developers/php
OriginalL'auteur lbsweek
Testé comme 3 les fonctions et les 3 requêtes et un seul a montré une bonne distance:
En mètres:
En kilomètres:
OriginalL'auteur Roman Losev
Cette requête a été parfait pour moi:
OriginalL'auteur Ragnar
Simple et facile
OriginalL'auteur Riajul Islam
Utilisation à distance de la matrice de l'api google pour calculer la distance entre la latitude et la longitude.
utilisation de cette api, vous aurez besoin de la clé,pour en savoir plus sur la façon de générer la clé de visite https://developers.google.com/maps/documentation/distance-matrix/intro
OriginalL'auteur sabin