IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requête SQL formule de calcul orthodromie


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Requête SQL formule de calcul orthodromie
    Bonjour,
    J'aimerai calculer une distance à vole d'oiseau à partir d'un point de référence avec ma latitude et longitude en radian et ne garder que les résultats dont la valeur sera inférieur à {param3}.
    Exemple quelles sont les villes dans un rayon de 10km à vole d'oiseau autour de limoge.

    J'ai une table nommé Ville dans laquelle j'ai plusieurs rubriques dont
    Ville_nom
    Ville_latitude_rad
    ville_longitue_rad

    Sous excel lorsque je fais le calcul tout fonctionne avec cette formule :
    =ACOS(SIN(RADIANS(B2))*SIN(RADIANS(B3))+COS(RADIANS(B2))*COS(RADIANS(B3))*COS(RADIANS(C2-C3)))*6371

    mais en sql rien ne va plus !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
    	Ville.ville_nom AS Ville,
    	ROUND( (  6371* ACOS( ( ( COS( {param1} ) * COS( Ville.ville_latitude_rad ) ) * COS( ( ( {param2} - Ville.ville_longitue_rad ) + ( SIN( {param1} ) * SIN( Ville.ville_latitude_rad ) ) ) ) ) ) ) ,  2) AS distance
    FROM 
    	Ville
    WHERE 
    	ROUND( (  6371* ACOS( ( ( COS( {param1} ) * COS( Ville.ville_latitude_rad ) ) * COS( ( ( {param2} - Ville.ville_longitue_rad ) + ( SIN( {param1} ) * SIN( Ville.ville_latitude_rad ) ) ) ) ) ) ) ,  2)  < {param3}
    ORDER BY
    distance ASC
    {param1}= coordonnées latitude en radian
    {param2}= coordonnées longitude en radian
    {param3}= distance maxi

    d'où vient l'erreur je n'arrive pas a comprendre....
    merci d'avance

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    - Quel est votre SGBD ?
    - Quel est le type de vos colonnes ?
    - Quel est le type de vos variables ?
    et surtout...
    - Quelle est votre erreur ?


    Je penche pour une conversion implicite avec perte de précision...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    je suis sous windev base de données Hyperfilesql.
    mes variables sont des decimal à 38 chiffres (souswindev)
    idem pour mes colonnes.
    et mon erreur est que le calcul est erroné genre il me renvoi 6001.23 comme distance la plus proche.
    Merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Il y a un problème de parenthèses.
    Dans la requête, tu calcules entre autres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    COS( ( ( {param2} - Ville.ville_longitue_rad ) + ( SIN( {param1} ) * SIN( Ville.ville_latitude_rad ) )))
    Or d'après la formule, il faut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    COS({param2} - Ville.ville_longitue_rad ) + ( SIN( {param1} ) * SIN( Ville.ville_latitude_rad ) )
    Le calcul du cosinus doit porter sur {param2} - Ville.ville_longitue_rad, et dans la requête il porte sur ( {param2} - Ville.ville_longitue_rad ) + ( SIN( {param1} ) * SIN( Ville.ville_latitude_rad ) .

    Tatayo.

Discussions similaires

  1. [MySQL-5.5] Requête SQL complexe pour calcul pourcentage
    Par zizou1989 dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/04/2014, 10h40
  2. Requête SQL - fonction iff & calcul d'un champ selon d'autres champs
    Par Séphirée dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 10/05/2013, 22h51
  3. [phpMyAdmin] Requête SQL via phpMyAdmin - calcul d'une valeur
    Par littlebob dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 05/12/2012, 20h35
  4. AIDE sur requête SQL et champs calculé
    Par droliprane dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 13/09/2012, 16h56
  5. [SqlServer] Requête SQL pour le calcul de la durée!
    Par othland dans le forum Bases de données
    Réponses: 2
    Dernier message: 25/09/2007, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo