8797 sujets

Développement web côté serveur, CMS

Bonsoir,

je développe actuellement un système permettant d'afficher une liste de communes dans un certain rayon à partir d'une commune donnée...

Voici le fichier php qui effectue cette opération avec pour exemple Avignon en point de départ :


<?php
include('connect.php');

$ville = "Avignon";
$lat = 0.767072206;
$lng = 0.084066698;

$distances = 50;

$sql = "SELECT * FROM `villes` WHERE ".(((acos(sin(($lat*pi()/180)) * sin((LatitudeRadian*pi()/180)) + cos(($lat*pi()/180)) * cos((LatitudeRadian*pi()/180)) * cos((($lng - LongitudeRadian)*pi()/180))))*180/pi())*60*2.133)." <= ".$distances."";
$result = mysql_fetch_array(mysql_query($sql));

echo "<p>Liste des communes autour d'un rayon de ".$distances." kms de ".$ville.".</p>";

print_r($result);


?>



Je me suis servi de ce site pour trouver la formule.

Voici ce que j'affiche :

a écrit :

SELECT * FROM `villes` WHERE [B]98.7576605344 <= 50[/B]
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Documents and Settings\Api\Bureau\xampp\htdocs\villes\liste_villes.php on line 11

Liste des communes autour d'un rayon de 50 kms de Avignon.


N'y aurait-il pas une meilleure façon de l'écrire ? Car le calcul n'est pas cohérent (98.7576605344 <= 50)... Où est l'erreur ? :?

Merci de m'aiguiller s'il vous plaît Smiley ravi
Modifié par Api1000 (28 Jul 2008 - 09:28)
Salut,

ben je ne comprends pas trop comment tu peux arriver à une requête dans laquelle les champs sont remplacés par des valeurs... Smiley rolleyes

Que sont devenus LatitudeRadian et LongitudeRadian ?

Autre question : de quels types sont les champs en question dans ta base ?
Api1000 a écrit :
LatitudeRadian et LongitudeRadian sont des champs de ma table villes de type Float
Cela me semble bon... et pour ma première question ? Comment se fait-il que tu ne retrouves pas ces champs dans ta requête ?
Je suis pas sur de bien comprendre...
Ces champs figurent dans ma requête. Peut-être que je les exploite mal ? Smiley confus

Je sais que cette formule est exacte mais je ne sais pas comment bien l'intégrer dans ma requête...

Une idée ?

Merci !
Api1000 a écrit :
Ces champs figurent dans ma requête. Peut-être que je les exploite mal ? Smiley confus
Ce que je ne comprends pas c'est comment tu peux avoir
a écrit :
SELECT * FROM `villes` WHERE 98.7576605344 <= 50
Même quand une requête plante on voit toujours le nom des champs Smiley rolleyes .



Edit: Ah OK ! J'ai vu. Il faut remplacer
$sql = "SELECT * FROM `villes` WHERE ".(((acos(sin(($lat*pi()/180)) * sin((LatitudeRadian*pi()/180)) + cos(($lat*pi()/180)) * cos((LatitudeRadian*pi()/180)) * cos((($lng - LongitudeRadian)*pi()/180))))*180/pi())*60*2.133)." <= ".$distances."";
par
$sql = "SELECT * FROM `villes` WHERE (((acos(sin(($lat*pi()/180)) * sin((LatitudeRadian*pi()/180)) + cos(($lat*pi()/180)) * cos((LatitudeRadian*pi()/180)) * cos((($lng - LongitudeRadian)*pi()/180))))*180/pi())*60*2.133) <= $distances";

Modifié par Heyoan (28 Jul 2008 - 14:41)
Merci je testerai ça ce soir en rentrant du boulot et je te dirai Smiley cligne

A tout hasard, as-tu testé si ça marchait ?
Api1000 a écrit :
A tout hasard, as-tu testé si ça marchait ?
Non mais ce qui est sûr c'est que désormais la requête ressemble à une requête (avec des variables) et qu'elle a beaucoup plus de chances de fonctionner ! Smiley ravi