Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Invité de passage
    Homme Profil pro Chacal
    Développeur Web
    Inscrit en
    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

  2. #2
    Membre éclairé
    Homme Profil pro Alex V
    Etudiant administrateur systèmes et réseaux
    Inscrit en
    octobre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Nom : Homme Alex V
    Âge : 26
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : octobre 2007
    Messages : 630
    Points : 389
    Points
    389

    Par défaut

    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 :

  3. #3
    Invité de passage
    Homme Profil pro Chacal
    Développeur Web
    Inscrit en
    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

    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

  4. #4
    Membre éclairé
    Homme Profil pro Alex V
    Etudiant administrateur systèmes et réseaux
    Inscrit en
    octobre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Nom : Homme Alex V
    Âge : 26
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : octobre 2007
    Messages : 630
    Points : 389
    Points
    389

    Par défaut

    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 :

  5. #5
    Expert Confirmé Avatar de ericd69
    Homme Profil pro Eric Dureuil
    Développeur informatique
    Inscrit en
    avril 2011
    Messages
    1 897
    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 897
    Points : 3 207
    Points
    3 207

    Par défaut

    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:

    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):

    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...

  6. #6
    Invité de passage
    Homme Profil pro Chacal
    Développeur Web
    Inscrit en
    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

    Merci
    J'ai toutes les données pour résoudre mes problèmes

  7. #7
    Invité de passage
    Homme Profil pro Chacal
    Développeur Web
    Inscrit en
    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

    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

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •