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 :

Partage de l'API sur plusieurs pages WEB


Sujet :

IGN API Géoportail

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 8
    Points
    8
    Par défaut Partage de l'API sur plusieurs pages WEB
    Bonjour

    Je suis un utilisateur régulier et satisfait de l'API Geoportail, en tant que particulier, pour un site web présentant des topos de randonnée. A l'occasion de cette nouvelle version, je m’aperçois du manque d'optimisation dans ma facon d'utiliser cette API.

    Mon site se compose de plusieurs pages web, chacune présentant une randonnée. Dans chacune, je viens donc déposer, dans l'en tete html, le code nécessaire à l'exploitation de l'API Geoportail. J'ai bien essayé de mettre ce code spécifique dans un fichier javascript à part, puis de le référencer dans chacune des pages nécessitant l'API, mais sans succès. Donc lorsque je veux mettre à jour la version d'API (en particulier la clé), je dois le faire sur chaque page exploitant l'API (plusieurs dizaines).

    Quelqu'un aurait il une solution plus souple pour n'avoir le code de l'API que dans un seul fichier, puis de le référencer autant de fois que nécessaire ?

    Merci d'avance pour votre aide.

  2. #2
    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
    Deux méthodes :

    1/ charger l'API via une IFRAME : le code réside uniquement dans l'IFRAME. On peut passer des paramètres de la page maître à la page fille (Cf. http://api.ign.fr/geoportail/api/doc...talXYForm.html);

    2/ charger l'API dynamiquement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Geoportal.Util.loadJS(
        'http//api.ign.fr/geoportail/api/js/1.3.0/Geoportal.js',
        '__GeoportalAPI__','',
        function() {
            faire_le_travail();
        });
    le premier paramètre est l'URL du JS à charger;
    le second, l'identifiant du script (ID);
    le troisième, la fonction de rappel quant le script est chargé ...

    il suffit alors de mettre ce script dans un script JS qui est appelé dans tes pages...

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 8
    Points
    8
    Par défaut Import du source javascript
    Merci pour ces solutions. Néanmoins, comme je ne suis pas très familier avec l'utilisation des scripts java, j'ai adopté la deuxieme solution, mais sans succes.

    Je mets en pièces jointes ce que j'ai essayé de faire:
    - essai_api.html
    - script_api.html (qui est appelé dans le fichier ci-dessus)

    Pour l'expert que tu es, l'erreur va sans doute te sauter aux yeux.
    Fichiers attachés Fichiers attachés

  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 Encore un petit effort ...
    Rendre accessible le code sur un site perso type free.fr, https://www.alwaysdata.com/ permet d'investiguer immédiatement.

  5. #5
    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
    Commences par faire simple :

    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
    <html>
    <head>
    <title>x</title>
    </head>
    <body>
    <script type="text/javascript"
               src="http://api.ign.fr/geoportail/js/1.3.0/Geoportal.js"
               charset="utf-8"
              id="__API_1_3_0__">
    </script>
    <script type="text/javascript">
    window.onload= phase1;
    
    function phase1() {
        Geoportal.load(
            "mapID",
            ['CLEF'],
            null,
            null,
            phase3
        );
    }
    
    function phase3() {
        /* on fait le travail */
    }
    </script>
    <div id="mapID"></div>
    </body>
    </html>
    Fait marcher ça et après on verra (et surtout, je souhaiterai ne plus voir de 1.0beta3, instance= dans le code ...)

    Edit:refactoring ...

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 8
    Points
    8
    Par défaut Ca avance doucement ...
    dgrichard
    J'ai adopté le code que tu m'as envoyé, et ca fonctionne.
    En voulant aller plus loin, j'ai voulu superposer une trace kml avec l'option overlay, en suivant les conseils dans la rubrique FAQ du site API (j'ai meme repris le code de l'exemple, en l'adaptant avec mes fichiers kml et gpx)... et là ca ne fonctionne pas.

    Voici le lien du site:
    http://philippe.prilleux.free.fr/Pas...essai_api.html

    J'arrivais à le faire fonctionner avec les anciennes options, et ca donnait ca:
    http://philippe.prilleux.free.fr/Pas...lou_camin.html
    Fichiers attachés Fichiers attachés

  7. #7
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    A première vue:
    // latitude:
    lat:43.52698,
    },
    //zoom
    13,
    //options
    viewerClass:Geoportal.Viewer.Default, //pour mettre la boite à outil standard (zoom, coordonnées, gestion des couches de données..)
    //overlay{...} sert à ajouter des couches locales (gpx et kml) et des web services (wms)
    overlays:{ 'gpx':[{'name':'Rando', 'url':'trace.gpx', options:{opacity:0.5,minZoomLevel:5,maxZoomLevel:13}}],
    'kml':[{'name':"Mes Points d'Intérêts", 'url':'trace.kml', options:{minZoomLevel:10,maxZoomLevel:17}}],
    }//fin de overlays
    Virgules (rouges) en trop...
    Mais il peut y avoir d'autres problèmes...

  8. #8
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966

  9. #9
    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 cmail Voir le message
    Il devrait aussi il y avoir une parenthèse ouvrante { après

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 8
    Points
    8
    Par défaut Presque au point ..
    Apres avoir bataillé avec quelques virgules et paranthese dans le script, j'arrive à una page qui exploite correctement l'API. ET donc j'en reviens à ma question initiale : comment mettre le script dans un fichier, qui serait appelé dans chacune des pages utilisatrices. Voici ce que ca donne


    J'ai bien essayé de faire quelque chose, mais ca ne donne rien : voici les 2 fichiers:
    - essai_api_1
    - script_api.js

    Merci d'avance aux experts
    Fichiers attachés Fichiers attachés

  11. #11
    Membre averti Avatar de Zébulon-21
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Points : 315
    Points
    315
    Par défaut
    Citation Envoyé par philou63_51 Voir le message
    Quelqu'un aurait il une solution plus souple pour n'avoir le code de l'API que dans un seul fichier, puis de le référencer autant de fois que nécessaire ?
    Voici une autre solution qui permet de ne pas s'embarquer dans du complexe :

    1) - Tu télécharges Notepad++ (c'est gratuit et ça te servira pour bien d'autres choses),

    2) - Tu vas dans le menu : Recherche --> Recherche dans les sous-dossiers,

    3) - Tu demandes un remplacement de xxxx par yyyy et toutes tes pages sont mises à jour en 1/4 de seconde.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 8
    Points
    8
    Par défaut Encore mieux ?
    Merci Zebulon, mais je reste persuadé que la méthode la plus pratique est d'avoir le code de l'API dans un fichier séparé, qui sera ensuite appelé dans chaque page exploitant l'API. C'est d'autant plus pratique qu'on peut ainsi modifier le paramétrage de l'API en une seule fois (ajout de plusieurs lignes par exemple). Donc si un expert javascript à une idée dans ce sens, je suis preneur.

  13. #13
    Membre averti Avatar de Zébulon-21
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Points : 315
    Points
    315
    Par défaut
    Citation Envoyé par philou63_51 Voir le message
    C'est d'autant plus pratique qu'on peut ainsi modifier le paramétrage de l'API en une seule fois (ajout de plusieurs lignes par exemple)
    C'est vrai que Notepad++ ne permet pas l'ajout de plusieurs lignes ; dans ce cas il faut s'orienter sur un autre éditeur, éventuellement payant (Dreamweaver...).

    De plus cette méthode n'est pas parfaite car elle suppose que les fichiers soient accessibles (hors d'une base de données) et rigoureusement identiques, du moins pour la partie à modifier.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 55
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    Citation Envoyé par philou63_51 Voir le message
    ... la méthode la plus pratique est d'avoir le code de l'API dans un fichier séparé, qui sera ensuite appelé dans chaque page exploitant l'API... Donc si un bricoleur javascript à une idée dans ce sens, je suis preneur.
    Au hasard, cet exemple ne pourrait-il pas t'aider : http://crhb.free.fr/topoguides/exemple1/ ?

    cleAPI.js donne la clé API, chargement.js charge la carte, autresFonctions.js exécute d'autres fonctions (une seule dans mon exemple) et index.php appelle le tout.

    Cordialement.

  15. #15
    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
    Peux mettre cela dans ton js :

    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
    if (!window.___loadJS) {
        var ___loadJS= function(url, onloadClbk) {
            var doc= document;
            var nodes= doc.getElementsByTagName('head');
            var head= nodes.length>0? nodes[0] : doc.body;
            jsNode= doc.createElement('script');
            jsNode.setAttribute('type', 'text/javascript');
            jsNode.setAttribute('src', url);
            jsNode.setAttribute('charset', 'UTF-8');
            jsNode.setAttribute('id', id);
            if (onloadClbk!=undefined) {
                jsNode.onload= function() {
                    if (jsNode.readyState && jsNode.readyState!='loaded' && jsNode.readyState!='complete') {
                        return;
                    }
                    jsNode.onreadystatechange= jsNode.onload= null;
                    onloadClbk();
                };
                if (navigator.appName!='Opera') {
                    jsNode.onreadystatechange= jsNode.onload;
                }
            }
            head.appendChild(jsNode);
        }
    }
    
    var iv=null;
    
    ___loadJS("http://api.ign.fr/geoportail/api/js/1.3/Geoportal.js", function() {
        iv = Geoportal.load(
            // div's ID:
            'viewerDiv',
            // API's keys:
            ['988032968956330286'],
            {// map's center :
            // longitude:
                lon:2.5111,
                // latitude:
                lat:43.52698
            },  
            //zoom
            13, 
            //options
            {
                overlays:{
                    'kml':[
                        {'name':"Circuit 1", 'url':'trace.kml', options:{minZoomLevel:10,maxZoomLevel:17}}
                    ]
                },
                viewerClass:Geoportal.Viewer.Default
            }
        );

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 8
    Points
    8
    Par défaut Ca marche enfin
    Citation Envoyé par jeanluc35 Voir le message
    Bonjour,



    Au hasard, cet exemple ne pourrait-il pas t'aider : http://crhb.free.fr/topoguides/exemple1/ ?

    cleAPI.js donne la clé API, chargement.js charge la carte, autresFonctions.js exécute d'autres fonctions (une seule dans mon exemple) et index.php appelle le tout.

    Cordialement.
    Merci beaucoup : ca répond exactement à ce que je cherchais. J'ai fais l'essai sur mon site et ca marche parfaitement.
    J'ai une dernière question. Est il possible possible de décomposer la fonction loadapi en 2 javascript : une qui appelle la clé API, et l'autre qui définit les coordonnées GPS. Ou bien de ne garder qu'un seul script, mais de pouvoir passer en paramètres les valeurs "lon" et "lat" à partir de la page appellante ?

  17. #17
    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 philou63_51 Voir le message
    Ou bien de ne garder qu'un seul script, mais de pouvoir passer en paramètres les valeurs "lon" et "lat" à partir de la page appellante ?
    Et en inspirant cet exemple ?

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 55
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    Citation Envoyé par philou63_51 Voir le message
    ...Ou bien de ne garder qu'un seul script, mais de pouvoir passer en paramètres les valeurs "lon" et "lat" à partir de la page appellante ?
    Tu as donc besoin de paramètres communs pour toutes tes pages et de paramètres dédiés à chacune de tes pages.
    Pour les paramètres communs (dont la clé API), tu mets tous les paramètres dans un seul fichier.
    Pour les paramètres dédiés, tu mets tous les paramètres propres à une page dans un seul fichier et en le nommant, par exemple paramPage1.js ; ou alors en mettant les paramètres directement dans la page appelante entre les balises script, voir :http://crhb.free.fr/topoguides/exemple1/.

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par jeanluc35 Voir le message
    Bonjour,



    Tu as donc besoin de paramètres communs pour toutes tes pages et de paramètres dédiés à chacune de tes pages.
    Pour les paramètres communs (dont la clé API), tu mets tous les paramètres dans un seul fichier.
    Pour les paramètres dédiés, tu mets tous les paramètres propres à une page dans un seul fichier et en le nommant, par exemple paramPage1.js ; ou alors en mettant les paramètres directement dans la page appelante entre les balises script, voir :http://crhb.free.fr/topoguides/exemple1/.

    Super. C'est tout a fait ce que je cherchais à faire : passer les coordonnées GPS de la carte en paramètres dans le fichier appelant. Mais je ne connaissais pas la syntaxe associée en javascript.
    Encore merci à tous pour ces bons tuyaux.

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

Discussions similaires

  1. Plusieurs diaporama sur même page web
    Par Ganseky dans le forum jQuery
    Réponses: 0
    Dernier message: 31/01/2014, 16h47
  2. Réponses: 3
    Dernier message: 28/02/2011, 09h29
  3. Réponses: 2
    Dernier message: 01/10/2009, 15h58
  4. Variable partagée sur plusieurs pages
    Par romfauch63 dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2009, 14h35
  5. Impression d'une page web sur plusieurs pages papier
    Par Spidyy dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/06/2006, 17h42

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