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. #21
    Membre éclairé
    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
    Par défaut
    Version avec altitude et date


    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
    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
     
    	/*
    	* Function to turn a mysql datetime (YYYY-MM-DD HH:MM:SS) into a unix timestamp
    	* @param str
    	*     The string to be formatted
    	*/
     
    	function convert_datetime($str) {
     
    		list($date, $time) = explode(' ', $str);
    		list($year, $month, $day) = explode('-', $date);
    		list($hour, $minute, $second) = explode(':', $time);
     
    		$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
     
    		return $timestamp;
    	} 
     
    	/***
    	 * @name	pathSimplification	simplification d'un groupe de point selon un pas
    	 * @param	$tab	tableau valide des coordonnées avec ['la']['lo'] pour chaque ligne
    	 * @param	$ret	tableau valide des coordonnées simplifié à partir de $tab
    	 * @param	$step	pas entre chaque point à préserver	
    	 */
    	function pathSimplification(&$tab,&$ret,$step)
    	{
    		$ret=array();
    		$inter=array();
    		$j=0;
    		for($i=0;$i<sizeof($tab);$i++)
    		{
    			if($i % $step)
    			{
    				$inter[]=$tab[$i];
    				$j++;
    			}
    			else
    			{
    				if($i==0)
    					$ret[]=$tab[0];
    				else
    				{
    					$la=0;
    					$lo=0;
    					$alti=0;
    					$date=0;
    					for($k=0;$k<$j;$k++)
    					{
    						$la+=$inter[$k]['la'];
    						$lo+=$inter[$k]['lo'];
    						$alti+=$inter[$k]['alti'];
    						$date+=$inter[$k]['date'];
    					}
    					$ret[]=array('la' => $la/$j,'lo' => $lo/$j,'alti' => $alti/$j,'date' => date("Y-m-d H:i:s", $date/$j) );
    					$ret[]=$tab[$i];
    					$j=0;
    				}
    			}
    		}
    		if($i % $step)
    		{
    			$la=0;
    			$lo=0;
    			$alti=0;
    			$date=0;
    			for($k=0;$k<$j;$k++)
    			{
    				$la+=$inter[$k]['la'];
    				$lo+=$inter[$k]['lo'];
    				$alti+=$inter[$k]['alti'];
    				$date+=$inter[$k]['date'];
    			}
    			$ret[]=array('la' => $la/$j,'lo' => $lo/$j,'alti' => $alti/$j,'date' => date("Y-m-d H:i:s", $date/$j) );
    		}
    	}
     
    	$sql_select_pts_gps = $bdd->query('SELECT coord_gps_lat AS la,coord_gps_lon AS lo,coord_gps_altitude AS alti, coord_gps_date AS date '
    									. ' FROM pevtt_coordonnee_gps'
    									. ' WHERE id_fichier_gps = 55');
     
    	$array = array();
    	while($tab_pts_gps = $sql_select_pts_gps->fetch())
    	{
     
    		$array[]=array('la' =>$tab_pts_gps['la'], 'lo'=> $tab_pts_gps['lo'], 'alti' =>$tab_pts_gps['alti'], 'date' => convert_datetime($tab_pts_gps['date']),);
    	} 
            $retour=array();
            pathSimplification($array,$retour,10);
     
    	echo '<pre>';
    	echo print_r($retour);
    	echo '</pre>';

  2. #22
    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
    l'idée est simple:

    on garde un poinr tous les $step points et on moyenne les autres qui sont intermédiaires...
    pour faire ça on va comparer l'indice $i du point courant avec $step grâce au modulo

    a modulo b vaut 0 si a est un multiple entier de b...

    donc si $i modulo $step
    • vaut 0:
      • si $i==0 alors on stocke le 1er point dans $ret
      • sinon :
        • on fait la moyenne des points intermédiaires précédents $inter
        • on la stocke dans $ret
        • on stocke le point courant dans $ret
        • on réinitialise le comptage des points intermédiaires $j
    • différent de 0:
      • on stocke le point courant dans $inter
      • on augmente le compteur de points intermédiaires $j

    moins de 10 minutes pour pondre ça de tête, mais c'est pas compliqué du tout

  3. #23
    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
    ça m'a pas l'air mal... à tester...

  4. #24
    Membre éclairé
    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
    Par défaut
    Merci pour l'explication,

    10 mn pour pondre ça ok mais pas avec mon cerveau qui a bien du mal avec les Mathématiques...

    J'ai donc toutes mes informations et la simplification fonctionne bien. Je récupère mon tableau avec les informations. Comment puis-je ajouter à ce tableau une variable incrémentale ainsi qu'une variable contenant un id.

  5. #25
    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
    à l'insertion dans la table
    tu as juste à remplacer dans ta boucle d'insertion initiale la lecture directe des valeurs par celle du tableau les autres valeurs ne changent pas...

    je vois pas où est ton soucis?

  6. #26
    Membre éclairé
    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
    Par défaut
    Effectivement, je me creuse la tête pour rien

    Je réflechi aussi à comment je pourrais faire pour simplifier les données existantes. Il faut traiter trace gps par trace gps. Comment t'y prendrais tu ?

  7. #27
    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
    tu as quoi dans ta table actuellement?

    fais voir le show create sur elle

  8. #28
    Membre éclairé
    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
    Par défaut
    On va se concentrer pour l'instant sur l'insertion des nouvelles traces.

    A cet heure ci, j'en suis la :


    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
    	//3) integration des coordonnées gps à partir du fichier gpx stocké
    	$xml =  $racine.'/upload/articles/gpx/2/4/165/trace-brute-aude-ok.20102511641.gpx';
    	$obj = simplexml_load_file($xml, 'SimpleXMLIterator');
     
    	$array = array();
    	foreach($obj->trk->trkseg->trkpt as $trkpt)
    	{
    		$array[]=array('la' => $trkpt['lat'], 'lo' => $trkpt['lon'], 'alti' => $trkpt->ele, 'date' => convert_datetime(strftime("%Y-%m-%d %H:%M:%S", strtotime($trkpt->time))), );
    	}
     
        $retour = array();
        pathSimplification($array,$retour,10);
     
     
    	echo '<pre>';
    	echo print_r($retour);
    	echo '</pre>';
    Je ne comprends pas pourquoi mon array affiche :

    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
    52
    53
    54
    55
    56
    57
    Array
    (
        [0] => Array
            (
                [la] => SimpleXMLIterator Object
                    (
                        [0] => 43.1819660
                    )
     
                [lo] => SimpleXMLIterator Object
                    (
                        [0] => 2.3848760
                    )
     
                [alti] => SimpleXMLIterator Object
                    (
                        [0] => 15.0400000
                    )
     
                [date] => 1241249005
            )
     
        [1] => Array
            (
                [la] => 43
                [lo] => 2
                [alti] => 35.333333333333
                [date] => 2009-05-02 09:23:31
            )
     
        [2] => Array
            (
                [la] => SimpleXMLIterator Object
                    (
                        [0] => 43.1819570
                    )
     
                [lo] => SimpleXMLIterator Object
                    (
                        [0] => 2.3848600
                    )
     
                [alti] => SimpleXMLIterator Object
                    (
                        [0] => 54.4500000
                    )
     
                [date] => 1241249019
            )
     
        [3] => Array
            (
                [la] => 43
                [lo] => 2
                [alti] => 35.333333333333
                [date] => 2009-05-02 09:23:31
            )
    Une idée du bug ?

  9. #29
    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
    c'est bizarre...

    j'ai accédé à ton fier gpx pour tester...

    j'ai compris regarde l'extrait de $array:
    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
    Array
    (
        [0] => Array
            (
                [la] => SimpleXMLIterator Object
                    (
                        [0] => 43.1819660
                    )
     
                [lo] => SimpleXMLIterator Object
                    (
                        [0] => 2.3848760
                    )
     
                [alti] => SimpleXMLIterator Object
                    (
                        [0] => 15.0400000
                    )
     
                [date] => 1241249005
            )
     
        [1] => Array
            (
                [la] => SimpleXMLIterator Object
                    (
                        [0] => 43.1819680
                    )
     
                [lo] => SimpleXMLIterator Object
                    (
                        [0] => 2.3848690
                    )
     
                [alti] => SimpleXMLIterator Object
                    (
                        [0] => 20.3200000
                    )
     
                [date] => 1241249006
            )
    en fait, tu passes des itérateurs au lieu des valeurs

    il faut corriger ta boucle de lecture comme ça:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $array = array();
    foreach($obj->trk->trkseg->trkpt as $trkpt)
    {
    	$array[]=array('la' => doubleval($trkpt['lat']), 'lo' => doubleval($trkpt['lon']), 'alti' => floatval($trkpt->ele), 'date' => convert_datetime(strftime("%Y-%m-%d %H:%M:%S", strtotime($trkpt->time))), );
    }

  10. #30
    Membre éclairé
    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
    Par défaut
    C'est mieux mais la date est parfois en datetime et parfois en timestamp

    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
        [0] => Array
            (
                [la] => 43.181966
                [lo] => 2.384876
                [alti] => 15.04
                [date] => 1241249005
            )
     
        [1] => Array
            (
                [la] => 43.181965666667
                [lo] => 2.3848566666667
                [alti] => 35.758888888889
                [date] => 2009-05-02 09:23:31
            )
     
        [2] => Array
            (
                [la] => 43.181957
                [lo] => 2.38486
                [alti] => 54.45
                [date] => 1241249019
            )
     
        [3] => Array
            (
                [la] => 43.181965666667
                [lo] => 2.3848566666667
                [alti] => 35.758888888889
                [date] => 2009-05-02 09:23:31
            )
    Sinon, il y a pas de souci, les fichiers gpx sont libres de droits et sont téléchargeables.

    D'après toi est-il possible de faire l'insertion avec le foreach() déjà existant ou faut-il en utiliser un autre ?

  11. #31
    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
    je sais je m’idolâtre souvent...

    déjà je te conseille de regarder l'utilisation de foreach avec un référence & pour éviter que ça te crée un copie pour rien et bien travailler directement sur le tableau parcouru..

    tu vas y gagner en mémoire et temps là encore...

    faut juste l'adapter c'est pas dur

    ensuite, faut voir la table et sa structure pour voir s'il y a encore des gains de performances à faire...

  12. #32
    Membre éclairé
    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
    Par défaut
    Citation Envoyé par ericd69 Voir le message
    je sais je m’idolâtre souvent...
    sauf...qu'entre temps, j'ai remarqué une erreur concernant la date, une fois c'est du timestamp et une fois c'est du datetime

    Une idée sur le pourquoi ?

    Merci !

  13. #33
    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
    j'ai trouvé, dans la fonction de simplification
    tu dois changer les lignes:
    par:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    array('la' => $tab[$i]['la'],'lo' => $tab[$i]['lo'],'alti' => $tab[$i]['alti'],'date' => date("Y-m-d H:i:s", $tab[$i]['date']) )

  14. #34
    Membre éclairé
    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
    Par défaut
    Ahah ! j'ai changé aussi

    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array('la' => $tab[$i]['la'],'lo' => $tab[$i]['lo'],'alti' => $tab[$i]['alti'],'date' => date("Y-m-d H:i:s", $tab[$i]['date']) )
    car la première date du premier élément était aussi en timestamp.

    Reste plus qu'à réfléchir comment intégrer tout ça. J'ai regardé un peu ce qu'était la notion de référence (que je ne connaissais pas!) et j'ai compris que cela permettait (entre autre) de dupliquer le contenu d'une variable. C'est si intéressant que ça en gain de perf ?

    J'essaye de regarder comment intégrer ça et si j'ai des soucis, je reviens

    merci !

  15. #35
    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
    de ne pas dupliquer en fait si tu fais une référence...

    foreach sinon travaille par valeur, c'est à dire sur une copie

  16. #36
    Membre éclairé
    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
    Par défaut
    Comment fait-ton pour travailler sur cette copie car pour l'instant j'ai fait ça pour l'intégration :

    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
    	//insertion des données
    	$sql_insert_coordonnee = $bdd->prepare('INSERT INTO pevtt_coordonnee_gps (id_fichier_gps, id_coord_gps, coord_gps_lat , coord_gps_lon, coord_gps_altitude, coord_gps_date)' 
    											. ' VALUES (:id_fichier_gps, :id_coord_gps, :coord_gps_lat, :coord_gps_lon, :coord_gps_altitude, :coord_gps_date)');
    	$id_coord_gps = 1;
    	foreach($retour as $trkpt)
    	{
     
    		$tableau_gpx = array(
    			':coord_gps_lat' => $trkpt['la'],
    			':coord_gps_lon' => $trkpt['lo'],
    			':coord_gps_altitude' => $trkpt['alti'],
    			':coord_gps_date' => $trkpt['date'],
    			':id_fichier_gps' => $id_fichier_gps,
    			':id_coord_gps' => $id_coord_gps	
    		);
    		$sql_insert_coordonnee->execute($tableau_gpx);
    		$id_coord_gps++;	
    	}

  17. #37
    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
    la tu travailles sur la copie donc tu bouffes de la mémoire pour rien...

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach($retour as &$trkpt)
    utilise la référence et ne travaille pas sur une copie de $retour mais sur lui directement...
    sur des gros tableau ça se voit
    par contre, tu dois détruire $trkpt avec un unset si tu veux la réutiliser après car elle reste un pointeur sur la dernière valeur du tableau lu...

    ici pas besoin de:

  18. #38
    Membre éclairé
    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
    Par défaut
    Ok merci pour l'explication

    Je vais essayer de créer un script pour faire la màj de mes nombreuses traces GPS. Comment faire en sorte de traiter tout le lot de trace mais en le faisant trace par trace ?

  19. #39
    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
    moi je serais de toi je créerais une table avec la même structure
    et je ferais un script qui lit une trace dans la table origine, la réduit et insert le résultat dans table destination

    tu testes que ça marche bien

    et ensuite tu changes de trace et hop manuellement mais mieux automatiquement...

    comme c'est lourd soit tu crées un cron selon ton hébergement, c'est possible ou pas

    récupérer le numéro de trace suivant à traiter automatiquement:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select min(p.id_fichier_gps)
    from pevtt_coordonnee_gps p
    where id_fichier_gps>(select coalesce(max(id_fichier_gps),0) from destination)

  20. #40
    Membre éclairé
    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
    Par défaut
    Bonjour,

    Je viens de voir qu'il y a un autre souci; la fonction remonte toujours le même point

    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
    Array
    (
        [:coord_gps_lat] => 43.181965666667
        [:coord_gps_lon] => 2.3848566666667
        [:coord_gps_altitude] => 35.758888888889
        [:coord_gps_date] => 2009-05-02 09:23:31
        [:id_fichier_gps] => 
        [:id_coord_gps] => 1
    )
    1
     
    Array
    (
        [:coord_gps_lat] => 43.181965666667
        [:coord_gps_lon] => 2.3848566666667
        [:coord_gps_altitude] => 35.758888888889
        [:coord_gps_date] => 2009-05-02 09:23:31
        [:id_fichier_gps] => 
        [:id_coord_gps] => 2
    )
    1
     
    Array
    (
        [:coord_gps_lat] => 43.181965666667
        [:coord_gps_lon] => 2.3848566666667
        [:coord_gps_altitude] => 35.758888888889
        [:coord_gps_date] => 2009-05-02 09:23:31
        [:id_fichier_gps] => 
        [:id_coord_gps] => 3
    )
    1


    La fonction actuelle :

    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
    		function pathSimplification(&$tab,&$ret,$step)
    	{
    		$ret=array();
    		$inter=array();
    		$j=0;
    		for($i=0;$i<sizeof($tab);$i++)
    		{
    			if($i % $step)
    			{
    				$inter[]=$tab[$i];
    				$j++;
    			}
    			else
    			{
    				if($i==0)
    					array('la' => $tab[$i]['la'],'lo' => $tab[$i]['lo'],'alti' => $tab[$i]['alti'],'date' => date("Y-m-d H:i:s", $tab[$i]['date']) );
    					//$ret[]=$tab[0];
    				else
    				{
    					$la=0; $lo=0; $alti=0; $date=0;
     
    					for($k=0;$k<$j;$k++)
    					{
    						$la+=$inter[$k]['la'];
    						$lo+=$inter[$k]['lo'];
    						$alti+=$inter[$k]['alti'];
    						$date+=$inter[$k]['date'];
    					}
    					$ret[]=array('la' => $la/$j,'lo' => $lo/$j,'alti' => $alti/$j,'date' => date("Y-m-d H:i:s", $date/$j) );
     
    					array('la' => $tab[$i]['la'],'lo' => $tab[$i]['lo'],'alti' => $tab[$i]['alti'],'date' => date("Y-m-d H:i:s", $tab[$i]['date']) );
    					//$ret[]=$tab[$i];
     
    					$j=0;
    				}
    			}
    		}
    		if($i % $step)
    		{
    			$la=0; $lo=0; $alti=0; $date=0;
     
    			for($k=0;$k<$j;$k++)
    			{
    				$la+=$inter[$k]['la'];
    				$lo+=$inter[$k]['lo'];
    				$alti+=$inter[$k]['alti'];
    				$date+=$inter[$k]['date'];
    			}
    			$ret[]=array('la' => $la/$j,'lo' => $lo/$j,'alti' => $alti/$j,'date' => date("Y-m-d H:i:s", $date/$j) );
    		}
    	}

    Utilisation de la fonction et insertion :

    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
    	$xml =  $racine.'/upload/articles/gpx/2/4/165/trace-brute-aude-ok.20102511641.gpx';
    	$obj = simplexml_load_file($xml, 'SimpleXMLIterator');
     
    	$array = array();
    	foreach($obj->trk->trkseg->trkpt as $trkpt)
    	{
    		$array[]=array('la' => doubleval($trkpt['lat']), 'lo' => doubleval($trkpt['lon']), 'alti' => floatval($trkpt->ele), 'date' => convert_datetime(strftime("%Y-%m-%d %H:%M:%S", strtotime($trkpt->time) ) ), );
    	}
     
        $retour = array();
    	//appel de la fonction de simplifaction on récupère les données par références
       	pathSimplification($array,$retour,10);
     
    	//insertion des données
    	$sql_insert_coordonnee = $bdd->prepare('INSERT INTO pevtt_coordonnee_gps (id_fichier_gps, id_coord_gps, coord_gps_lat , coord_gps_lon, coord_gps_altitude, coord_gps_date)' 
    											. ' VALUES (:id_fichier_gps, :id_coord_gps, :coord_gps_lat, :coord_gps_lon, :coord_gps_altitude, :coord_gps_date)');
    	$id_coord_gps = 1;
    	foreach($retour as &$trkpt)
    	{
     
    		$tableau_gpx = array(
    			':coord_gps_lat' => $trkpt['la'],
    			':coord_gps_lon' => $trkpt['lo'],
    			':coord_gps_altitude' => $trkpt['alti'],
    			':coord_gps_date' => $trkpt['date'],
    			':id_fichier_gps' => $id_fichier_gps,
    			':id_coord_gps' => $id_coord_gps	
    		);
    		$sql_insert_coordonnee->execute($tableau_gpx);
    		$id_coord_gps++;		
    	}
    Une idée d'où cela peut provenir ?

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