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

IGN API Géoportail Discussion :

Erreur sur chargement KML


Sujet :

IGN API Géoportail

  1. #1
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Points : 194
    Points
    194
    Par défaut Erreur sur chargement KML
    Bonjour,
    J'ai une erreur non systématique au chargement de fichiers KML que je génère. Les KML sont corrects (d'ailleurs, parfois il arrive à les charger, parfois non...et la réussite dépend des postes sur lesquels on effectue le test).

    Cela arrive avec des fichiers quand même assez gros (2Mo, environ 1400 éléments). J'ai à l'écran (quand cela arrive) une boite de dialogue m'indiquant "Erreur d'analyse XML : aucun élément trouvé...". Pourtant le fichier KML existe bien et est bien formé et bien renseigné (comme quand cela marche)...

    Je me demandais si le problème ne viendrait pas d'une certaine latence dans la récupération du fichier KML sur le serveur...Est-ce le parser XML pour le KML qui renvoie ce message ? Est-ce l'API geoportail qui conclut que le fichier est non renseigné car non encore disponible pour charger la couche ?

    Comment trouver d'où vient le problème et comment le contourner ?

    (A priori, je n'ai pas le pb avec Chrome...pas avec IE8 non plus mais lui est aux pâquerettes car 50 fois moins rapides sur ces fichiers...les 12 secondes avec FF3.5 ou Chrome se transforment en plus de 10 minutes avec IE8 ...c'est sûr que le KML a le temps d'arriver à son rythme )

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 124
    Points : 1 764
    Points
    1 764
    Par défaut Moi aussi
    J'ai aussi ce problème sur des gros fichiers.
    J'ai l'impression que le temps de récupération du fichier joue.
    Le parser xml commence son travail sur un fichier incomplet et échoue à la fin.
    Sur free.fr dont les performances sont moins bonnes que celles de mon pc ce problème survient assez fréquemment. Il se produit sur d'autres types de fichiers (gpx, ...)

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Rappelez-vous une discussion sur les WFS ...
    Les XML sont récupérés plus ou moins rapidement par les butineurs (j'ai pas trouvé comment mettre un timeout sur une requête AJAX au passage) dans une chaîne de caractères dont la taille maximale dépend de ces mêmes navigateurs

    Je pense donc que les deux effets sont conjugués :

    1. lenteur de la réponse => timeout => fichier pas chargé entièrement (particulièrement visible sur des gros fichiers);
    2. (le deuxième effet kisscool) la taille maximale de la chaîne de caractères supportée ...

    As-tu essayé avec un kmz ? L'idée est d'envoyer un fichier compressé via un proxy qui décompresse. Le transfert est beaucoup plus court et si le proxy est sur ton site, la décompression est rapide et le transfert en local tout autant ... Bien sûr, il faut indiquer au serveur web les types à supporter. Ainsi pour apache :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        AddType application/vnd.google-earth.kml+xml .kml
        AddType application/vnd.google-earth.kmz .kmz

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 124
    Points : 1 764
    Points
    1 764
    Par défaut Proxy
    J'utilise Polipo (http://www.pps.jussieu.fr/~jch/software/polipo/) comme proxy sous Windows. Le cache disque peut poser des problèmes dans les phases de debug, mais son activation est configurable.

  5. #5
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Points : 194
    Points
    194
    Par défaut
    Je suis un peu surpris...l'API IGN/Openlayers accepte les KMZ en tant que couche KML ? Est-ce une nouveauté liée à la bêta 5 (et/ou Openlayers 2.8) ?

    J'aurais une autre question à formuler concernant la structuration du KML afin d'éviter des répétitions inutiles de présentation, mais je dois réviser les spécifications de la norme KML avant de la poser...Je sais uniquement que cela n'était pas a priori possible avec la version bêta 4 (liée à OL 2.7)...mais d'ores et déjà, saurais-tu nous dire s'il y a eu des évolutions dans le parser KML avec OL 2.8 et/ou bêta 5 ? (ex : gestion du ExtendedData)
    D'ailleurs, ce dernier est-il uniquement fait par OL 2.8 ou gérez-vous des spécificités particulières dans l'API IGN Geoportail ?

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par Unusual Voir le message
    Je suis un peu surpris...l'API IGN/Openlayers accepte les KMZ en tant que couche KML ? Est-ce une nouveauté liée à la bêta 5 (et/ou Openlayers 2.8) ?
    Oh non !
    C'est pourquoiil faut passer par un service mandataire pour décompresser le KMZ en KML

    Citation Envoyé par Unusual Voir le message
    J'aurais une autre question à formuler concernant la structuration du KML afin d'éviter des répétitions inutiles de présentation, mais je dois réviser les spécifications de la norme KML avant de la poser...Je sais uniquement que cela n'était pas a priori possible avec la version bêta 4 (liée à OL 2.7)...mais d'ores et déjà, saurais-tu nous dire s'il y a eu des évolutions dans le parser KML avec OL 2.8 et/ou bêta 5 ? (ex : gestion du ExtendedData)
    D'ailleurs, ce dernier est-il uniquement fait par OL 2.8 ou gérez-vous des spécificités particulières dans l'API IGN Geoportail ?
    Oui, je l'avais indiqué dans un des post sur 1.0beta5 ...
    Globalement, OpenLayers 2.8 supporte (cf. release notes) :


    • Improved KML support with better styling (#1724), networklink support (#1796, #1877), ExtendedData Support (#1955)


    Dans l'API, j'ai ajouté un support amélioré d'ExtendedData :


    • OL .28 supporte ExtendedData/Data ;
    • API Géoportail supporte ExtendedData/SchemaData/SimpleData ;
    • API Géoportail supporte Handle CDATA in the Data and SimpleData


    Voir Spécifications ExtendedData.

    Puis, j'ai ajouté le Group features by folder, et fait en sorte que les CDATA soient possibles dans les attributs du KML (OL ne gère que certaines écritures).

  7. #7
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Points : 194
    Points
    194
    Par défaut
    Oh non !
    C'est pourquoi il faut passer par un service mandataire pour décompresser le KMZ en KML
    Cela ne m'aide pas vraiment...vu que je ne sais pas ce que c'est (ou ce que tu veux signifier)...et forcément comment le mettre en oeuvre.

    Puis, j'ai ajouté le Group features by folder, et fait en sorte que les CDATA soient possibles dans les attributs du KML (OL ne gère que certaines écritures).
    Cela a l'air intéressant...As-tu un exemple pour la mise en oeuvre de cette fonctionnalité ?

    Autre question :
    - Sur le OnSelect, j'affiche des mini-fiches d'informations qui ont par type d'éléments la même présentation (même type de présentation pour des équivalents de même folder)

    Je constitue donc du HTML en me servant des champs (attributes) issus de "feature" courant, mais le champ "description" pourrait être identique dans la mesure j'y substitue les valeurs de champs "locaux" propres au feature sélectionné. Serait-il possible de le stocker de manière globale (une fois pour toute pour un folder donné) et le reprendre dans l'événement OnSelect (i.e. atteindre une propriété du folder de l'élément qui contiendrait le "gabarit" de présentation de la mini-fiche).

    Il y aurait un très gros avantage de factorisation de données...Cela réduirait d'autant plus considérablement mes KML que le nombre d'éléments est élevé dedans. Est-ce possible ? ...Sinon y a-t-il une autre méthode utilisable dans ce contexte ?

    Je cherche avant tout à réduire la taille des KML et aussi le temps de chargement de ceux-ci.

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut proxy, folder, et compagnies
    Citation Envoyé par Unusual Voir le message
    Cela ne m'aide pas vraiment...vu que je ne sais pas ce que c'est (ou ce que tu veux signifier)...et forcément comment le mettre en oeuvre.
    Le serveur mandataire (ou proxy) va faire la requête pour l'application finale. Généralement, il réside sur le même serveur que l'application et est écrit en langage de programmation côté serveur : JSP, PHP, ASP, Perl, Python, etc ...
    Ici, son rôle est le suivant :

    1. recevoir un requête demandant du kmz ;
    2. faire la requête;
    3. décompresser le kmz en kml et changer le type de la réponse;
    4. renvoyer le tout au client.

    Tout cela est montré dans la page API sur les proxy.

    Citation Envoyé par Unusual Voir le message
    Cela a l'air intéressant...As-tu un exemple pour la mise en oeuvre de cette fonctionnalité ?
    Voir la définition des Folder. Li'dée est de parser le KML (un seul niveau de Folder) en ventillant les objets suivants leur dossier (Folder). On peut ainsi avec un fichier KML avoir plusieurs couches distinctes.

    Citation Envoyé par Unusual Voir le message
    Autre question :
    - Sur le OnSelect, j'affiche des mini-fiches d'informations qui ont par type d'éléments la même présentation (même type de présentation pour des équivalents de même folder)
    ...Est-ce possible ? ...Sinon y a-t-il une autre méthode utilisable dans ce contexte ?
    A ma connaissance, BalloonStyle est notre ami :

    Exemple de KML (forcément petit, c'est pour la démo) :

    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
    <kml xmlns="http://www.opengis.net/kml/2.2" xmlns:kml="http://www.opengis.net/kml/2.2">
    <Document>
      <name><![CDATA[POINT]]></name>
      <description><![CDATA[Exported from POINT on 04/09/2009]]></description>
      <Schema name="POINT" id="POINT_schema">
        <SimpleField type="xsd:string" name="VILLE">
          <displayName><![CDATA[VILLE]]></displayName>
        </SimpleField>
        <SimpleField type="xsd:string" name="NOM">
          <displayName><![CDATA[NOM]]></displayName>
        </SimpleField>
      </Schema>
      <Style id="FEATURES">
        <IconStyle>
          <color>FF00FF00</color>
          <scale>1.5</scale>
          <Icon>
            <href>root://icons/palette-4.png</href>
            <x>32</x>
            <y>128</y>
            <w>32</w>
            <h>32</h>
          </Icon>
        </IconStyle>
        <LabelStyle>
          <color>00FFFFFF</color>
        </LabelStyle>
        <BalloonStyle>
          <text><![CDATA[$[VILLE]
    $[NOM]
    ]]></text>
        </BalloonStyle>
      </Style>
      <Folder>
        <name>Features</name>
        <Placemark>
             <styleUrl>#FEATURES</styleUrl>
             <ExtendedData>
               <SchemaData schemaUrl="#POINT_schema">
                 <SimpleData name="VILLE"><![CDATA[COMPIEGNE]]></SimpleData>
                 <SimpleData name="NOM"><![CDATA[LES ARCHERS DE COMPIEGNE]]></SimpleData>
               </SchemaData>
             </ExtendedData>
             <Point>
               <coordinates>2.8252,49.4178,0</coordinates>
             </Point>
           </Placemark>
      </Folder>
    </Document>
    </kml>
    Les Styles habituels permettent de faire la légende des dessins (un style par Folder par exemple), alors que BallonStyle définit la fiche en elle-même en allant chercher des informations dans le KML (les $[XXX]).

  9. #9
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Points : 194
    Points
    194
    Par défaut
    Citation Envoyé par dgrichard Voir le message
    Les Styles habituels permettent de faire la légende des dessins (un style par Folder par exemple), alors que BallonStyle définit la fiche en elle-même en allant chercher des informations dans le KML (les $[XXX]).
    Ok, je suis d'accord pour une utilisation avec GoogleEarth...cela le fait automatiquement (et je l'ai déjà fait lol)...mais pour l'affichage dans l'IGN via l'API ? ...Comment fait-on ? Actuellement, je gère l'événement OnSelect de la couche pour constituer l'affichage :

    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
    ...
    var TexteBulleAide = "Mon Texte HTML";
    var geometrie = feature.geometry; 
    var ll = feature.geometry.getBounds().getCenterLonLat();
    var me = map.getMap().getExtent();
    var inView = me.containsLonLat(ll,false);
    // si hors de la visualisation
    if (!inView) 
    {                
        ll= me.getCenterLonLat();
    }
    popup = new OpenLayers.Popup.FramedCloud("chicken",
                                ll,    
                                feature.layer.map.getSize(),                             
                                TexteBulleAide,
                                null,
                                true,                            
                                onPopupClose); 
             
                
    feature.popup = popup;
                
    if (feature.popup) 
    {
        feature.popup.autoSize= true;
        map.getMap().addPopup(feature.popup, true);
    }
    Comment référencer le baloonstyle du style courant pour le mettre dans TexteBulleAide pour mon cas (je peux faire les substitutions de champs "courants" moi-même si nécessaire...mais comment accède-t-on au champs de ExtendedData) ?

    On utilise le code suivant par exemple pour récupérer les champs au niveau du feature courant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TexteName = feature.attributes["name"];
    // Texte descriptif de l'élément courant
    TexteDescription = feature.attributes["description"];
                
    // Champ identifiant de l'élément pour substituer dans les liens pour le passage de paramètre
    TexteId = feature.attributes["id"];
    mais comment fait-on pour récupérer le champ "id" s'il est dans ExtendedData au lieu d'être directement au niveau du placemark ? On le référence de la même façon qu'auparavant ou y a-t-il une notation genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    feature.ExtendedData.attributes["id"]
    pour y accéder ?

  10. #10
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    OpenLayers analyse les styles du KML et dans le cas où un style contient la balise BallooStyle, OL l'ajoute au style en question.

    Voici ce que je fais avec l'API pour le callback onFeatureInsert :

    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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    /**
     * Method: _creat4KML
     * Create function for KML based features.
     *      the calling context is the feature.
     *
     * Returns:
     * {<Geoportal.Popup.Anchored>} - the popup.
     */
    Geoportal.Popup.Anchored._creat4KML= function() {
        var popup;
        var opts= OpenLayers.Util.extend({},this.layer.formatOptions);
        OpenLayers.Util.applyDefaults(
            opts,{
                size:null,
                closeBox:true,
                onPopupClose:Geoportal.Popup.onPopupClose,
                backgroundColor:'#ffffff',
                opacity:0.75
            });
        var tempText;
        if(this.style) {
            tempText= null;
            // add style pop-up define in kml's file
            // user can use in kml's file variable like '$[name]'
            // which correspond to balise inside placemark like <name>,<description>,<adresses>
            tempText= this.style.balloonStyle;
            if(tempText != null) {
                var rx= /\$\{([a-zA-Z0-9_\-\.]*)\}/;
                while(tempText.match(rx)) {
                    var test= RegExp.$1;
                    test= (this.attributes[test]?
                        (this.attributes[test].value?
                            this.attributes[test].value
                        :   this.attributes[test])
                    :   "");
                    tempText= tempText.replace(rx,test);
                }
            } else {
                tempText= (this.attributes.name? this.attributes.name+"<br/>":"")+
                          (this.attributes.description? this.attributes.description:"");
                tempText= Geoportal.Util.cleanContent(tempText);
            }
    
            popup= new Geoportal.Popup.Anchored(
                "chicken",
                this.geometry.getBounds().getCenterLonLat(),
                opts.size,
                this.style.textColor?
                    "<div class='gpPopupBody' style='"+this.style.textColor+";'>"+tempText+"</div>"
                :
                    "<div class='gpPopupBody'>"+tempText+"</div>",
                null,
                opts.closeBox,
                this.style.bgColor,
                this.style.bgColorOpacity,
                opts.onPopupClose,
                this
            );
        } else {
            //if there are no style defines in kml's file
            tempText= (this.attributes.description? this.attributes.description:"");
            tempText= Geoportal.Util.cleanContent(tempText);
            popup= new Geoportal.Popup.Anchored(
                "chicken",
                this.geometry.getBounds().getCenterLonLat(),
                opts.size,
                 "<div class='gpPopupHead'>" +
                    (this.attributes.name? this.attributes.name:"") +
                 "</div>" +
                 "<div class='gpPopupBody'>" +
                    tempText +
                 "</div>",
                null,
                opts.closeBox,
                opts.backgroundColor,
                opts.opacity,
                opts.onPopupClose,
                this
            );
        }
        popup= Geoportal.Popup.completePopup(popup,this.layer.formatOptions);
        this.popup= popup;
        return this.popup;
    };
    
    /**
     * APIMethod: createPopUpForKMLFeature
     * Create function for KML based feature and give a style to the popup.
     * Used for OpenLayers.Format.KML on "featureadded" event through
     * <OpenLayers.Layer.Vector.onFeatureInsert>() callback.
     *
     * Parameters:
     * feature - {<OpenLayers.Feature.Vector>}
     */
    Geoportal.Popup.Anchored.createPopUpForKMLFeature= function(feature) {
        feature.createPopup= OpenLayers.Function.bind(Geoportal.Popup.Anchored._creat4KML,feature);
    };
    
    /**
     * APIFunction: completePopup
     * Finalize popup options.
     *
     * Parameters:
     * popup - {<Geoportal.Popup>} the popup to complete.
     * options - {Object} the options (autoSize, maxSize, minSize, overflow).
     *
     * Returns:
     * {<Geoportal.Popup>} completed.
     */
    Geoportal.Popup.completePopup= function(popup, options) {
        if (!options) { return popup;}
        popup.autoSize= options.autoSize!=undefined ? options.autoSize:true;
        if (options.maxSize) {
            popup.maxSize= options.maxSize;
        }
        if (options.minSize) {
            popup.minSize= options.minSize;
        }
        if (options.overflow) {
            popup.contentDiv.style.overflow= options.overflow;
        }
        return popup;
    };
    Comme tu le vois s'il le texte de BalloonStyle existe, je tente de remplacer pour l'objet en cours les $[xxx] par la valeur de l'attribut xxx. Ce que j'ai ajouté (qui manque à OL), c'est que si on utilises les extendedData, alors les attributs ne sont plus de simples valeurs textuelles, mais des objets dont la valeur est dans la propriété 'value'.

    Il est donc possible:

    • de fabriquer un KML avec des 'Folder';
    • de fabriquer des styles contenant des 'BalloonStyle';
    • de fabriquer des objets dans 'ExtendedData' pour les valeurs attributaires;
    • la surcharge du callback 'onFeatureInsert' permet de jouer ensuite sur le type de popup ou autre ...

  11. #11
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Points : 194
    Points
    194
    Par défaut
    Pfffiou !!!

    J'ai testé pas mal de choses parmi tout ce que tu as évoqué dans tes précédentes réponses :

    - J'ai ajouté des folders
    - J'ai ajouté la gestion des mini-fiches via ballonstyle
    - J'ai essayé le ExtendedData avec champs typés et non typés (SchemaData/SimpleData Name et Data Name/value)
    - J'ai modifié mon javascript OnSelect sur les couches KML

    J'arrive bien à avoir tout comme avant dans tous les cas !!!

    Le problème est que malgré la factorisation, l'introduction des balises supplémentaires compense la gain de la factorisation de présentation.
    Certes, le KML est plus conforme à la norme et des données sont disponibles sur chaque élément (on n'a plus seulement une fiche HTML en vrac dans le champ description), mais aucun gain sur la taille de constaté sur mes premiers tests (jusqu'à 1500 éléments dans le KML)...et aucun gain de temps de chargement non plus...les KML sont même un tout petit peu plus gros qu'auparavant. J'ai quand même réussi à arriver légèrement en dessous en utilisant des mnémoniques très courtes au lieu des noms de champs qui sont utilisés dans les ExtendedData...donc ce fut intéressant à coder (c'est déjà ça ! ) la présentation des KML me convient plus aussi (full compatible GoogleEarth), mais le problème de vitesse de chargement reste entier....

    Le pb vient surtout du fait de la longueur des balises...répétées des milliers de fois en ouverture et fermeture (Data name + value ou SimpleData name) cf exemples :
    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
    <Placemark>
      <name>Club house</name>
      <ExtendedData>
        <Data name="holeNumber">
          <value>1</value>
        </Data>
        <Data name="holeYardage">
          <value>234</value>
        </Data>
        <Data name="holePar">
          <value>4</value>
        </Data>
      </ExtendedData>
    </Placemark>
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <Placemark>
      <name>Easy trail</name>
      <ExtendedData>
        <SchemaData schemaUrl="#TrailHeadTypeId">
          <SimpleData name="TrailHeadName">Pi in the sky</SimpleData>
          <SimpleData name="TrailLength">3.14159</SimpleData>
          <SimpleData name="ElevationGain">10</SimpleData>
        </SchemaData>
        </ExtendedData>
        <Point>
          <coordinates>-122.000,37.002</coordinates>
        </Point>
    </Placemark>
    Je ne pense pas qu'on puisse utiliser d'alias plus court au lieu de "SimpleData name" ou du couple "Data name / value"... ou utiliser une autre présentation plus concise (sinon je suis preneur si quelqu'un sait )

    Il me reste donc a priori qu'à voir du côté du KMZ pour trouver un gain (j'espère)...faut que j'explore comment faire et puis tester...à suivre...

    Au fait, Didier...tu as dit dans un message précédent :
    Voir la définition des Folder. L'idée est de parser le KML (un seul niveau de Folder) en ventilant les objets suivants leur dossier (Folder). On peut ainsi avec un fichier KML avoir plusieurs couches distinctes.
    Peut-on exploiter ces couches via l'API IGN ? Qu'a-t-on de disponible comme fonctionnalités ? (comme actions possibles sur un folder particulier par exemple)

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par Unusual Voir le message
    Il me reste donc a priori qu'à voir du côté du KMZ pour trouver un gain (j'espère)...faut que j'explore comment faire et puis tester...à suivre...
    Le KMZ accélerera le téléchargement, mais comme il faut le décompresser ... au final, le butineur doit analyser le même fichier

    Je me demande d'ailleurs si on peut envoyer un fichier KML compressé en spécifiant l'en-tête HTTP "Content-Encoding: gzip" via un appel Ajax ("Accept-Encoding: gzip, deflate" fonctionnerait-il en Ajax) ?

    Citation Envoyé par Unusual Voir le message
    Peut-on exploiter ces couches via l'API IGN ? Qu'a-t-on de disponible comme fonctionnalités ? (comme actions possibles sur un folder particulier par exemple)
    Aucune spéciale, normalement le même fichier KML peut être parsé avec l'options extractFolders à true. A ce moment là, les objets ne sont plus uniquement dans le tableau features de la couche, mais aussi dans la table associative folders['nomDuFolder'], membre features avec les styles ad hoc définis dans le folder KML.

    J'en reviens à ce que je proposais (il y a quelques temps), mais qui nécessiterait du lourd côté service :


    1. Via WMS/WFS :



      • couche ponctuelle en WMS;
      • clic sur carte => GetFeatureInfo (WMS) / GetFeature (WFS) pour la popup;



    1. Via KML+WFS(ou BDD) :


    • couche ponctuelle KML ultra-simple (type de point uniquement avec nom --identifiant--);
    • code JS qui sur clic/survol invoque le service WFS/Base de données pour fabriquer la fiche (d'ailleurs cela peut être avec une réponse KML) dont le contenu est retourné par le service.
    1. En passant à Flash (des tests ont montré que l'on pouvait charger 10 000 polygones sans ralentissements notables).

  13. #13
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Points : 194
    Points
    194
    Par défaut
    Citation Envoyé par dgrichard Voir le message
    Le KMZ accélerera le téléchargement, mais comme il faut le décompresser ... au final, le butineur doit analyser le même fichier
    Y a-t-il moyen de savoir où se situe le problème de performance lors d'un chargement d'une couche KML...i.e. Est-ce dans le téléchargement du fichier KML ou dans le chargement par le butineur ?

    Citation Envoyé par dgrichard Voir le message

    J'en reviens à ce que je proposais (il y a quelques temps), mais qui nécessiterait du lourd côté service :


    1. Via WMS/WFS :



      • couche ponctuelle en WMS;
      • clic sur carte => GetFeatureInfo (WMS) / GetFeature (WFS) pour la popup;



    1. Via KML+WFS(ou BDD) :


    • couche ponctuelle KML ultra-simple (type de point uniquement avec nom --identifiant--);
    • code JS qui sur clic/survol invoque le service WFS/Base de données pour fabriquer la fiche (d'ailleurs cela peut être avec une réponse KML) dont le contenu est retourné par le service.
    1. En passant à Flash (des tests ont montré que l'on pouvait charger 10 000 polygones sans ralentissements notables).
    Le pb est que pour toutes ces options, il y a du temps à passer...rien que pour appréhender comment cela marche...et le temps, c'est ce qui manque en général...
    openscales a l'air d'être intéressant...et rapide....mais je pense que là, il faut carrément une formation...y aurait-il un exemple simple d'utilisation avec les couches de l'IGN et le chargement d'un KML (paramétrable) en démo ?...Histoire de voir le rapport difficulté / performances.

  14. #14
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par Unusual Voir le message
    Y a-t-il moyen de savoir où se situe le problème de performance lors d'un chargement d'une couche KML...i.e. Est-ce dans le téléchargement du fichier KML ou dans le chargement par le butineur ?
    Le téléchargement compte un peu (surtout si le fichier est gros)
    Le chargement (analyse+interprétation en SVG/VML) pèse le plus lourd dans le processus...

    Citation Envoyé par Unusual Voir le message
    y aurait-il un exemple simple d'utilisation avec les couches de l'IGN et le chargement d'un KML (paramétrable) en démo ?...Histoire de voir le rapport difficulté / performances.
    Cela fait partie du travail que l'on doit faire en janvier (à le temps que l'on a pas!) ... Mais, tu peux voir sur la démo :

    • onglet KML et popups : le nombre de d'objets dessinés est important et pourtant c'est ultra-rapide;
    • onglet IGN's GeoRM: les fonds Géoportail seuls.

  15. #15
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Points : 194
    Points
    194
    Par défaut
    Intéressant !

    J'ai hâte d'être à fin janvier pour voir cela
    Oui, j'ai bien vu la démo...je ne sais pas combien de points, mais j'ai vu qu'il y en avait un nombre respectable...par contre, les fiches sont toutes petites (pas tellement d'infos)...donc j'aimerais bien me rendre compte avec un de mes KML...et voir jusqu'où on repousse les limites actuelles avant de m'investir en temps dessus (toujours le temps )

  16. #16
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par Unusual Voir le message
    ...par contre, les fiches sont toutes petites (pas tellement d'infos)...donc j'aimerais bien me rendre compte avec un de mes KML...et voir jusqu'où on repousse les limites actuelles avant de m'investir en temps dessus (toujours le temps )
    C'est diablement vrai !

    Ceci écrit, la grosse différence entre HTML/JS/Ajax et Flash est que l'interprétation du contenu des popups est majoritairement effectuée par l'ActionScript (équivalent de JS+Java en plus rapide). Il n'y a pas de mises à jour de l'arbre DOM de la page, mais des objets Flash - ce qui est par essence plus rapide ...

Discussions similaires

  1. [DOM] Erreur sur chargement XML DOM en PHP
    Par samy4972 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 15/04/2013, 21h19
  2. [2.x] Erreur sur chargement de fichier
    Par fatenfacebok dans le forum Symfony
    Réponses: 9
    Dernier message: 17/02/2013, 20h26
  3. [SP-2007] Erreur sur chargement WebPart
    Par KILLER28 dans le forum SharePoint
    Réponses: 5
    Dernier message: 05/08/2011, 12h19
  4. Réponses: 4
    Dernier message: 19/06/2009, 10h26
  5. Réponses: 7
    Dernier message: 31/03/2008, 14h31

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