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

Bibliothèques et frameworks PHP Discussion :

[PHP4] Extraire données de document kml (xml)


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Par défaut [PHP4] Extraire données de document kml (xml)
    Bonjour à tous,

    Tout d'abord exusez moi si je ne suis pas dans le bon forum mais je suis nouveau.

    Je dispose de fichiers kml (pour Google Maps/Earth) qui sont enfait des fichiers xml. Je dois les parcourir et en extraire les info pour les stocker dans une base.

    Les fichiers kml ont la structure 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
     
    <folder>
       <placemark> 
          <name>1</name>
          <coordinates> 
          4.95997596989152,47.2409629063936,0 
          4.96096553013865,47.2410661373886,0 
          4.96163376393553,47.2411585649065,0 
          4.96243038378519,47.241291118222,0 
          </coordinates> 
       </placemark> 
       <placemark> 
          <name>1</name>
          <coordinates> 
          4.96316273339759,47.2414035887977,0 
          4.96316281690188,47.2414036016216,0  
          4.96323650722583,47.241617180394,0 
          4.96331567288968,47.2417399188683,0 
          4.96337333752883,47.2418293217545,0 
          </coordinates> 
       </placemark> 
    ... 
     
    </folder>

    J'utilise php4 et je ne sais pas comment récupèrer les <coordinates> d'un <placemark>.
    Pour récupèrer les autres données j'utilise la fonction DOM xml : get_Elements_By_Tag_Name(). Mais cette fonction renvoie tout les elements dont le nom de balise est passé en paramètre et moi je veux juste les element du placemark courant!?

    Merci de votre aide

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    On peut voir votre code ? Parce que la méthode get_elements_by_tagname, sur un élément donné, ne devrait renvoyer que ses propres enfants.

    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
    <?php
    $xml = <<< EOX
    <folder>
       <placemark> 
          <name>1</name>
          <coordinates> 
          4.95997596989152,47.2409629063936,0 
          4.96096553013865,47.2410661373886,0 
          4.96163376393553,47.2411585649065,0 
          4.96243038378519,47.241291118222,0 
          </coordinates> 
       </placemark> 
       <placemark> 
          <name>1</name>
          <coordinates> 
          4.96316273339759,47.2414035887977,0 
          4.96316281690188,47.2414036016216,0  
          4.96323650722583,47.241617180394,0 
          4.96331567288968,47.2417399188683,0 
          4.96337333752883,47.2418293217545,0 
          </coordinates> 
       </placemark> 
    </folder> 
    EOX;
     
    $doc = domxml_open_mem($xml, DOMXML_LOAD_DONT_KEEP_BLANKS);
    $root = $doc->document_element();
    foreach ($root->child_nodes() as $placemark) {
        $names = $placemark->get_elements_by_tagname('name');
        echo $names[0]->get_content();
        echo '<ul>';
        foreach ($placemark->get_elements_by_tagname('coordinates') as $coordinates) {
            foreach (preg_split('/[ \n\r]/', $coordinates->get_content(), -1, PREG_SPLIT_NO_EMPTY) as $c) {
                list($x, $y, $z) = explode(',', $c);
                echo '<li>X = ' . $x . ' ; Y = ' . $y . ' ; Z = ' . $z . '</li>';
            }
        }
        echo '</ul>';
    }
    PS : le multipost c'est mal

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Par défaut
    Merci pour votre réponse!

    Voici un exemple de fichier kml.

    J'ai essayé d'extraire les coordonées avec le code que vous m'avez fournit mais ca na marche pas. Comment placer le pointeur sur les balises <placemark>??

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <kml xmlns="http://earth.google.com/kml/2.2">
    <Document>
      <name><![CDATA[n°1_la_boucle_du_fourneau]]></name>
      <open>1</open>
      <Snippet maxLines="2"></Snippet>
      <description><![CDATA[Exported from n°1_la_boucle_du_fourneau on 02/02/2009]]></description>
      <Style id="FEATURES">
        <LineStyle>
          <color>FFAB007D</color>
          <width>1</width>
        </LineStyle>
      </Style>
      <Folder>
        <name>Features</name>
        <open>0</open>
           <Placemark>
             <name><![CDATA[1]]></name>
             <Snippet maxLines="2"></Snippet>
             <styleUrl>#FEATURES</styleUrl>
               <LineString>
                 <extrude>0</extrude>
                 <tessellate>1</tessellate>
                 <altitudeMode>clampedToGround</altitudeMode>
                 <coordinates>
                   5.36887184445126,47.5261061144012,0
                   5.36989287672891,47.5263218856547,0
                   5.37024150309523,47.526158471606,0
                   5.37053254500734,47.525555713876,0
                   5.37143741262168,47.5260169766864,0
                   5.37244855829371,47.5266297484781,0
                   5.37349347513325,47.5272636702324,0
                   5.3748908084487,47.5278001831873,0
                   5.3763781059564,47.5282020676118,0
                   5.37802160164928,47.5284896258003,0
                   5.37861779306645,47.5286723752789,0
                   5.37986446676971,47.5285074207777,0
                   5.3808730007802,47.5285030002272,0
                   5.3828213038264,47.5284298109881,0
                   5.38512701995899,47.5283471965244,0
                   5.38730149742171,47.5282459449902,0
                   5.38950593411575,47.5280997787723,0
                   5.39036268242366,47.5271514368178,0
    			 </coordinates>
               </LineString>
           </Placemark>
           <Placemark>
             <name><![CDATA[1]]></name>
             <Snippet maxLines="2"></Snippet>
             <styleUrl>#FEATURES</styleUrl>
               <LineString>
                 <extrude>0</extrude>
                 <tessellate>1</tessellate>
                 <altitudeMode>clampedToGround</altitudeMode>
                 <coordinates>
                   5.39047875846544,47.526905911868,0
                   5.39005224252032,47.5262779034591,0
                   5.38923205941303,47.5255941265054,0
                   5.38863207999342,47.5253454030464,0
                   5.38817342473106,47.5252913424055,0
                   5.38788227039394,47.525321044394,0
                   5.3875624097337,47.5254176285788,0
                   5.3846465027898,47.524502371468,0
                   5.38403521630821,47.524055538767,0
                   5.38377880696548,47.5235552953847,0
                   5.38356371086502,47.5232082644023,0
                   5.38206491451401,47.5220352847342,0
                   5.38080744617251,47.5210984215496,0
                   5.37962254642591,47.5202918970985,0
                   5.37924882688048,47.520015148162,0
                   5.3786129100795,47.5202742972107,0
                   5.37789294328226,47.519631901316,0
                   5.377239225003,47.5190098069996,0
                   5.37691415935887,47.5184452219869,0
                   5.37694896419389,47.5179152878325,0
                   5.37755594409787,47.5171499263742,0
                 </coordinates>
               </LineString>
           </Placemark>
      </Folder>
    </Document>
    </kml>
    Merci de votre aide!

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Et votre code ?

    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
    93
    94
    95
    96
    97
    98
    99
    <?php
    $xml = <<< EOX
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <kml xmlns="http://earth.google.com/kml/2.2">
    <Document>
      <name><![CDATA[n°1_la_boucle_du_fourneau]]></name>
      <open>1</open>
      <Snippet maxLines="2"></Snippet>
      <description><![CDATA[Exported from n°1_la_boucle_du_fourneau on 02/02/2009]]></description>
      <Style id="FEATURES">
        <LineStyle>
          <color>FFAB007D</color>
          <width>1</width>
        </LineStyle>
      </Style>
      <Folder>
        <name>Features</name>
        <open>0</open>
           <Placemark>
             <name><![CDATA[1]]></name>
             <Snippet maxLines="2"></Snippet>
             <styleUrl>#FEATURES</styleUrl>
               <LineString>
                 <extrude>0</extrude>
                 <tessellate>1</tessellate>
                 <altitudeMode>clampedToGround</altitudeMode>
                 <coordinates>
                   5.36887184445126,47.5261061144012,0
                   5.36989287672891,47.5263218856547,0
                   5.37024150309523,47.526158471606,0
                   5.37053254500734,47.525555713876,0
                   5.37143741262168,47.5260169766864,0
                   5.37244855829371,47.5266297484781,0
                   5.37349347513325,47.5272636702324,0
                   5.3748908084487,47.5278001831873,0
                   5.3763781059564,47.5282020676118,0
                   5.37802160164928,47.5284896258003,0
                   5.37861779306645,47.5286723752789,0
                   5.37986446676971,47.5285074207777,0
                   5.3808730007802,47.5285030002272,0
                   5.3828213038264,47.5284298109881,0
                   5.38512701995899,47.5283471965244,0
                   5.38730149742171,47.5282459449902,0
                   5.38950593411575,47.5280997787723,0
                   5.39036268242366,47.5271514368178,0
    			 </coordinates>
               </LineString>
           </Placemark>
           <Placemark>
             <name><![CDATA[1]]></name>
             <Snippet maxLines="2"></Snippet>
             <styleUrl>#FEATURES</styleUrl>
               <LineString>
                 <extrude>0</extrude>
                 <tessellate>1</tessellate>
                 <altitudeMode>clampedToGround</altitudeMode>
                 <coordinates>
                   5.39047875846544,47.526905911868,0
                   5.39005224252032,47.5262779034591,0
                   5.38923205941303,47.5255941265054,0
                   5.38863207999342,47.5253454030464,0
                   5.38817342473106,47.5252913424055,0
                   5.38788227039394,47.525321044394,0
                   5.3875624097337,47.5254176285788,0
                   5.3846465027898,47.524502371468,0
                   5.38403521630821,47.524055538767,0
                   5.38377880696548,47.5235552953847,0
                   5.38356371086502,47.5232082644023,0
                   5.38206491451401,47.5220352847342,0
                   5.38080744617251,47.5210984215496,0
                   5.37962254642591,47.5202918970985,0
                   5.37924882688048,47.520015148162,0
                   5.3786129100795,47.5202742972107,0
                   5.37789294328226,47.519631901316,0
                   5.377239225003,47.5190098069996,0
                   5.37691415935887,47.5184452219869,0
                   5.37694896419389,47.5179152878325,0
                   5.37755594409787,47.5171499263742,0
                 </coordinates>
               </LineString>
           </Placemark>
      </Folder>
    </Document>
    </kml>
    EOX;
     
    $doc = domxml_open_mem($xml, DOMXML_LOAD_DONT_KEEP_BLANKS);
    foreach ($doc->get_elements_by_tagname('Placemark') as $placemark) {
        $names = $placemark->get_elements_by_tagname('name');
        echo $names[0]->get_content();
        echo '<ul>';
        foreach ($placemark->get_elements_by_tagname('coordinates') as $coordinates) {
            foreach (preg_split('/[\s\n\r]/', $coordinates->get_content(), -1, PREG_SPLIT_NO_EMPTY) as $c) {
                list($x, $y, $z) = explode(',', $c);
                echo '<li>X = ' . $x . ' ; Y = ' . $y . ' ; Z = ' . $z . '</li>';
            }
        }
        echo '</ul>';
    }

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Par défaut
    OK ca marche avec le code que vous m'avez fournit!!!

    Merci beaucoup!

  6. #6
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2016
    Messages : 11
    Par défaut Trier dans fichier kml
    Je voudrais trier des données sur un fichier kml, afin d’avoir plusieurs calques de données sur géoportail.
    Je voudrais sélectionné la ou les données ciblé sur un mot choisi ceci entre 2 balises <Placemark> et < /Placemark>, cela devrai faire l’objet d'un copier, de la ou des sélections afin d’être coller sur un autre document kml, j’utilise notepade+ pour l’instant.
    Il y à t’il une solution logiciel ou avec une macro
    Merci

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/04/2009, 13h10
  2. extraires données xml d'un char*
    Par wadcyr8_197 dans le forum XML
    Réponses: 15
    Dernier message: 27/06/2007, 10h22
  3. extraire donné fichier txt afficher dans xml
    Par jasminrose dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 01/04/2007, 12h14
  4. Réponses: 2
    Dernier message: 20/10/2006, 10h49
  5. Extraire données d'un webservice , xml , php ..
    Par Lettue dans le forum Langage
    Réponses: 1
    Dernier message: 14/09/2006, 19h24

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