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

PHP & Base de données Discussion :

calcul de dénivelé [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de jac83
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 71
    Par défaut calcul de dénivelé
    bonjour,
    voilà le problème ... qui me prend la tête depuis un moment .
    J'ai une table avec les champs suivants: altitude|date|time que je récupère après parsage d'un fichier gpx issu de mon gps. Grâce au champ time, j'arrive a extraire l'heure de départ et d'arrivée pour calculer la durée du parcours .Ce que j'aimerai c'est obtenir grâce au champ altitude, le dénivelé positif et négatif du parcours. Quelles requêtes faire sur le champ ? et quel code php pour afficher le résultat après traitement de (des) la requête(s). Ce qui me bloque c'est que le parcours en général monte et descend sans cesse on ne peut donc pas faire max(altitude)- min(altitude) ... ça c'était de mon niveau .
    cordialement jacques

  2. #2
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 919
    Billets dans le blog
    1
    Par défaut
    salut,

    tu veux quoi le dénivelé entre chaque point le long du parcours?

    et si tu mettais un exemple de ta table...

    en php, y a des bibliothèque qui permettent de faire des graphiques.

    sinon, tu utilises simplement gd et tu crées ton graph sous forme d'image...

    si c'est l'écart point à point, tu as plus tôt fait de le faire en php... une simple boucle en se décalant pour faire les soustraction avec l'élément de la ligne précédente...
    coté sql, ça donnerait un truc lourd avec une jointure et un group by... beaucoup de traitements, qui s'alourdiront avec le nombre de points, la où une seule boucle le fais très bien

  3. #3
    Membre confirmé Avatar de jac83
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 71
    Par défaut quelques explications supplémentaires
    voilà le début de ma table
    ID altitude date time
    1 761.982178 2011-08-27 08:48:30
    2 761.020752 2011-08-27 08:50:12
    3 761.501465 2011-08-27 08:50:34
    4 762.462646 2011-08-27 08:50:50
    5 763.424072 2011-08-27 08:51:06
    6 763.904541 2011-08-27 08:51:17
    7 764.866211 2011-08-27 08:51:26
    8 765.827637 2011-08-27 08:51:36
    9 766.788818 2011-08-27 08:51:45
    10 767.269531 2011-08-27 08:51:54
    11 767.750000 2011-08-27 08:52:03
    12 769.672852 2011-08-27 08:52:13
    chaque ID correspond à un point d'enregistrement du parcours ... et pour chaque parcours il y a au moins 500 points . Si je veux le dénivelé positif il faut ajouter l'écart d' altidude positif entre chaque points consécutifs d'une manière croissante et pour le dénivelé négatif l'écart d'altitude négatif entre chaque points consécutifs d'une manière décroissante.
    ... j'espère avoir été clair !!!

    cordialement jacques

  4. #4
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 919
    Billets dans le blog
    1
    Par défaut
    alors je te montre un exemple d'horreur que tu dois faire (en une seule requête) pour faire le calcul de dénivelé entre chaque point:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    drop table if exists altitude;
    create table altitude(
    	id		smallint not null auto_increment,
    	alt	mediumint,
    	primary key(id)
    )engine=myisam;
    insert into altitude(alt)values
    (10),(25),(40),(35),(55),(25);
     
    select a.alt,b.alt,b.id,b.alt-a.alt
    from altitude a
    left join(
    	select id,alt
    	from altitude
    ) b on a.id<b.id
    group by a.alt having b.id=min(b.id);
    en php, si on suppose que $data est le tableau contenant les données voulues (tes 500 points) sous forme de tableau associatif pour les colonnes... il suffit un simple:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $deniveles=array();
    for($i=1;$i<(sizeof($data)-1);$i++)
      $deniveles[]=$data[$i]['altitude']-$data[$i-1]['altitude'];
    plus efficace dans ce genre d'opération particulière...

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Par défaut
    Citation Envoyé par ericd69 Voir le message
    alors je te montre un exemple d'horreur que tu dois faire (en une seule requête) pour faire le calcul de dénivelé entre chaque point:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    drop table if exists altitude;
    create table altitude(
    	id		smallint not null auto_increment,
    	alt	mediumint,
    	primary key(id)
    )engine=myisam;
    insert into altitude(alt)values
    (10),(25),(40),(35),(55),(25);
     
    select a.alt,b.alt,b.id,b.alt-a.alt
    from altitude a
    left join(
    	select id,alt
    	from altitude
    ) b on a.id<b.id
    group by a.alt having b.id=min(b.id);
    Je dois partir donc je n'ai pas pris le temps de bien comprendre ta requête, mais pourquoi n'est-il pas possible de faire un truc tout simple comme ça ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select 
     SUM(CASE WHEN a1.alt-a2.alt < 0  THEN a1.alt-a2.alt ELSE 0 END) AS negatif,
     SUM(CASE WHEN a1.alt-a2.alt > 0  THEN a1.alt-a2.alt ELSE 0 END) AS positif
     from altitude a1 join altitude a2 ON a1.id=a2.id+1

  6. #6
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 919
    Billets dans le blog
    1
    Par défaut
    rien ne te garanti que des lignes ne seront pas supprimées... donc que tu n'auras pas des trous...



    si tu en es sur (cas ultra particulier) alors oui ta requête est la plus adaptée mais si on reste dans le cas général oubliera des lignes...



    après je ne suis pas sur de ce qu'il veut vraiment... le tableau des dénivelés c'est facile de faire divers traitements avec (courbe d'altitude relative, ou ce qu'il veut et que tu proposes dans ta requête)...

    par contre je ne suis pas sur que ça ai un sens de sommer les dénivelés positifs et négatifs pour en faire un graph... après à lui de voir...

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

Discussions similaires

  1. [ANDROID] Comment calculer le dénivelé parcouru ?
    Par DenveRDev dans le forum Android
    Réponses: 7
    Dernier message: 31/05/2015, 04h25
  2. [TP7] Calculer sin, cos, tan, sqrt via le FPU
    Par zdra dans le forum Assembleur
    Réponses: 8
    Dernier message: 25/11/2002, 04h09
  3. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29
  4. Récupérer 10 nb différents avec un calcul aléatoire
    Par BXDSPORT dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2002, 02h35
  5. Algo de calcul de FFT
    Par djlex03 dans le forum Traitement du signal
    Réponses: 15
    Dernier message: 02/08/2002, 17h45

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