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

WinDev Discussion :

Fichier KML et windev [WD20]


Sujet :

WinDev

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 91
    Points
    91
    Par défaut Fichier KML et windev
    Bonjour à tous!
    Une fois de plus, je viens faire appel aux experts que vous êtes . . .
    Cela concerne la construction de fichier kml (xml) pour GOOGLE EARTH.
    Mon problème est que je voudrais à la suite écrire dans un fichier XML des enregistrements d'une base HFSQL.
    Voici mon 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
     
    GE est un xmlDocument
    GE = XMLOuvre(fRepExe() + "\MesPoissons.xml",depuisFichier)
    XMLDocument("GE")
     
    GETmp est un xmlDocument
    GETmp = XMLOuvre(fRepExe() + "\MesPoissonsTmp.xml",depuisFichier)
    XMLDocument("GETmp")
     
     
    SI HNbEnr(MesLieux)<>0 ALORS
    //	
    	HLitPremier(MesLieux,DateHeure)
    	TANTQUE HEnDehors()=Faux	
    		//HEnregistrementVersXML(MesLieux,"DateHeure,Longitude,Latitude")
     
    		sGELong est une chaîne
    		sGELat est une chaîne
    		sGEMoment est une chaîne
     
    		sGELong=MesLieux.Longitude
    		sGELat=MesLieux.Latitude
    		sGEMoment=MesLieux.DateHeure
     
     
     
    		XMLEcrit("GETmp","/Placemark/name",sGEMoment)
     
    		sGECoordonnées est une chaîne
    		sGECoordonnées=sGELong + "," + sGELat + "," + 5000
     
    		XMLEcrit("GETmp","Point/coordinates",sGECoordonnées)
    		XMLEcrit("GETmp","Point/Icon/href","http://maps.google.com/mapfiles/kml/pushpin/blue-pushpin.png")
    		fSauveTexte(fRepExe+"\MesPoissonsTmp.xml",XMLConstruitChaîne("GETmp",XMLDocumentDéfaut,XMLEncodageUTF8))
     
    		XMLInsèreDocument("GE","GETmp",XMLElémentSuivant)
     
    		HLitSuivant(MesLieux)
     
    	FIN	 
    FIN	
     
    SI fSauveTexte(fRepExe+"\MesPoissons.xml",XMLConstruitChaîne("GE",XMLDocumentDéfaut,XMLEncodageUTF8))=Vrai ALORS
    		fCopieFichier(fRepExe+"\MesPoissons.xml",fRepExe+"\MesPoissons.kml",frConfirmer)
     
    		Info("Exportation dans GOOGLE EARTH réussi!")
    FIN
     
    		OuiNon(Oui,"Voulez vous ouvrir GOOGLE EARTH?")
    		LanceAppliAssociée(fRepExe+"\MesPoissons.kml","open")
     
    		XMLTermine("GE")
    	        XMLTermine("GETmp")
    Mon but était donc à partir d'une application ANDROID que j'ai développé, faire une extraction sur une autre application WINDOWS en cours, de tous les points enregistrés sur un champ carte et ensuite faire un export sur GOOGLE EARTH.
    Tout fonctionne bien sauf mon export.
    J'ai bien un fichier <Placemark> avec mes données créé mais c'est toujours le dernier!
    Je n'arrive pas à insérer au fur et à mesure les placemark à la suite dans le fichier xml qui ensuite devient un fichier kml.
    De plus, les fichiers kml ont cet entête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <kml xmlns="http://www.opengis.net/kml/2.2>")
    J'avais essayé cela mais cela provoque une erreur!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XMLecrit("GE","<kml xmlns="+"http://www.opengis.net/kml/2.2"+">")
    De plus je n'arrive pas a avoir le pushpin que je sélectionne dans mon code!
    J’espère avoir était assez clair! Le cas échéant, n'hésitez pas à me contacter!!
    Merci à tous de votre retour!

  2. #2
    Invité
    Invité(e)
    Par défaut
    dans mon cas, j'aurais manipulé le fichier xml de la même manière qu'un fichier texte, mais après, à chacun sa façon de procéder.
    Pour charger mon xml, j'utilise fchargeTexte, pour insérer de nouvelles balises je concatène le contenu de mon xml par une autre chaine, j'enregistre le tout avec fsauveTexte.

  3. #3
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    avec l'assemblage dotnet sharpkml disponible ici on peut construire un fichier kml avec toutes les options possibles.
    Voici un exemple en windev qui utilise cet assemblage. L'exemple consiste à afficher dans googleEarth une punaise bleue zoomée par 4 dans la bonne ville de Bergues.
    le 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
    MonFichierXml est un System.IO.FileStream dynamique
    MonKml est un Kml
    MonPoint est un SharpKml.Dom.Point
    MonKmlStyle  est un  SharpKml.Dom.Style()
    MonKmlStyle.Id = "MaPunaise"
    MonIconStyle est un SharpKml.Dom.IconStyle()
    MonKmlStyle.Icon = MonIconStyle
    MonIcone est un "System".Uri("http://maps.google.com/mapfiles/kml/pushpin/blue-pushpin.png")
    MonIconLink est un SharpKml.Dom.IconStyle.IconLink(MonIcone)
    MonKmlStyle.Icon.Icon = MonIconLink
    MonKmlStyle.Icon.Scale = 4.0
    MonStyle est un  System.Uri("#MaPunaise", UriKind.Relative)
    //Bergues chez les chtis
    MesCoordonnées est un SharpKml.Base.Vector(50.9692, 2.435)
    Monplacemark est un Placemark
    MonPoint.Coordinate = MesCoordonnées
    Monplacemark.Geometry = MonPoint
    Monplacemark.Name =  "Bienvenue chez les chtis"
    Monplacemark.AddStyle(MonKmlStyle)
    MonKml.Feature = Monplacemark
    MonKmlFile est un KmlFile dynamique = KmlFile.Create(MonKml,True)
    MonFichierXml = File.Create("F:\temp\test.kml",2)  // 2 = create
    MonKmlFile.Save(MonFichierXml)
    MonFichierXml.Close()
    le fichier généré :
    Code XML : 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
    <?xml version="1.0" encoding="utf-8"?>
    <kml xmlns="http://www.opengis.net/kml/2.2">
      <Placemark>
        <name>Bienvenue chez les chtis</name>
        <Point>
          <coordinates>2.4350000000000001,50.969200000000001</coordinates>
        </Point>
        <Style id="MaPunaise">
          <IconStyle>
            <scale>4</scale>
            <Icon>
              <href>http://maps.google.com/mapfiles/kml/pushpin/blue-pushpin.png</href>
            </Icon>
          </IconStyle>
        </Style>
      </Placemark>
    </kml>

    Le résultat dans googleEarth :
    Nom : sharpkml.jpg
