Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/01/2013, 11h36   #1
LeChacal47
Invité de passage
 
Homme Chacal
Développeur Web
Inscription : novembre 2012
Messages : 4
Détails du profil
Informations personnelles :
Nom : Homme Chacal
Localisation : France, Lot et Garonne (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2012
Messages : 4
Points : 2
Points : 2
Par défaut Requete coordonnée GPS lat long + angle boussole

Bonjour,
J'ai besoin de faire une requête SQL sur mysql 5 de géolocalisation pour donner tous les points à proximité.
J'ai une formule pour rechercher tous les points en fonction de leur coordonnée lat,long dans un rayon par exemple de 2km mais là j'ai besoins d'avoir seulement les points qui sont dans une partie du cercle définie grâce à l'angle de la boussole
Mais je n'arrive pas à rajouter se filtre. Avez vous une piste ?
Cordialement
LeChacal47 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 11h44   #2
darkwall_37
Membre éclairé
 
Homme Alex V
Etudiant administrateur systèmes et réseaux
Inscription : octobre 2007
Messages : 609
Détails du profil
Informations personnelles :
Nom : Homme Alex V
Âge : 24
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Etudiant administrateur systèmes et réseaux

Informations forums :
Inscription : octobre 2007
Messages : 609
Points : 378
Points : 378
Salut,

Elle est foutue comment ta table ?
Est ce que chaque point possède une entrèe qui donne son équivalent en angle boussole ?

Si oui, une clause between suffirait ?
Ton angle de boussole, c'est par exemple, je veux tous les points qui se trouvent entre 0 et Pi ?

Si oui,
Code :
1
2
3
SELECT id, name 
FROM point 
WHERE angle BETWEEN 0 AND PI
Cdt.
__________________
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
darkwall_37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 11h54   #3
LeChacal47
Invité de passage
 
Homme Chacal
Développeur Web
Inscription : novembre 2012
Messages : 4
Détails du profil
Informations personnelles :
Nom : Homme Chacal
Localisation : France, Lot et Garonne (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2012
Messages : 4
Points : 2
Points : 2
Merci alors je vous explique plus en détail.
J'ai une table ou j'ai 2 champ latitude et longitude.

et j'ai les coordonné gps latitude et longitude de ma position ainsi que l'angle donnée par la boussole.
Avec cette requête j'ai tous les points présent dans un rayon de (distance)

Code :
WHERE ( 6366 * acos( cos( radians( "+latitude+"  ) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians( "+longitude+" ) ) + sin( radians( "+latitude+" ) ) * sin( radians( latitude ) ) ) ) <= "+distance+"
La je voudrais pouvoir dire je veux tous les points dans un rayon de distance
et d'angle ( l'angle de ma boussole -10 à l'angle de la boussole +10)

J’espère que cela est plus claire
Donc dans ma table de points je ne peux pas stocke d'angle car l'angle est détermine par rapport à notre position GPS
LeChacal47 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 14h45   #4
darkwall_37
Membre éclairé
 
Homme Alex V
Etudiant administrateur systèmes et réseaux
Inscription : octobre 2007
Messages : 609
Détails du profil
Informations personnelles :
Nom : Homme Alex V
Âge : 24
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Etudiant administrateur systèmes et réseaux

Informations forums :
Inscription : octobre 2007
Messages : 609
Points : 378
Points : 378
Il te faut une autre fonction mathématique.
f(r,latitude,longitude) te donne l'E des points compris dans le cercle de rayon r d'origine (latitude, longitude).
Il te faut une fonction telle que
f(alpha1,alpha2,r,latitude,longitude) te donne l'E des points compris dans la zone inscrit dans le cercle de rayon r, d'origine (latitude, longitude) et délimité par les l'angle alpha1Oalpha2.

Mais là ce n'est pas un problème SQL. Il faut réécrire la fonction mathématique adaptée. Mais là ce n'est pas de mon ressort désolé.

Si tu as calculé toi même la précédente formule, tu devrais pouvoir trouver la nouvelle. Sinon, -> forum mathématique.
__________________
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
darkwall_37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 19h24   #5
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 802
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 1 802
Points : 3 096
Points : 3 096
salut,

l'angle dont tu parles est le cap ou relèvement ou azimut selon le contexte...

l'algo de la formule est du genre, en comptant que tu vas de pt1(la1,lo1) vers pt2(la2,lo2):
Code :
1
2
3
4
5
6
7
8
9
10
dlo=(lo2-lo1)*convrad
dla=(la2-la1)*convrad
si dlo<>0
  azimut=pi/2-atan(dla/dlo)
sinon
  azimut=0
si dlo>0
  retourne azimut
sinon si dlo<0
  retourne azimut+pi
les la,lo sont en degrés, le résultat est en radians, convrad est la valeur pi/180 pour convertir les degrés en radians
0 est un cap nord, pi/2 est, pi ou -pi sud, -pi/2 ouest...
tu as des formules plus complexe qui font des corrections géodésiques, mais bon on s'en fout un peu pour ce que tu veux faire tu es pas là pour faire de la navigation

ça revient à voir la terre comme un rectangle avec les latitudes en hauteur et les longitudes en largeur dont le centre est le point la=0,lo=0

donc comparer 2 directions revient à étudier le produit scalaire entre 2 vecteurs:
  • dla=la2-la1,dlo=lo2-lo1
  • sin(cap_voulu),cos(cap_voulu) (on a un vecteur normalisé, c'est dire de longueur=1)
et d'en déduire le cos de l'angle entre les 2 vecteurs obtenus pour voir s'il reste en dessous d'une certaine valeur:

Citation:
ps=dla*sin(cap_voulu)+dlo*cos(cap_voulu)
on récupère alors le cos en divisant par la norme des 2 vecteurs (ici seulement celle de dla,dlo vu que l'autre vaut 1):

Citation:
c=ps/sqrt(dlo*dlo+dla*dla)
c correspond à cos(angle_ecart)

si c<cos(angle_ecart_voulu/2) et c>=0 alors tu es dans le secteur angulaire voulu
__________________
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 10/01/2013, 10h50   #6
LeChacal47
Invité de passage
 
Homme Chacal
Développeur Web
Inscription : novembre 2012
Messages : 4
Détails du profil
Informations personnelles :
Nom : Homme Chacal
Localisation : France, Lot et Garonne (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2012
Messages : 4
Points : 2
Points : 2
Merci
J'ai toutes les données pour résoudre mes problèmes
LeChacal47 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 16h09   #7
LeChacal47
Invité de passage
 
Homme Chacal
Développeur Web
Inscription : novembre 2012
Messages : 4
Détails du profil
Informations personnelles :
Nom : Homme Chacal
Localisation : France, Lot et Garonne (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2012
Messages : 4
Points : 2
Points : 2
Code :
1
2
3
4
5
6
7
8
SELECT `latitute` , `longitude` , `nom` , `ville` , IF( (
degrees( atan2( cos( 0.818709 ) * sin( latitute ) - sin( 0.818709 ) * cos( latitute ) * cos( longitude - 44.389051 ) , sin( longitude - 44.389051 ) * cos( latitute ) ) ) ) <0, (
degrees( atan2( cos( 0.818709 ) * sin( latitute ) - sin( 0.818709 ) * cos( latitute ) * cos( longitude - 44.389051 ) , sin( longitude - 44.389051 ) * cos( latitute ) ) )
) +360, (
degrees( atan2( cos( 0.818709 ) * sin( latitute ) - sin( 0.818709 ) * cos( latitute ) * cos( longitude - 44.389051 ) , sin( longitude - 44.389051 ) * cos( latitute ) ) )
)
) AS deg, ( 6366 * acos( cos( radians( 0.818709 ) ) * cos( radians( latitute ) ) * cos( radians( longitude ) - radians( 44.389051 ) ) + sin( radians( 0.818709 ) ) * sin( radians( latitute ) ) ) ) AS distance
FROM `elements`
Voilou j'ai la distance et le degré de chacun de mes éléments
LeChacal47 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h42.


 
 
 
 
Partenaires

Hébergement Web