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

SIG : Système d'information Géographique Discussion :

Calcul de dénivelé depuis un .GPX


Sujet :

SIG : Système d'information Géographique

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 24
    Points : 19
    Points
    19
    Par défaut Calcul de dénivelé depuis un .GPX
    Bonjour,

    Je suis entrain de développer une petite application permettant de partager des itinéraires (vélo, marche à pieds, ...) que je vais afficher sur une carte avec des informations comme en autre les dénivelés positifs et négatifs.

    Je vais récupérer les parcours grâce à des fichiers GPX.

    Donc il me faut calculer à partir de ces fichiers les dénivelés.

    Voici la fonction que j'ai développer pour cela :

    Code : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?php
    public function altCumul() {
    	// Tout les points du parcours
    	$points = $this->road->getPolyline()->getPoints();
    		
    	
    	$less = 0; // dénivelés négatifs. 
    	$more = 0; // dénivelé positifs.
    	for ($i = 0; $i < $points->count() - 1; ++$i) {
    		// Altitude du point : n.
    		$A = $points->get($i)->getElevation();
    		// Altitude du point : n + 1.
    		$B = $points->get($i+1)->getElevation();
    		
    		// Calcul du dénivelé entre les deux points.
    		$drop = $B - $A;
    		
    			
    		if ($drop >= 0) {
    		        // Dénivelé positif
    			$more += $drop;
    		} elseif ($drop < 0) {
    			// Dénivelé négatif
    			$less += $drop; 
    		}
    			
    	}
    		
    	return ['more' => $more, 'less' => $less];
    }
    ?>
    Ma fonction m'a l'aire correct, pourtant pour un parcours (qui est en fait un circuit) qui fait normalement environ 600m de dénivelé positif, j'en trouve 6500m.

    Est-ce que vous voyez une aberration dans cette fonction?

    Ou est-ce que la méthode de calcul des dénivelés des GPS est différente ...?
    Peut-être qu'ils ne prennent pas vraiment tout le points ...?

    Voila les questions que je me pose, si vous pouvez m'éclairer?

    Merci d'avance.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    J'ai trouvé la solution à mon problème.

    Je vous expose la solution, ça pourrait peut être vous intéresser :

    Donc ma fonction et le calcul des dénivelés sont bon.
    Par contre je me suis aperçut que dans les fichiers .GPX issu d'un GPS, il peut se cacher des points GPS avec des valeurs aberrantes.

    C'est que j'avais des points avec une altitude à 0m pour un parcours que se situe entre 600m et 800m.

    Donc j'ai rajouté une fonction qui me calcul le dénivelé moyen entre chaque point me permettant de ne pas prendre en compte les dénivelés trop important :

    Code : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <?php
    public function altCumul() : array {
    	// Tout les points du parcours
    	$points = $this->road->getPolyline()->getPoints();
    		
    	// Fonction ajouter pour évaluer le dénivelé moyen entre chaque point.
     	$errorFact = self::elevationMoy($points);
    		
    		
    	$less = 0; // dénivelés négatifs.
    	$more = 0; // dénivelé positifs.
    	for ($i = 0; $i < $points->count() - 1; ++$i) {
    		// Altitude du point : n.
    		$A = $points->get($i)->getElevation();
    		// Altitude du point : n + 1.
    		$B = $points->get($i+1)->getElevation();
    			
    		// Calcul du dénivelé entre les deux points.
    		$drop = $B - $A;
    		
    		if (abs($drop) <= $errorFact) {
    			if ($drop >= 0) {
    				// Dénivelé positif
    				$more += $drop;
    			} elseif ($drop < 0) {
    			// Dénivelé négatif
    				$less += $drop;
    			}
    		}
    	}
    		
    		return ['more' => round($more), 'less' => round($less)];
    	}
    
    public static function elevationMoy(ArrayCollection $points) : float {
    	$values = [];
    	
    	for ($i = 0; $i < $points->count() - 1; ++$i) {
    		// Altitude du point : n.
    		$A = $points->get($i)->getElevation();
    		// Altitude du point : n + 1.
    		$B = $points->get($i+1)->getElevation();
    			
    		// Calcul du dénivelé entre les deux points (valeur absolue).
    		$values[$i] = abs($B - $A);
    	}
    	
           // Valeur moyenne entre chaque points
    	return (array_sum($values)) / ($points->count());
    }
    Peut-etre que ça servira à queqlu'un ...

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

Discussions similaires

  1. Calcul de distance et export gpx avec l'api
    Par gustrimaille dans le forum IGN API Géoportail
    Réponses: 6
    Dernier message: 23/04/2010, 11h58
  2. Script de calcul qui plante depuis passage du serveur sur VMware
    Par Compass dans le forum EPM (Hyperion)
    Réponses: 1
    Dernier message: 11/03/2010, 13h21
  3. Calculer taille fichier depuis un worfklow
    Par Jc75011 dans le forum Informatica
    Réponses: 2
    Dernier message: 02/11/2009, 11h34
  4. Calcul en direct depuis des inputs
    Par guigui69 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/12/2007, 16h38
  5. [XI]calcul de cumul depuis une date
    Par lamyae_84 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 05/05/2007, 00h20

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