Calcul des coordonnées GPS dans un rayon de x km

toutoune60
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 5
Inscription: 14 Juil 2005

Calcul des coordonnées GPS dans un rayon de x km

Message le Ven Mai 25, 2007 15:11

Bonjour à tous,
Je géolocalise des données d'un site selon le code postal du lieu où elles se trouvent.
J'ai en parallèle une table avec les villes corrspondantes ainsi que leurs coordonnées GPS...

Je voudrais pouvoir effectuer une recherche sur ces données en spécifiant un code postal ainsi qu'un rayon.
Je pense que pour simplifier et pour pouvoir le faire d'une requête SQL, il faudra que je restreigne en fait au carré donc le cercle est inscrit dedans (lattitudes et longitudes comprises entre 2 bornes).
Mon problème c'est pour trouver ces valeurs de bornes!

J'ai bien le calcul suivant qui me donne la distance entre 2 points. Mais moi j'ai un point et un rayon et je ne m'en sors pas... :(

Code: Tout sélectionner
d = R * (pi/2 - asin ( sin x1 * sin x2 + cos ( y1 - y2 ) * cos x1 * cos x2 ))


avec
d distance entre les 2 points
R rayon de la Terre
x1 lattitude en radians du 1er point
x1 lattitude en radians du 2eme point
y1 longitude en radians du 1er point
y1 longitude en radians du 2eme point

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2461
Inscription: 30 Aoû 2002

Message le Ven Mai 25, 2007 17:23

Latitude : 1°=+-111 km

Longitude, ça dépend de la latitude :
à nice 1°=+-82 km
à Lille 1°=+-71 km

Tu peux prendre 76 km de moyenne pour la france, ce sera plus simple

et donc, pour un carré de coté 2d centré sur ton point, il faudra chercher les LAT et LONG telles que :
LATpt - d/111 < LAT < LATpt + d/111
LONGpt - d/76 < LONG < LONGpt + d/76

avec :

d distance en km
LATpt, LONGpt coordonnées de ton point en décimal.

J'ai mis en place ça pas plus tard que la semaine dernière. ici : http://www.vttour.fr/topos/recherche.php (avec une intégration qui peut te donner des idées)

a+

toutoune60
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 5
Inscription: 14 Juil 2005

Message le Ven Mai 25, 2007 17:41

Super, donc j'en déduis que la solution du carré 2D centré sur le point est le plus simple d'un point de vue requêtage SQL?

Sinon tu connais la formule permettant de calculer à quoi correspond 1° de longitude à un point donné de manière précise?

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2461
Inscription: 30 Aoû 2002

Message le Ven Mai 25, 2007 18:07

D'un point de vue SQL, beaucoup plus simple de faire un carré, et ça consomme beaucoup moins de ressources.

latitude: circonférence de la terre=40000 km=360° d'angle > 1°=111 km

Longitude :
1° : 111km à l'équateur et 0km au pôle avec une rep sinusoidale

distance_longitude=111*cos(LAT)

avec
distance_longitude en km
LAT en radians




:wink:

toutoune60
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 5
Inscription: 14 Juil 2005

Message le Ven Mai 25, 2007 23:16

Merci beaucoup! Je l'ai mis en place, avec à chaque fois calcul du pas de la longitude en fonction du point central. Ca marche impecc'! Merci :D

anounou
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 2
Inscription: 12 Juin 2007

Message le Mar Juin 12, 2007 10:20

Bonjour,

Je me sers actuellement de vos explications, mais je rencontre un problème au niveau de ma requete sql et je voulais savoir comment vous procédiez pour vos requetes.

Voilà comment j'écris ma requete :

Cette requete fonctionne parfaitement :
select * from `spip_communes` where (`lat` between 46.9 and 47.1) and (`long` between 0.47 and 0.49)

Alors que la suivante ne fonctionne pas du tout (lorsque je dis ne fonctionne pas, elle ne me propose aucun résultat alors qu'il devrait proposé quelques réponses) :
select * from `spip_communes` where (`lat` between 46.9 and 47.1) and (`long` between -0.47 and -0.49)

Je crois que le soucis provient des valeurs négative qui se trouve dans la requete. Pouvez vous m'aider s'il vous plait!

Merci d'avance pour votre réponse.

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2461
Inscription: 30 Aoû 2002

Message le Mar Juin 12, 2007 16:09

essaie peut être
1/ de mettre des quote pour les valeurs : '-0.47'
2/ d'inverser les valeurs, car en négatif le plus 'petit' c'est 0.49 : between -0.49 and -0.47

anounou
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 2
Inscription: 12 Juin 2007

Message le Mar Juin 12, 2007 16:25

jeroen a écrit:essaie peut être
1/ de mettre des quote pour les valeurs : '-0.47'
2/ d'inverser les valeurs, car en négatif le plus 'petit' c'est 0.49 : between -0.49 and -0.47


Merci d'avoir répondu rapidement, il s'agit de la deuxième solution.
C'était tout simple :oops:

Merci pour le conseil :wink:


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google Latitude

  • Calcul du taux de backlinks vers pages internes
    Cet outil vous permet de calculer le taux de liens profonds vers un site web. Un lien profond est un lien qui ne pointe pas vers la page d'accueil mais au contraire vers une page interne du site. Les sites dont l'essentiel du référencement vient de leurs inscriptions dans des annuaires ont un taux de liens profonds faible ; à l'inverse, les sites de référence ont souvent un taux de liens profonds plus important, signe que leur contenu a suscité de nombreux liens spontanés.
  • Calcul de l'indice de cooccurrence
    Cet outil vous permet de calculer l'indice de co-occurrence de 2 ou 3 termes, ainsi que le ratio E/F. L'indice de co-occurrence mesure le relation entre les termes : plus cet indice est élevé, plus les termes sont reliés. Concrètement, plus l'indice est élevé, plus il est fréquent de trouver des documents qui contiennent les différents termes.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité