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 :

Traitement fichier GPX avec SimpleXML


Sujet :

PHP & Base de données

  1. #81
    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
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    bien sur que si mais pour avoir de bonnes performances (vu la formule de calcul de la distance par rapport à (la,lo,alti) vaut mieux pré-calculer ça...

    le graph que tu fais actuellement fausse l'idée du trajet car les points ne sont pas équidistants et utiliser le temps nécessiterait aussi de faire des pré-calculs et donnerait une fausse idée car tu ne tiens pas compte de poses...

    et avec l'algo de réduction ça amplifie cet effet...

    je pense que ça vaudrait le coup de revoir le tout (la bd et ce qui est mis dedans) pour voir ce qui peut être fait ainsi que d'éventuelles évolutions que tu voudrais faire par la suite...

    par ce que là j'ai pas la structure des tables (toutes celles qui touchent aux traces) et donc faudrait que tu me les files en mp

    parce que là faire des trucs avant et après c'est contre productif et il risque d'y avoir des loupés...
    faudrait que tu me montres aussi ta classe bdd (sans identifiant et mdp) car je pense qu'il y a aussi à revoir dans la façon de passer tes requêtes...

    bref envoies tout ça en mp

    au fait, j'ai fini un classe qui fait un graph générique en 2d en échelle et graduations automatiques
    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...

  2. #82
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    mp envoyé

  3. #83
    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
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    déjà un truc pour simplifier la table des points... pas la peine de mettre un nombre pour les ordonner vu qu'on peux le faire avec la date du point...

    jolis graphs mcd et mcp... c'est toi qui les a fait seul ou aidé?

    rassure moi quand je vois héritage sur ton schéma, tu sais que mysql ne supporte pas l'héritage de table ou de type?

    varchar(200) pour un mot clé...

    y a des choses à revoir sur un certain nombre de tables...

    notamment les clés primaires de beaucoup de tables... là faudra que je t'explique la différence entre mes pauvre modèles théoriques souvent enseigné à la pratique si tu cherche l'efficacité... trop de formalisme tue souvent la performance...


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

  4. #84
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    La modélisation a été faite à l'aide d'un utilisateur de developpez.com et je l'en remercie. J'ai appris beaucoup de choses grâce à lui.

    J'ai généré le script à partir de powerAMC et tout s'est bien passé.

    Pour le mot clé : 200 ça fait un peu gros mais bon qui peut le plus peut le moins

    Concernant la modélisation j'aimerais ne pas trop y toucher si il n'y a rien de critique car c'est du boulot de tout réinsérer si il y a un ajout/modifications des tables.

  5. #85
    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
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    disons que les clés primaires c'est critique à moyen ou long terme selon la quantité d'ajouts

    idem pour la taille des colonnes, qui joue sur la taille des table et des index, et leur capacité à être mis en cache pour éviter des accès réels...

    faut avoir une chose en tête ce que tu as maintenant c'est rien par rapports à dans quelques années et si ton site marche...

    une clé primaire préfixe tous les index de ta table et sa taille limite à un moment la quantité d'info qu'elle et les autres index peuvent donc stocker en cache...
    bref là c'est pas forcément grave dans 2 ou 5 ans tu auras une usine à gaz qui sera plus infernal à transformer...

    et tu stockes une sacrée quantité de trucs pour rien (par rapport à une génération dynamique et d'autres pas alors qu'il serait utiles...

    une ip sur 15 char ...

    certaines tables sont construites de manière... bizarre... pour ne pas dire avec des trucs inutiles...

    faudra que tu m'explique aussi ce qui garantit la cohérence dossier/article/fichier/id dans les table
    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. #86
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Donc selon toi, il faut dans un premier temps revoir la modélisation ?, c'est fsmrel qui va pas être content si tu critiques son job

    Si tu as powerAMC, je peux t'envoyer le fichier. mcd et .mpd pour que tu regardes de plus près.

    faudra que tu m'explique aussi ce qui garantit la cohérence dossier/article/fichier/id dans les table
    Hum tu peux préciser ce point là car pour tout ce qui est stockage de données je fonctionne comme ça :

    EX pour les images des articles : /images/id_user/type_article/id_article/

  7. #87
    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
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    connais pas...

    non j'ai pas...
    après tu peux faire des modifications sur des parties seulement

    le seul truc chiant c'est la partie relation trace fichier/bd qui est à la base de toutes les autres relations

    pourquoi type_article entre en jeu et pas juste id_article ou même juste id_article tout court vu que les id_article sont sensé être uniques non?

    même les fichiers gpx je t'avoue que je leur donnerais pas des noms comme ça vu qu'il sont uniques...
    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...

  8. #88
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Eh bien il faut regarder pour les modifs qui n'engendrent pas de travail énorme parce que j'imagine qu'il pourrait y avoir autant de modélisation que de personne souhaitant modéliser la base

    Concernant le type d'article, chaque article possède un type, balade, périple, ... et ce type d'article possède un sous type (balade à pied, à vtt...) et même si l'id d'un article est unique il me faut savoir quel type d'article et de quel sous type il s'agit pour le caser la ou il doit être.

    Une trace GPS n'est pas forcément unique, on peut imaginer que la trace soit postée deux fois. Un utilisateur A pourrait poster sa balade et l'utilisateur pourrait poster la même balade mais avec un récit différent.

    En effet, dans un avenir plus ou moins proche, le site s'ouvrira aux contributions extérieurs.

  9. #89
    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
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    il serait bon que tu découvres la syntaxe:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into truc(col1,col2,....) select machin1, machin2,... from...

    au fait tu es en innodb?

    la gestion des articles est une usine à gaz...

    tu devrais simplifier le nommage des fichier trace en interne... une trace DOIT être unique, peu importe qu'elles soient plusieurs à toucher le même parcours

    je te préviens je refais pas tout ton site juste la partie "trace"...

    le reste, les retouches sur les clés primaire tu peux les rapidement et sans que ça bouleverse grand chose... table par table...

    bon pour ton graphique, voilà le résultat de près de 2 jours de tests
    un fichier qui contient les classes communes "graphcommons.php":
    Code php : 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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    <?php
    define('__graph_commons_','1.0');
    /**
     * 
     * Convertit les composantes d'une couleur en un code couleur GD
     * @param int $red	Composante rouge, entre 0 et 255
     * @param int $green	Composante verte, entre 0 et 255
     * @param int $blue	Composante bleue, entre 0 et 255
     * @param int $alpha	Composante transparence, entre 0 et 255, 255 pour transparent
     */
    function	gdColor($red,$green,$blue,$alpha=0)
    {
    	return $alpha<<24|$red<<16|$green<<8|$blue;
    }
    /**
     * 
     * Décrit un point en 2D
     * @author		Dureuil Eric
     * @package		graphics
     * @subpackage	commons
     */
    class	info2d
    {
    	public	$_x,$_y;
    	public	function	__construct($x,$y)
    	{
    		$this->_x=$x;
    		$this->_y=$y;
    	}
    }
    /**
     * 
     * Décrit le titre d'un graphique
     * @author		Dureuil Eric
     * @package		graphics
     * @subpackage	commons
     */
    class	gdText
    {
    	public	$_text,$_color,$_size;
    	public	$_width,$_height,$_length;
    	/**
    	 * 
    	 * Enter description here ...
    	 * @param string $text	Texte
    	 * @param int $color	Couleur du texte, nombre héxadécimal: 0xaarrvvbb avec aa l'alpha, rr le rouge, vv le vert et bb le bleu
    	 * @param int $textsize	Taille du texte
    	 */
    	final	public	function	__construct($text='',$color=0,$textsize=1)
    	{
    		$this->_text=$this->transliterate($text);
    		$this->_color=intval($color);
    		$a=intval($textsize);
    		$this->_size=$a<0?0:($a>5?5:$a);
    		$this->_width=imagefontwidth($this->_size);
    		$this->_height=imagefontheight($this->_size);
    		$this->_length=strlen($this->_text);
    	}
    	/**
    	 * 
    	 * Affiche le texte horizontalement dans l'image créée avec GD
    	 * @param resource $im	une ressource créée avec GD
    	 * @param int $x	Abscisse du texte dans les coordonnées de l'image
    	 * @param int $y	Ordonnée du texte dans les coordonnées de l'image
    	 */
    	final	public	function	draw($im,$x,$y)
    	{
    		imagestring($im, $this->_size, $x, $y, $this->_text, $this->_color);
    	}
    	/**
    	 * 
    	 * Affiche le texte verticalement dans l'image créée avec GD
    	 * @param resource $im	une ressource créée avec GD
    	 * @param int $x	Abscisse du texte dans les coordonnées de l'image
    	 * @param int $y	Ordonnée du texte dans les coordonnées de l'image
    	 */
    	final	public	function	drawUp($im,$x,$y)
    	{
    		imagestringup($im, $this->_size, $x, $y, $this->_text, $this->_color);
    	}
    	/**
    	 * 
    	 * Fait la translitération d'une chaine dans la charset Latin2 pour GD
    	 * @param string $string
    	 */
    	final protected	function	transliterate($string)
    	{
    		$s=str_ireplace('é', 'e', $string);
    		$s=iconv("UTF-8", "ASCII//TRANSLIT", $s);
    		return str_replace(array('^','`'), '', $s);
    	}
    }
    /**
     * 
     * Décrit un axe sur un graphique
     * @author		Dureuil Eric
     * @package 	graphics
     * @subpackage	commons
     */
    class	axis
    {
    	public	$_title,$_units;
    	public	$_color;
    	/**
    	 * 
    	 * Enter description here ...
    	 * @param string $title	Titre pour l'axe
    	 * @param string $unit	Nom de l'unité pour l'axe
    	 * @param int $linecolor	Couleur pour les repères sur l'axe, nombre héxadécimal: 0xaarrvvbb avec aa l'alpha, rr le rouge, vv le vert et bb le bleu
    	 * @param int $textcolor	Couleur pour les textes décrivant l'axe, nombre héxadécimal: 0xaarrvvbb avec aa l'alpha, rr le rouge, vv le vert et bb le bleu
    	 * @param int $titlesize	Taille de la police pour l'affichage du titre de l'axe, compris entre 1 et 5 inclus
    	 * @param int $unitsize	Taille de la police pour l'affichage des unités sur l'axe, compris entre 1 et 5 inclus
    	 */
    	final	public	function	__construct($title='', $unit='', $linecolor=0, $textcolor=0, $titlesize=2, $unitsize=1)
    	{
    		$this->_title=new gdText($title, $textcolor, $titlesize);
    		$this->_units=new gdText($unit, $textcolor, $unitsize);
    		$this->_color=intval($linecolor);
    	}
    	/**
    	 * 
    	 * Affiche le titre horizontalement dans l'image créée avec GD
    	 * @param resource $im	une ressource créée avec GD
    	 * @param int $x	Abscisse du texte dans les coordonnées de l'image
    	 * @param int $y	Ordonnée du texte dans les coordonnées de l'image
    	 */
    	final	public	function	drawTitle($im, $x, $y)
    	{
    		imagestring($im, $this->_title->_size, $x, $y, "{$this->_title->_text}({$this->_units->_text})", $this->_title->_color);
    	}
    	/**
    	 * 
    	 * Affiche le titre verticalement dans l'image créée avec GD
    	 * @param resource $im	une ressource créée avec GD
    	 * @param int $x	Abscisse du texte dans les coordonnées de l'image
    	 * @param int $y	Ordonnée du texte dans les coordonnées de l'image
    	 */
    	final	public	function	drawTitleUp($im,$x,$y)
    	{
    		imagestringup($im, $this->_title->_size, $x, $y, "{$this->_title->_text}({$this->_units->_text})", $this->_title->_color);
    	}
    	/**
    	 * 
    	 * Affiche la valeur horizontalement dans l'image créée avec GD
    	 * @param resource $im	une ressource créée avec GD
    	 * @param int $x	Abscisse du texte dans les coordonnées de l'image
    	 * @param int $y	Ordonnée du texte dans les coordonnées de l'image
    	 * @param mixed $value	Valeur à afficher
    	 */
    	final	public	function	drawUnits($im, $x, $y, $value)
    	{
    		imagestring($im, $this->_units->_size, $x, $y, $value, $this->_units->_color);
    	}
    }
    ?>

    la classe qui fait le graph "graph2d.php":
    Code php : 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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    <?php
    if(!defined('__graph_commons_'))
    	include"./graphcommons.php";
    /**
     * 
     * Classe de base pour générer un graphique automatisé
     * @author Dureuil Eric
     * @package graphics
     * @subpackage 2d graphics
     *
     */
    class	graph2d
    {
    	private	$_data,$_xmini,$_xmaxi,$_ymini,$_ymaxi,$_p;
    	/**
    	 * 
    	 * Efface les données du graphique
    	 */
    	final	protected	function	reset()
    	{
    		$this->_data=array();
    		$this->_p=true;
    	}
    	/**
    	 * 
    	 * Ajoute un point au graphique
    	 * @param mixed $x	
    	 * @param mixed $y
    	 */
    	final	protected	function	data($x,$y)
    	{
    		$this->_data[]=new info2d($x, $y);
    		if($this->_p)
    		{
    			$this->_xmaxi=$x;
    			$this->_xmini=$x;
    			$this->_ymaxi=$y;
    			$this->_ymini=$y;
    		}
    		else
    		{
    			if($x>$this->_xmaxi)
    				$this->_xmaxi=$x;
    			elseif($x<$this->_xmini)
    				$this->_xmini=$x;
    			if($y>$this->_ymaxi)
    				$this->_ymaxi=$y;
    			elseif($y<$this->_ymini)
    				$this->_ymini=$y;
    		}
    		$this->_p=false;
    	}
    	/**
    	 * 
    	 * Trace le graphique sous forme d'une image png avec des échelles automatiques
    	 * @param axis $xaxis	Décrit l'axe des x
    	 * @param axis $yaxis	Décrit l'axe des y
    	 * @param title $title	Décrit le titre du graphique
    	 * @param int $w	Largeur du graphique
    	 * @param int $h	Hauteur du graphique
    	 * @param int $margin	Distance entre le bord du l'image et celui du graphique ou ses infos 
    	 * @param int $padding
    	 * @param int $bgcolor	Couleur du fond de l'image, nombre héxadécimal: 0xaarrvvbb avec aa l'alpha, rr le rouge, vv le vert et bb le bleu
    	 */
    	final	public	function	graphAuto(axis $xaxis, axis $yaxis,gdText $title, $w=600, $h=300, $fillColor=0x007f7f7f, $imageBgColor=0x00ffffff, $graphBgColor=0x00ffffff, $margin=10,$padding=5)
    	{
    		header('Content-type: image/png');
    		$t=count($this->_data);
    		//graduations
    		$eay=pow(10.0,intval(log10(($this->_ymini+$this->_ymaxi)/2.0)));
    		$egy=$eay/10.0;
    		$eax=pow(10.0,intval(log10(($this->_xmini+$this->_xmaxi)/2.0)));
    		$egx=$eax/10.0;
    		//coordonnées interne du graph
    		$xmin=$margin+$yaxis->_title->_height+($yaxis->_units->_width+1)*strlen($eay)+$padding;
    		$ymin=$margin+$title->_height+$padding;
    		$xmax=$w-$margin;
    		$ht=$xaxis->_units->_height+$padding;
    		$ymax=$h-$margin-$xaxis->_title->_height-$ht;
    		//dimensions zone d'affichage
    		$dx=$xmax-$xmin;
    		$dy=$ymax-$ymin;
    		//dimensions des données à afficher
    		$ddx=$this->_xmaxi-$this->_xmini;
    		$ddx=($ddx!=0.0?$ddx:1.0);
    		$ddy=$this->_ymaxi-$this->_ymini;
    		$ddy=($ddy!=0.0?$ddy:1.0);
    		//échelles d'affichage
    		$ex=$dx/$ddx;
    		$ey=$dy/$ddy;
    		//création de l'image
    		$im=imagecreatetruecolor($w,$h);
    		imagefilledrectangle($im, 0, 0, $w, $h, $imageBgColor);
    		$title->draw($im, ($w-$title->_length*$title->_width)/2, $margin);
    		$xaxis->drawTitle($im, ($w-($xaxis->_title->_length+$xaxis->_units->_length+2)*$xaxis->_title->_width)/2, $ymax+$ht);
    		$yaxis->drawTitleUp($im, $margin, ($h+($yaxis->_title->_length+$yaxis->_units->_length+2)*$yaxis->_title->_width)/2);
    		imagefilledrectangle($im, $xmin, $ymin, $xmax, $ymax, $graphBgColor);
    		if($t>0)
    		{
    			//tracé de la courbe
    			for($i=1;$i<$t;$i++)
    			{
    				$j=$i-1;
    				$x1=$xmin+($this->_data[$j]->_x-$this->_xmini)*$ex;
    				$y1=$ymax-($this->_data[$j]->_y-$this->_ymini)*$ey;
    				$x2=$xmin+($this->_data[$i]->_x-$this->_xmini)*$ex;
    				$y2=$ymax-($this->_data[$i]->_y-$this->_ymini)*$ey;
    				$points=array(
    					$x1,$y1,
    					$x2,$y2,
    					$x2,$ymax,
    					$x1,$ymax);
    				imagefilledpolygon($im, $points, 4, $fillColor);
    				imageline($im, $x1, $y1, $x2, $y2, 0);			
    			}
    			//tracer axe des x
    			$p=$eax;
    			while($p<$this->_xmaxi)
    			{
    				if($p>$this->_xmini)
    				{
    					$x=$xmin+($p-$this->_xmini)*$ex;
    					imageline($im, $x, $ymin, $x, $ymax+2, $xaxis->_color);
    					$xaxis->drawUnits($im, $x, $ymax+$padding, $p);
    				}
    				$p+=$eax;
    			}
    			//tracer axe des y
    			$p=$eay;
    			while($p<$this->_ymaxi)
    			{
    				if($p>$this->_ymini)
    				{
    					$d=$xmin-$padding-$yaxis->_units->_width*strlen($p);
    					$y=$ymax-($p-$this->_ymini)*$ey;
    					imageline($im, $xmin-2, $y, $xmax, $y, $yaxis->_color);
    					$yaxis->drawUnits($im, $d, $y, $p);
    				}
    				$p+=$eay;
    			}
    		}
    		imagerectangle($im, $xmin, $ymin, $xmax, $ymax, 0);
    		imagepng($im);
    		imagedestroy($im);
    	}
    }

    la classe qui spécialise graph2d dans "altitude.php" qui lit un fichier gpx pour en faire le graph:
    Code php : 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
    <?php
    include "./graph2d.php";
    class	altitude extends graph2d
    {
    	public	function	__construct($file)
    	{
    		$this->reset();
    		$obj = simplexml_load_file($file, 'SimpleXMLIterator');
    		$i=0.0;
    		foreach($obj->trk->trkseg->trkpt as $trkpt)
    		{
    			$this->data($i,floatval($trkpt->ele));
    			$i+=1.0;
    		}
    	}
     
    }
    ?>

    et enfin le fichier pour tester:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    include "./altitude.php";
    $racine='http://partir-en-vtt.com';
    $xml =  $racine.'/upload/articles/gpx/2/4/165/trace-brute-aude-ok.20128710531.gpx';
    $trace=new altitude($xml);
    $trace->graphAuto(
    	new axis('Distance','m',0x1fffff00,0),
    	new axis('Altitude','m',0x1f0000ff,0x000000ff),
    	new gdText("Profil d'altitude",0x00ff00ff,5),
    	2600,1300,
    	gdColor(30, 147, 66, 15),
    	0x00ffffff,
    	gdColor(62, 171, 255, 35));
    ?>

    histoire de t'ocupper un peu, tout est paramètrable...
    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...

  10. #90
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Salut Eric et merci pour tout ce boulot

    J'ai essayé sur mon mutualisé ex : http://partir-en-vtt.com/graph_gpx/appel_graph.php

    Quelques questions/interrogations :

    A première vue, il y a un souci sur la distance car cette balade faisait plusieurs dizaines de km.

    Le redimensionnement du graphique semble ne pas prendre en compte le paramètre w et h.

    Peut-on passer en kilomètre la distance au lieu des mètres ?

    La distance totale n'est pas affichée en fin de graph, est-ce paramétrable ?

    Pourrait-on ajouter une petite étiquette qui donnerait le dénivelé total de la trace ?

    Ne devrait-on pas générer ce profil à partir des données en base (c'est à dire après simplification de la trace ?)

    Merci pour tes réponses.

  11. #91
    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
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    ça n'affiche pas la distance mais le nombre de point... c'est normal
    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...

  12. #92
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    ok, le nombre de points mais c'est la distance qui nous intéresse dans le cas présent

    Si besoin pour le calcul de la distance, j'utilise la fonction suivante :

    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
    	function distance($lat1, $lon1, $lat2, $lon2, $alt1, $alt2) 
    	{
    		//rayon de la terre
    		$r = 6366;
    		$lat1 = deg2rad($lat1);
    		$lat2 = deg2rad($lat2);
    		$lon1 = deg2rad($lon1);
    		$lon2 = deg2rad($lon2);
     
    		//recuperation altitude en km
    		$alt1 = $alt1/1000;
    		$alt2 = $alt2/1000;
     
    		//calcul précis
    		$dp= 2 * asin(sqrt(pow ( sin(($lat1-$lat2)/2) , 2) + cos($lat1)*cos($lat2)* pow( sin(($lon1-$lon2)/2) , 2)));
     
    		//sortie en km
    		$d = $dp * $r;
     
    		//Pythagore a dit que :
    		 $h = sqrt(pow($d,2)+pow($alt2-$alt1,2));
     
    		return $h;
    	}
    Concernant ta question sur mes tables, oui je suis bien en innoDB

  13. #93
    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
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    je sais...

    c'était juste un exemple...

    après c'est là qu'il faut réfléchir à tes tables, fichiers pour bien organiser l'import, les calculs, etc...

    rationaliser

    en plus, tu peux masquer complètement ton système de fichier...
    tu peux lire le fichier et le proposer en download avec un nom différent de celui interne...

    tous les gpx dans un répertoire unique ce serait plus simple...
    idem avec les images, tu as la bd pour les lier aux utilisateurs...
    et chacun avec un identifiant de fichier unique... idéalement le même que celui en bd...

    et là tu économises le nom des fichiers dans les tables et là encore tu as une arborescence de tes fichiers simplifiés... et cachable là aussi en interposant un php qui lit l'image voulue

    certaines des tables qui gèrent les articles ont été séparée pour rien... par exemple toutes les table où tu vois <pk,fk> implique l'unicité de la ligne par rapport à à la table article donc ça sert à rien d'avoir ces infos à part...

    bref d'où ce que je te dis le mec t'a pondu ça c'est compliqué la vie...

    je vais te pondre un truc compatible avec ce que je te décris pour les gpx...

    un importeur vers le modèle en question je t'en ferais un après (pour les gpx et infos annexe)
    comme ça tu ne touches tes tables originales que si tu es sur que rien ne manque

    tu l'adapteras à ton organisation
    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...

Discussions similaires

  1. [Débutant] Traitement fichier .csv avec valeurs manquantes
    Par Jah73 dans le forum VB.NET
    Réponses: 3
    Dernier message: 28/01/2014, 16h19
  2. Traitement fichier Excel avec insertion en base
    Par luvtribe dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 23/11/2011, 16h48
  3. [XML] parser un fichier xml avec simplexml
    Par gtraxx dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 06/08/2011, 22h43
  4. Python probleme pour traitement fichier Xml avec l'API dom
    Par chenimitz dans le forum Général Python
    Réponses: 11
    Dernier message: 30/10/2007, 19h34
  5. Traitement fichier excel avec vb6
    Par couscoussier dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 12/09/2006, 16h15

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