Affichages : 1283
Taille : 62,0 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    Tout d'abord, avant de passer à votre problème, quelques observations "qualité" :
    1. Déclaration des variables :
      Vous déclarez vos variables au fur et à mesure de vos besoins, dans le corps du code : voir lignes 17, 18, 19 et 29.
      Dans l'absolu, cela diminue la lisibilité de votre code et en complique donc la relecture et la maintenance.
      En plus, dans le cas présent, comme vous êtes dans le cadre d'une boucle TANT QUE, vous allez répéter ces déclarations autant de fois qu'il y aura d'itérations.
      Même si Windev ne lève pas une erreur, on ne déclare qu'une fois une variable puis on l'affecte autant de fois que de besoin.
      Cela représente une surcharge à l'exécution.
    2. Concaténation de variables de types différents :
      En ligne 30, vous concaténez 5000 (qui est une donnée de type 'numérique') à une chaîne sans l'entourer de guillemets.
      Même si Windev vous gratifie d'une conversion automatique, ce n'est pas une bonne pratique.
      Donc, utilisez les guillemets, NumériqueVersChaîne(), une variable ou une constante, les deux dernières solutions vous offrant plus de souplesse à terme.
    3. Vous ne testez pas vos erreurs, notamment après XMLOuvre()



    Concernant votre approche de XML sous WINDEV et vos problèmes :
    Windev a proposé historiquement deux approches des fichiers XML :
    - la chaîne d'instructions XML traitée comme un code, traitement initié par la fonction XMLDocument() et manipulée par une batterie de fonctions
    - la variable de type xmlDocument qui est maintenant la solution préconisée, ne connaît que 5-6 instructions spécifiques et est traitée par le biais de structures et de tableaux, avec leurs instructions classiques.
    Le choix du même nom pour deux concepts différents ET incompatibles est à déplorer et source de confusion.

    Voyez aussi mon post précédent à ce sujet.

    En pratique, tant pour GE que GETmp, vous mélangez les deux univers :
    Vous déclarez un xmlDocument que vous ouvrez correctement et ensuite vous créez un second document XML (mais plus une variable de type XML) en recourant à la fonction XMLDocumment().
    La fonction XMLDocument() attend deux paramètres principaux : le nom du document XML (qui est une chaîne et non une variable de type xmlDocument) et, optionnellement, le nom la chaîne XML qui contient le code XML à traiter.
    Si le second paramètre est omis (ce qui est votre cas), la fonction crée un nouveau document XML vide (lignes 4 et 8).
    Vous vous retrouvez donc avec 2 documents 'XML' de types différents :
    - le premier, de type xmlDocument, contient les données que vous avez récupérées, mais après l'avoir ouvert, vous ne le travaillez plus.
    - le second, de type 'chaîne XML', est vide et vous lui ajoutez des informations.
    Je suppose que Windev ne lève pas d'erreur devant cette homonymie parce que les deux variables sont de types différents.

    Pour finir, si j'ai bien suivi, vous écrasez le GE original avec le GE qui ne contient que les nouvelles informations, puisque c'est un nouveau document vide qui a été créé par les lignes 4 et 8.



    Si vous mettez en commentaire les lignes 2,3 et 6,7, puis complétez l'appel à XMLDocument() avec le second paramètre requis, vous devriez vous y retrouver.
    Mais le mieux serait de revoir votre traitement en basant tout sur les variables de type xmlDocument.
    Solution préconisée par PCsoft, elle sera a priori mieux supportée à l'avenir et surtout, elle est in fine beaucoup plus simple à l'usage.

    Bon travail

    Hemgé

  5. #5
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 91
    Points
    91
    Par défaut KML et Windev
    Merci pour vos réponses!
    A HEMGE:
    J'ai donc repris mon code. J'ai rajouté une lecture d'un 2éme fichier HFSQL afin de spécifier une donnée de lieu.
    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
    Info("Veuillez fermer l'application GOOGLE EARTH si celle ci est ouverte.")
     
    GE est un xmlDocument //<description="MesPoissons.xsd">
    GE = XMLOuvre(fRepExe() + "\MesPoissons.xml",depuisFichier)
    XMLDocument("GE")
     
    sGELong est une chaîne
    		sGELat est une chaîne
    		sGEMoment est une chaîne
    		sGEPoisson est une chaîne
    		sGELabel est une chaîne
     
    SI HNbEnr(MesLieux)<>0 ALORS
    //	
    	HLitPremier(MesLieux,DateHeure)
    	TANTQUE HEnDehors()=Faux	
    		HLitPremier(MesPrises,DateHeure)
    		TANTQUE HEnDehors()=Faux
    			SI Val(MesLieux.DateHeure) = Val(MesPrises.DateHeure) ALORS
    				sGEPoisson=MesPrises.Poisson
    			FIN
    			HLitSuivant(MesPrises)
    		FIN
     
    		sGELong=MesLieux.Longitude
    		sGELat=MesLieux.Latitude
    		sGEMoment=MesLieux.DateHeure						
    		sGELabel=sGEPoisson + "_" + sGEMoment
     
    		XMLEcrit("GE","/klm/Placemark/name",sGELabel)
     
    		sGECoordonnées est une chaîne
    		sGECoordonnées=sGELong + "," + sGELat + "," + 8000
     
    		XMLEcrit("GE","/klm/Placemark/Point/coordinates",sGECoordonnées)
    		XMLEcrit("GE","/klm/Placemark/Point/Icon/href","http://maps.google.com/mapfiles/kml/pushpin/blue-pushpin.png")
    		fSauveTexte(fRepExe+"\MesPoissons.xml",XMLConstruitChaîne("GE",XMLDocumentDéfaut,XMLEncodageUTF8))
     
    		HLitSuivant(MesLieux)
     
    	FIN	 
    FIN	
     
    SI fSauveTexte(fRepExe+"\MesPoissons.xml",XMLConstruitChaîne("GE",XMLDocumentDéfaut,XMLEncodageUTF8))=Vrai ALORS
    		fCopieFichier(fRepExe+"\MesPoissons.xml",fRepExe+"\MesPoissons.kml")
     
    		Info("Exportation dans GOOGLE EARTH réussi!")
    FIN
     
    		OuiNon(Oui,"Voulez vous ouvrir GOOGLE EARTH?")
    		LanceAppliAssociée(fRepExe+"\MesPoissons.kml","open")
     
    		XMLTermine("GE")
    Je n'ai toujours que le dernier enregistrement écrit dans le XML.

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     <?xml version="1.0" encoding="UTF-8" ?> 
    - <klm>
    - <Placemark>
      <name>PERCHE_20/04/2016 12:04</name> 
    - <Point>
      <coordinates>3.89077509753406,43.6357034789398,8000</coordinates> 
    - <Icon>
      <href>http://maps.google.com/mapfiles/kml/pushpin/blue-pushpin.png</href> 
      </Icon>
      </Point>
      </Placemark>
      </klm>

    Qu'est ce que je loupe afin d'avoir tous mes enregistrements????
    Ensuite, je souhaiterai utiliser un pushpin perso (icone de poisson) à la place du pushpin bleu. Comment la déclarer?
    Et enfin, comment déclarer <kml xmlns="http://www.opengis.net/kml/2.2"> afin que le code xml soit reconnu?

    Tout ceci est une programmation pas trop documentée chez Windev . . . Dommage

    Encore merci à tous de vos retours . . .

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    je viens de découvrir quelque chose de très interressant, c'est qu'on peut construire un fichier xml d'après son fichier de description xsd.
    Voici un exemple pour créer un fichier KML.
    1 - Importer dans son projet les fichiers de description KML ogckml22.xsd et atom-author-link.xsd qui se trouvent ici

    2 - voici le code pour générer un fichier kml ( la source des points est un tableau de points) . Il y a un pushpin personnalisé dans un style (#MaPunaise) :
    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
    // J.P juin 2016
    // utilisation d'un fichier de description xml de type XSD
    // pour générer un fichier xml
    StructPoint est une structure
    	Lat est un réel
    	Lon est un réel
    	Nom est une chaîne
    FIN
    TabPoints est un tableau de 0 StructPoint
    // 3 points dans la bonne ville de Bergues
    TabPoints = [ [50.9695, 2.436, "15/05/2016 14:10"],
    [50.9705, 2.44, "15/05/2016 14:15"],
    [50.9715, 2.444, "15/05/2016 14:20"]]
     
    MonFicKML  est un WL.XMLDocument,Description="ogckml22"
    Xml_NS	est un xmlNamespace
    Xml_Noeud	est un xmlNoeud dynamique
    Xml_NS.URI = "http://www.opengis.net/kml/2.2"
    Xml_Noeud = MonFicKML.kml
    Ajoute(Xml_Noeud..NamespaceDéclaré, Xml_NS)
    Ajoute(Xml_Noeud,MonFicKML.Document)
    // on positionne le noeud courant
    Xml_Noeud = MonFicKML.kml.Document
    Ajoute(Xml_Noeud,MonFicKML.Style)
    Xml_Noeud.Style:id = "MaPunaise"
    Ajoute(Xml_Noeud.Style,MonFicKML.Style.IconStyle)
    Xml_Noeud = Xml_Noeud.Style.IconStyle
    Xml_Noeud.Scale = 2
    Xml_Noeud.Icon.href = "file:///f:/temp/maPunaisePerso.png"
     
    // on se repositionne au niveau du document
    Xml_Noeud = MonFicKML.kml.Document
    // on boucle sur les points à insérer
    x est un entier = 1
    POUR TOUT pt DE TabPoints
    //	Ajoute(Xml_Noeud,MonFicKML.placemark)
    	Xml_Noeud.Placemark[x].name = pt.Nom
    	Xml_Noeud.Placemark[x].styleUrl = "#MaPunaise"
    	Xml_Noeud.Placemark[x].Point.coordinates = pt.Lon + "," + pt.Lat
        x++
    FIN
    XMLSauve(MonFicKML, "f:\temp\monFic.kml")
    voici le fichier généré (après indentation voir sujet dans les discussions récentes) :
    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <kml xmlns="http://www.opengis.net/kml/2.2">
      <Document>
        <Style id="MaPunaise">
          <IconStyle>
            <Scale>2</Scale>
            <Icon>
              <href>file:///f:/temp/maPunaisePerso.png</href>
            </Icon>
          </IconStyle>
        </Style>
        <Placemark>
          <name>15/05/2016 14:10</name>
          <styleUrl>#MaPunaise</styleUrl>
          <Point>
            <coordinates>2.436,50.9695</coordinates>
          </Point>
        </Placemark>
        <Placemark>
          <name>15/05/2016 14:15</name>
          <styleUrl>#MaPunaise</styleUrl>
          <Point>
            <coordinates>2.44,50.9705</coordinates>
          </Point>
        </Placemark>
        <Placemark>
          <name>15/05/2016 14:20</name>
          <styleUrl>#MaPunaise</styleUrl>
          <Point>
            <coordinates>2.444,50.9715</coordinates>
          </Point>
        </Placemark>
      </Document>
    </kml>

    et voici le résultat dans googleEarth (ma punaise personnalisée est mauve) :
    Nom : GoogleEarthKML.jpg
Affichages : 1196
Taille : 110,8 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 91
    Points
    91
    Par défaut
    Bonjour J.P.
    Merci pour ton retour!
    J'avais déjà travaillé avec un XSD . . . mais certainement de la mauvaise façon!
    Je vais potasser ton post et le mettre en forme pour mon cas.

    Mille merci!!!

  8. #8
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Citation Envoyé par xael34 Voir le message
    Je n'ai toujours que le dernier enregistrement écrit dans le XML.
    (...)
    Qu'est ce que je loupe afin d'avoir tous mes enregistrements????
    Vous loupez tout simplement la prise en compte de la correction proposée ....
    Je n'ai donc pas relu votre code plus avant et vous renvie à mon post précédent.

    En pratique, tant pour GE que GETmp, vous mélangez les deux univers :
    Vous déclarez un xmlDocument que vous ouvrez correctement et ensuite vous créez un second document XML (mais plus une variable de type XML) en recourant à la fonction XMLDocumment().
    La fonction XMLDocument() attend deux paramètres principaux : le nom du document XML (qui est une chaîne et non une variable de type xmlDocument) et, optionnellement, le nom la chaîne XML qui contient le code XML à traiter.
    Si le second paramètre est omis (ce qui est votre cas), la fonction crée un nouveau document XML vide (lignes 4 et 8).
    Vous vous retrouvez donc avec 2 documents 'XML' de types différents :
    - le premier, de type xmlDocument, contient les données que vous avez récupérées, mais après l'avoir ouvert, vous ne le travaillez plus.
    - le second, de type 'chaîne XML', est vide et vous lui ajoutez des informations.
    Je suppose que Windev ne lève pas d'erreur devant cette homonymie parce que les deux variables sont de types différents.

    Pour finir, si j'ai bien suivi, vous écrasez le GE original avec le GE qui ne contient que les nouvelles informations, puisque c'est un nouveau document vide qui a été créé par les lignes 4 et 8.

    Si vous mettez en commentaire les lignes 2,3 et 6,7, puis complétez l'appel à XMLDocument() avec le second paramètre requis, vous devriez vous y retrouver.
    Mais le mieux serait de revoir votre traitement en basant tout sur les variables de type xmlDocument.
    Solution préconisée par PCsoft, elle sera a priori mieux supportée à l'avenir et surtout, elle est in fine beaucoup plus simple à l'usage.
    Par ailleurs, si vous ne travaillez pas avec une variable de type xmlDocument mais avec la chaîne texte comme vous le faites, le fichier XSD ne peut pas être exploité.
    La dernière solution proposée par jurassic pork est d'ailleurs développée dans ce contexte.

    Bon travail

    Hemgé

  9. #9
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 91
    Points
    91
    Par défaut
    Bonsoir HEMGE,
    Dans un premier temps, je reconnais avoir lu votre post de façon transversale . . .
    Autant pour moi!
    Donc, je commence à comprendre mes erreurs!
    L'utilisation de XMLDocument() qui est une fonction et l'utilisation de la déclaration de variable xml par xlmDocument. La nuance est très subtile! D'autant plus que lorsque vous faites F1 sur la fonction,
    c'est la page de la déclaration de la variable qui apparaît!
    Vous me conseillez donc de travailler avec juste la déclaration de la variable . . . Ceci dit, avec ce type xml, le nombre de fonction est limitée.
    Dans mon code, j'utilise la fonction XMLEcrit .Fonction qui maintenant m'améne une erreur de non déclaration du document GE puisque déclaré en variable!
    Cela se complique . . .
    Je vais donc continuer à chercher pour adapter mon code en utilisant juste la variable xml.
    Finalement, je n'utilise plus qu'un seul document GE. Le GETmp ne me sert plus.
    Je vous remercie de tous vos conseils et n’oublierais pas de vous tenir informé de mes avancées.
    Cordialement

  10. #10
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Citation Envoyé par xael34 Voir le message
    Dans un premier temps, je reconnais avoir lu votre post de façon transversale . . .
    Je me demande si vous n'avez pas persisté dans un second temps ...
    Concernant votre approche de XML sous WINDEV et vos problèmes :
    Windev a proposé historiquement deux approches des fichiers XML :
    - la chaîne d'instructions XML traitée comme un code, traitement initié par la fonction XMLDocument() et manipulée par une batterie de fonctions
    - la variable de type xmlDocument qui est maintenant la solution préconisée, ne connaît que 5-6 instructions spécifiques et est traitée par le biais de structures et de tableaux, avec leurs instructions classiques.
    Le choix du même nom pour deux concepts différents ET incompatibles est à déplorer et source de confusion.

    Voyez aussi mon post précédent à ce sujet.
    Dans ce post précédent, que vous avez survolé (ou négligé ?), je signalais
    • que lorsque vous travaillez avec des variables de type xmlDocument, "L'appel aux fonctions destinées à gérer le document texte (en fait, du code XML) lève une erreur.". Vous venez de le vérifier par vous-même.
    • que "Vous travaillez alors exclusivement avec les propriétés (et les sous-propriétés) de cette variable"



    Visiblement, vous n'avez pas non plus lu consciencieusement la doc sur les variables de type xmlDocument et, consécutivement à cette lecture, la doc sur xmlNoeud ou xmlAttribut.
    Vous y auriez lu, dans les notes (dont le contenu est généralement important), qu'il existe des propriétés spécifiques (comme je l'ai évoqué) dont ..NoeudRacine qui est un tableau de xmlNoeuds, dont on signale dans les notes de la doc qui leur est consacrée, qu'ils ont aussi des propriétés spécifiques (tiens !) dont ..NoeudFils qui est un tableau de xmlNoeuds.
    Les voilà ces fameux tableaux que vous pouvez manipuler sans vous farcir une cohorte de nouvelles fonctions spécifiques.
    Voyez le dernier code de jurassic pork et les exemples de la doc.

    Vous savez, prendre le temps de vous former, puis d'entretenir vos connaissances et de les recycler ("la formation continue"), c'est loin d'être une perte de temps.
    Vous pensiez gagner du temps en survolant les réponses qu'on vous fait, après vous être limité à "l'essentiel" dans la doc ? C'était le meilleur moyen d'en perdre 10 X (Windev oblige) plus.

    J'espère que vous en tirerez les conséquences qui s'imposent.

    Hemgé

  11. #11
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 91
    Points
    91
    Par défaut
    Bonjour cher HEMGE,
    Loin de moi l'idée de survoler vos posts. Comme je vous le disais, j'avoue avoir négligé le premier . . . J'ai eu tort et le reconnais!
    Par contre, j'ai lu avec attention les posts qui ont fait suite.
    Si je demande conseil sur ce site, ce n'est pas pour ne pas en tenir compte par la suite. Je reconnais votre grande expérience dans ce domaine et ne demande qu'à apprendre!
    Le sujet du XML est tout nouveau pour moi. Je développe depuis 2013 avec WINDEV et WINDEV MOBILE (17 et 20).
    Suite à une application dans mon milieu professionnel (santé), j'ai pris goût à WINDEV et depuis cela fait partie de mes hobbys!
    L'application que je suis en train de faire est un complément sous windows d'une application ANDROID faite avec WINDEV, dédiée à la pêche . . .
    Soyez sur, HEMGE, que je prend en compte toute vos remarques et que bientôt je vous soumettrai un nouveau code qui saura respecter toute vos remarques.
    Cordialement . . .

  12. #12
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 91
    Points
    91
    Par défaut
    Bonjour J.P,
    Dans un premier temps, j'essaye de comprendre la philosophie de la construction d'un schéma utilisé en fichier xsd.
    Mes neurones de 20 ans étant partis pour voir ailleurs - imagine alors à 59a!! - , j'ai des soucis de compréhension!
    Donc, plusieurs schémas sont possibles . . . XMLSchema (qui me parait le plus "basique"), le schéma ogcklm, le schéma Atom, etc . . .
    Pour construire ton XML, tu utilises en fichier xsd, la bibliothéque opengis.net/kml/2.2/ogcklm22. C'est celle qui gère donc au mieux les infos de données pour GoogleEarth. Soit!
    Donc, le schéma ATOM n'est pas a utiliser . . .
    Lorsque j'essaye d'importer ce xsd ogcklm, ou Windev se plante ou il me mentionne une "mémoire insuffisante". As tu une idée pour ce problème? J'ai placé les 2 fichiers xsd dans le répertoire de mon EXE.
    Peut on épurer ogcklm22 pour prendre que les déclarations des données qui nous intéressent?
    Comme je le disais à HEMGE, le domaine XML est tout nouveau pour moi . . .
    Donc si mes questions te paraissent "évidentes" . . .
    Merci pour le travail que tu as déjà fourni!!
    Cordialement

  13. #13
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    finalement on peut se passer de la description qui permet d'avoir une aide à la saisie si un fichier XML exemple (xsd) a été importé
    Les fichiers de descriptions servent donc plutôt en vérification de fichier xml ou en lecture de fichier xml (aide à la saisie).
    Voici une version de mon exemple précédent sans utilisation de l'import de fichier xsd et donc pas de description pour le xmldocument :
    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
    // J.P juin 2016
    // génération d'un fichier kml
    StructPoint est une structure
    	Lat est un réel
    	Lon est un réel
    	Nom est une chaîne
    FIN
    TabPoints est un tableau de 0 StructPoint
    // 3 points dans la bonne ville de Bergues
    TabPoints = [ [50.9695, 2.436, "15/05/2016 14:10"],
    [50.9705, 2.44, "15/05/2016 14:15"],
    [50.9715, 2.444, "15/05/2016 14:20"]]
     
    MonFicKML  est un WL.XMLDocument
    Xml_NS	est un xmlNamespace
    Xml_Noeud	est un xmlNoeud dynamique
    Xml_NS.URI = "http://www.opengis.net/kml/2.2"
    Xml_Noeud = MonFicKML.kml
    Ajoute(Xml_Noeud..NamespaceDéclaré, Xml_NS)
    Ajoute(Xml_Noeud,Xml_Noeud.Document)
    // on positionne le noeud courant
    Xml_Noeud = Xml_Noeud.Document
    Ajoute(Xml_Noeud,Xml_Noeud.Style)
    Xml_Noeud = Xml_Noeud.Style
    Xml_Noeud:id = "MaPunaise"
    Ajoute(Xml_Noeud,Xml_Noeud.IconStyle)
    Xml_Noeud = Xml_Noeud.IconStyle
    Xml_Noeud.Scale = 2
    Xml_Noeud.Icon.href = "file:///f:/temp/maPunaisePerso.png"
    // on se repositionne au niveau du document
    Xml_Noeud = MonFicKML.kml.Document
    //// on boucle sur les points à insérer
    x est un entier = 1
    POUR TOUT pt DE TabPoints
    	Ajoute(Xml_Noeud,Xml_Noeud.Placemark)
    	Xml_Noeud.Placemark[x].name = pt.Nom
    	Xml_Noeud.Placemark[x].styleUrl = "#MaPunaise"
    	Xml_Noeud.Placemark[x].Point.coordinates = pt.Lon + "," + pt.Lat
    	x++
    FIN
    XMLSauve(MonFicKML, "f:\temp\monTrajet.kml")
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  14. #14
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Citation Envoyé par xael34 Voir le message
    Lorsque j'essaye d'importer ce xsd ogcklm, ou Windev se plante ou il me mentionne une "mémoire insuffisante". As tu une idée pour ce problème? J'ai placé les 2 fichiers xsd dans le répertoire de mon EXE.
    Bonsoir,

    A priori, vous ne travaillez pas avec 2 fichiers xsd, mais avec 1 xml et 1 xsd.
    Voulez-vous nous montrer votre code et nous indiquer la taille de vos fichiers ?

    • Soit vous avez un très gros fichier xml et la mémoire pourrait se révéler insuffisante, auquel cas Windev ne présente - à ma connaissance - pas de solution avec le type XmlDocument.
      Il faut alors recourir à des parseurs externes, coder son propre parseur en travaillant avec la conversion texte ou ... se tourner vers dotnet et XmlReader.
      La taille du xsd ne pose généralement pas de problème.
    • Soit vous avez encore une confusion entre un type de variable XmlDocument et un type texte converti par la fonction XMLDocument().
      C'était toujours le cas dans votre code publié le 20/6/2016 à 14H44

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    GE est un xmlDocument //<description="MesPoissons.xsd">
    Comme indiqué, cette situation génère des erreurs diverses et variables (dont le libellé n'est pas en rapport avec la cause réelle).
    
    GE = XMLOuvre(fRepExe() + "\MesPoissons.xml",depuisFichier)
    XMLDocument("GE") // ne devrait plus être appelée si vous travaillez avec un xmlDocument
    Par ailleurs, vous remarquerez que jurassik porc a préfixé son type de document dans sa déclaration de MonFicKML.
    C'est en raison d'un conflit avec une déclaration dans un des assemblages dotnet qu'il a importé. Sans doute System.Xml dans le cas présent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonFicKML  est un WL.XMLDocument
    Vous pourriez être amené à faire de même pour éviter les conflits si vous ne restez pas confiné à Windev stricto sensu et utilisez des assemblages dotnet.

  15. #15
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 91
    Points
    91
    Par défaut
    Bonjour HEMGE, J.P,
    Etant persévérant de nature, j'ai repris tout à 0!
    Donc en premier, je préfère utiliser un fichier XML comme schéma:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8"?>
    <kml xmlns="http://www.opengis.net/kml/2.2">
      <Placemark>
        <name></name>
          <Point>
            <coordinates></coordinates>
              <Icon>
              <href>"file:///fRepExe() + "\Poisson.png"</href>
              </Icon>
          </Point>
      </Placemark>
    </kml>
    Il n'y a pas plus simple et suffisant pour ce que je veux faire. Ne connaissant pas .NET je reste dans le domaine WINDEV.

    Voici mon nouveau code (beaucoup de commentaire // qui représente diverses solutions que j'ai essayé mais sans succès! J'ai beau lire et relire l'aide, beaucoup de choses m'échappent!! )
    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
    Info("Veuillez fermer l'application GOOGLE EARTH si celle ci est ouverte.")
     
    xmlGE est un xmlDocument, description="MesPoissonsXML.xml"
    xmlGE = XMLOuvre(fRepExe() + "\MesPoissonsXML.xml",depuisFichier)
     
    rGELong est un réel
    rGELat est un réel
    sGEMoment est une chaîne
    sGEPoisson est une chaîne
    sGELabel est une chaîne
     
    TabPoisson est un tableau de 2 chaînes
     
    SI HNbEnr(MesLieux)<>0 ALORS
    //	
    	HLitPremier(MesLieux,DateHeure)
    	TANTQUE HEnDehors()=Faux	
    		HLitPremier(MesPrises,DateHeure)
    		TANTQUE HEnDehors()=Faux
    			SI Val(MesLieux.DateHeure) = Val(MesPrises.DateHeure) ALORS
    				sGEPoisson=MesPrises.Poisson
    			FIN
    			HLitSuivant(MesPrises)
    		FIN
     
    		rGELong=MesLieux.Longitude
    		rGELat=MesLieux.Latitude
    		sGEMoment=MesLieux.DateHeure						
    		sGELabel=sGEPoisson + "_" + sGEMoment
     
    		sGECoordonnées est une chaîne
    		sGECoordonnées=rGELong + "," + rGELat + "," + "8000"
     
    		TabPoisson[1]=sGELabel
    		TabPoisson[2]=sGECoordonnées
     
    		AjouteLigne(TabPoisson,TabPoisson[1],TabPoisson[2])
     
    		HLitSuivant(MesLieux)
     
    		FIN	 
     
    FIN	
     
    //ajoute(xmlGE,xmlGE.kml)
    //ajoute(xmlGE,xmlGE.kml.Placemark)
    //Ajoute(xmlGE,xmlGE.kml.Placemark.name)
    //Ajoute(xmlGE,xmlGE.kml.Placemark.Point)
    //Ajoute(xmlGE,xmlGE.kml.Placemark.Point.Icon)
    //ajoute(xmlGE,xmlGE.kml.Placemark.Point.coordinates)
     
    //Essai A venant du code de J.P
    //Xml_NS	est un xmlNamespace
    //Xml_Noeud	est un xmlNoeud dynamique
    //Xml_NS.URI = "http://www.opengis.net/kml/2.2"
    //Xml_Noeud =xmlGE.kml
    //Ajoute(Xml_Noeud..NamespaceDéclaré, Xml_NS)
    //Ajoute(Xml_Noeud,Xml_Noeud.Document)
    //// on positionne le noeud courant
    //Xml_Noeud = Xml_Noeud.Placemark
    //Ajoute(Xml_Noeud,Xml_Noeud.Style)
    //Xml_Noeud = Xml_Noeud.Style
    //Xml_Noeud:id = "Poisson"
    //Ajoute(Xml_Noeud,Xml_Noeud.IconStyle)
    //Xml_Noeud = Xml_Noeud.IconStyle
    //Xml_Noeud.Scale = 2
    ////Chemin icone
    //Xml_Noeud.Icon.href = "file:///"+fRepExe() + "\Poisson.png"
    //// on se repositionne au niveau du document
    //Xml_Noeud = xmlGE.kml.Placemark
    ////// on boucle sur les points à insérer
     
    x est un entier = 1
    POUR TOUT pt DE TabPoisson
    	Ajoute(xmlGE,xmlGE.kml)
    	xmlGE.kml.Placemark[x].name = TabPoisson[1]
    	xmlGE.kml.Placemark[x].styleUrl = "Poisson"
    	xmlGE.kml.Placemark[x].Point.coordinates =TabPoisson[2]
    	x++
    FIN
    //		POUR TOUT pt de TabPoisson
    //			xmlName est un xmlNoeud
    //			xmlPoint est un xmlNoeud
    //			xmlGE.klm.Placemark.name=TabPoisson[1]
    //			xmlGE.klm.Placemark.Point.coordinates=TabPoisson[2]
    //			
    //			
    //			
    //		FIN
     
    		XMLSauve(xmlGE,fRepExe() + "\MesPoissons.xml")
     
    		fCopieFichier(fRepExe+"\MesPoissons.xml",fRepExe+"\MesPoissons.kml")
     
    		Info("Exportation dans GOOGLE EARTH réussi!")
     
    		OuiNon(Oui,"Voulez vous ouvrir GOOGLE EARTH?")
    		LanceAppliAssociée(fRepExe+"\MesPoissons.kml","open")
    Suite à votre conseil, HEMGE, j'utilise uniquement que la variable xml.
    Mais c'est la notion de noeud racine que je ne saisis pas . . . Pour moi le noeud racine est la balise <kml> . . .?
    Hors XMLSauve(xmlGE,fRepExe() + "\MesPoissons.xml") me lève une erreur indiquant qu'il y a plusieurs noeuds racine!
    En un mot, je suis un peu perdu . . . Je dois vous paraître obtus.
    Si vous aviez la possibilité de m'indiquer un doc , un lien sur ce sujet, je suis preneur!
    Merci de votre patience . . .

  16. #16
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 91
    Points
    91
    Par défaut
    Bonjour à tous,
    me revoici avec un code que j'ai repris complètement!
    J'ai dans un premier temps modifié mon tri pour mes 2 BdD.
    Ensuite, j'utilise un tableau de structure adapté afin de remplir mon fichier kml:
    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
    Info("Veuillez fermer l'application GOOGLE EARTH si celle ci est ouverte.")
     
    Sablier(Vrai)
    rGELong est un réel
    rGELat est un réel
    sGEMoment est une chaîne
    sGEPoisson est une chaîne
    sGELabel est une chaîne
     
    stPoissonPeche est une Structure
    EspeceDateHeure est une chaîne
    Longitude est un réel
    Latitude est un réel
    FIN
     
    nTabPoissonNbrLigne est un entier
    nTabPoissonIndLigne est un entier
    tabTabPoisson est un tableau de nTabPoissonNbrLigne stPoissonPeche
     
     
    SI HNbEnr(MesLieux)<>0 ALORS	
    	HLitPremier(MesLieux)
    	TANTQUE HEnDehors()=Faux
     
    			HLitPremier(MesPrises)
    			TANTQUE HEnDehors()=Faux
    					MaPrise est une chaîne
    					MaPrise=ChaîneSupprime(MesPrises.DateHeure,11,2)
     
    				SI ChaîneCompare(MesLieux.DateHeure,MaPrise) = 0 ALORS
     
    					sGEMoment=MesLieux.DateHeure	
    					rGELong=MesLieux.Longitude
    					rGELat=MesLieux.Latitude
    					sGEPoisson=MesPrises.Poisson
    					sGELabel=sGEPoisson + "_" + sGEMoment
     
    					nTabPoissonNbrLigne=TableauAjoute(tabTabPoisson)
    					nTabPoissonIndLigne=nTabPoissonNbrLigne					
    					tabTabPoisson[nTabPoissonIndLigne]:EspeceDateHeure=sGELabel
    					tabTabPoisson[nTabPoissonIndLigne]:Longitude=rGELong
    					tabTabPoisson[nTabPoissonIndLigne]:Latitude=rGELat
     
    				FIN		
    			HLitSuivant(MesPrises)
    			FIN
     
    		HLitSuivant(MesLieux)
    	FIN
     
    SINON
    	Info("Pas de lieu enregistré!")
    FIN	
    SI nTabPoissonNbrLigne ALORS
    	nTabPoissonIndLigne=1
    	Info(tabTabPoisson[nTabPoissonIndLigne].EspeceDateHeure,tabTabPoisson[nTabPoissonIndLigne].Longitude , tabTabPoisson[nTabPoissonIndLigne].Latitude)
    FIN
     
    kmlGE est WL.XMLDocument
    Xml_NS	est un xmlNamespace
    Xml_Noeud	est un xmlNoeud dynamique
    Xml_Noeud =kmlGE.kml
    Xml_NS.URI = "http://www.opengis.net/kml/2.2"
    Ajoute(Xml_Noeud..NamespaceDéclaré, Xml_NS)
     
    x est un entier = nTabPoissonIndLigne
    POUR TOUT pt  DE tabTabPoisson
    	Ajoute(Xml_Noeud,kmlGE.kml.Placemark)
    	Xml_Noeud.Placemark[x].name = pt.EspeceDateHeure
    	Xml_Noeud.Placemark[x].Point.Icon.href =  "file:///" + fRepExe() + "\Poisson.png"
    	Xml_Noeud.Placemark[x].Point.coordinates =tabTabPoisson[nTabPoissonIndLigne].Longitude + "," + tabTabPoisson[nTabPoissonIndLigne].Latitude
    	x++
    FIN
     
    		XMLSauve(kmlGE,fRepExe() + "\MesPoissons.xml")
     
    		fCopieFichier(fRepExe+"\MesPoissons.xml",fRepExe+"\MesPoissons.kml")
     
    		Sablier(Faux)
     
    		Info("Exportation dans GOOGLE EARTH réussi!")
     
    		OuiNon(Oui,"Voulez vous ouvrir GOOGLE EARTH?")
    		LanceAppliAssociée(fRepExe+"\MesPoissons.kml","open")
    Je crée un fichier xml plus lisible dans mon éditeur (PSPAD), mais à terme il ne restera que le kml.

    Voici donc mon fichier xml:
    Code xml : 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
    <?xml version="1.0" encoding="UTF-8" ?> 
    - <kml xmlns="http://www.opengis.net/kml/2.2">
    - <Placemark>
      <name>SANDRE_13/04/2016 17:40</name> 
    - <Point>
    - <Icon>
      <href>file:///L:\WinDev\MesApplisWD20\Connect_My Fished Fishes\Exe\Poisson.png</href> 
      </Icon>
      <coordinates>3.85397686623,43.59176047146</coordinates> 
      </Point>
      </Placemark>
    - <Placemark>
      <name>CARPE COMMUNE_14/04/2016 18:12</name> 
    - <Point>
    - <Icon>
      <href>file:///L:\WinDev\MesApplisWD20\Connect_My Fished Fishes\Exe\Poisson.png</href> 
      </Icon>
      <coordinates>3.85397686623,43.59176047146</coordinates> 
      </Point>
      </Placemark>
    - <Placemark>
      <name>SILURE GLANE_18/04/2016 15:24</name> 
    - <Point>
    - <Icon>
      <href>file:///L:\WinDev\MesApplisWD20\Connect_My Fished Fishes\Exe\Poisson.png</href> 
      </Icon>
      <coordinates>3.85397686623,43.59176047146</coordinates> 
      </Point>
      </Placemark>
    - <Placemark>
      <name>BROCHET_20/04/2016 11:40</name> 
    - <Point>
    - <Icon>
      <href>file:///L:\WinDev\MesApplisWD20\Connect_My Fished Fishes\Exe\Poisson.png</href> 
      </Icon>
      <coordinates>3.85397686623,43.59176047146</coordinates> 
      </Point>
      </Placemark>
    - <Placemark>
      <name>PERCHE_20/04/2016 11:47</name> 
    - <Point>
    - <Icon>
      <href>file:///L:\WinDev\MesApplisWD20\Connect_My Fished Fishes\Exe\Poisson.png</href> 
      </Icon>
      <coordinates>3.85397686623,43.59176047146</coordinates> 
      </Point>
      </Placemark>
    - <Placemark>
      <name>PERCHE_20/04/2016 12:04</name> 
    - <Point>
    - <Icon>
      <href>file:///L:\WinDev\MesApplisWD20\Connect_My Fished Fishes\Exe\Poisson.png</href> 
      </Icon>
      <coordinates>3.85397686623,43.59176047146</coordinates> 
      </Point>
      </Placemark>
      </kml>

    Je suis assez proche du résultat recherché . . . mais lorsque j'ouvre le kml avec GOOGLE EARTH, j'ai une erreur indiquant qu'une seule racine doit être allouée.
    J'ai donc encore mon approche du xml en défaut ! ! !
    J'avoue qu'une explication serait la bienvenue ! Merci pour votre retour!

  17. #17
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 327
    Points : 3 840
    Points
    3 840
    Par défaut
    Bonjour,

    D'après ce que j'ai pu voir sur Google, il manquerait une balise <document>.

    Citation Envoyé par xael34 Voir le message
    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
    <?xml version="1.0" encoding="UTF-8" ?> 
    - <kml xmlns="http://www.opengis.net/kml/2.2">
    - <document>
    - <Placemark>
      <name>SANDRE_13/04/2016 17:40</name> 
    - <Point>
    - <Icon>
      <href>file:///L:\WinDev\MesApplisWD20\Connect_My Fished Fishes\Exe\Poisson.png</href> 
      </Icon>
      <coordinates>3.85397686623,43.59176047146</coordinates> 
      </Point>
      </Placemark>
    - <Placemark>
      <name>CARPE COMMUNE_14/04/2016 18:12</name> 
    - <Point>
    - <Icon>
      <href>file:///L:\WinDev\MesApplisWD20\Connect_My Fished Fishes\Exe\Poisson.png</href> 
      </Icon>
      <coordinates>3.85397686623,43.59176047146</coordinates> 
      </Point>
      </Placemark>
    - <Placemark>
      <name>SILURE GLANE_18/04/2016 15:24</name> 
    - <Point>
    - <Icon>
      <href>file:///L:\WinDev\MesApplisWD20\Connect_My Fished Fishes\Exe\Poisson.png</href> 
      </Icon>
      <coordinates>3.85397686623,43.59176047146</coordinates> 
      </Point>
      </Placemark>
    - <Placemark>
      <name>BROCHET_20/04/2016 11:40</name> 
    - <Point>
    - <Icon>
      <href>file:///L:\WinDev\MesApplisWD20\Connect_My Fished Fishes\Exe\Poisson.png</href> 
      </Icon>
      <coordinates>3.85397686623,43.59176047146</coordinates> 
      </Point>
      </Placemark>
    - <Placemark>
      <name>PERCHE_20/04/2016 11:47</name> 
    - <Point>
    - <Icon>
      <href>file:///L:\WinDev\MesApplisWD20\Connect_My Fished Fishes\Exe\Poisson.png</href> 
      </Icon>
      <coordinates>3.85397686623,43.59176047146</coordinates> 
      </Point>
      </Placemark>
    - <Placemark>
      <name>PERCHE_20/04/2016 12:04</name> 
    - <Point>
    - <Icon>
      <href>file:///L:\WinDev\MesApplisWD20\Connect_My Fished Fishes\Exe\Poisson.png</href> 
      </Icon>
      <coordinates>3.85397686623,43.59176047146</coordinates> 
      </Point>
      </Placemark>
    - </document>
      </kml>

  18. #18
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    Lo au carré a avancé :
    Bonjour,

    D'après ce que j'ai pu voir sur Google, il manquerait une balise <document>.
    En effet regarde le fichier xml généré dans le post #6 de cette discussion

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  19. #19
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 110
    Points : 91
    Points
    91
    Par défaut
    Merci LO² et J.P
    Content de vous dire qu'enfin, j'ai un affichage de toutes mes prises de poisson sur GOOGLE EARTH!!!!!!!

    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
    kmlGE est WL.XMLDocument
    Xml_NS	est un xmlNamespace
    Xml_Noeud	est un xmlNoeud dynamique
    Xml_Noeud =kmlGE.kml
    Xml_NS.URI = "http://www.opengis.net/kml/2.2"
    Ajoute(Xml_Noeud..NamespaceDéclaré, Xml_NS)
    Ajoute(Xml_Noeud,kmlGE.Document)
    Xml_Noeud = kmlGE.kml.Document
     
    x est un entier = 1 
    POUR TOUT pt  DE tabTabPoisson
    	Ajoute(Xml_Noeud,kmlGE.kml.Placemark)
    	Xml_Noeud.Placemark[x].name = pt.EspeceDateHeure
    	Xml_Noeud.Placemark[x].Point.Icon.href =  "file:///" + fRepExe() + "\Poisson.png"
    	Xml_Noeud.Placemark[x].Point.coordinates =pt.Longitude + "," + pt.Latitude
     
    	x++
    FIN
    Mais je n'ai pas l'affichage de mon pushpin en forme de poisson mais la punaise jaune de GOOGLE!
    Donc mes questions sont:
    -peut on personnaliser le pushpin sur G.E?
    -est ce un problème de déclaration dans mon code?
    Je suis quand même ravi d'avoir enfin cette fonction dans mon logiciel!!!!!!!!
    Je tiens encore à vous remercier . . . HEMGE, J.P et LO²!

  20. #20
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    pour la punaise personnalisée étudie mon exemple du post #6 ou du post #13 de la discussion.
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. fichier kml à partir d'Excel pour Google Earth
    Par lucy22 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 15/02/2013, 15h25
  2. exécuter un fichier .bat avec windev
    Par GodGives dans le forum WinDev
    Réponses: 2
    Dernier message: 25/04/2008, 15h41
  3. Construction d'un fichier kml
    Par maxime8687 dans le forum MATLAB
    Réponses: 6
    Dernier message: 22/02/2008, 15h27
  4. Lire Fichier FIC sans Windev
    Par jcharles dans le forum HyperFileSQL
    Réponses: 3
    Dernier message: 14/11/2007, 18h16
  5. Réponses: 2
    Dernier message: 26/04/2007, 18h17

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