IGNF / geoportal-extensions

French Geoportal Extensions for well-known javascript mapping libraries (Leaflet and OpenLayers)
https://ignf.github.io/geoportal-extensions/
Other
64 stars 33 forks source link

Utiliser plusieurs fichiers autoconf car plusieurs clés #309

Closed khamphon closed 3 years ago

khamphon commented 3 years ago

Bonjour,

Avec la mise en place de la clé gratuite "essentiel", nous allons devoir gérer 2 clé sur notre application : la clé essentiel + une clé payante. A chaque clé, un fichier autoconf est associée mais malheureusement nous ne voyons pas comment nous pourrions implémenter la gestion de plusieurs fichier autoconf sur notre application.

Nous utilisons aujourd'hui openLayer. Le code introduisant le fichier autoconf que nous stokons dans l'application est celui-ci dans ol3\GpPluginOl3.js :

        _var AUTO_CONF = "autoconf.js";
        ....
        AutoConf: {
            _key: {
                apiKey: AUTO_CONF,//url + '/autoconf',
                apiKeys: AUTO_CONF//url + '/autoconf?keys=%KEYS%'
            },
            url: function (key) {
                var keys = '';
                if (Array.isArray(key) && key.length > 0) {
                    keys = key[0];
                    for (var i = 1; i < key.length; i++) {
                        keys += ',' + key[i];
                    }
                }
                return {
                    apiKey: this._key['apiKey'].replace(key ? keyname : null, key),
                    apiKeys: this._key['apiKeys'].replace(keyname, key[0]).replace('%KEYS%', keys),
                    aggregate: AUTO_CONF//protocol + hostname.concat('/') + key + '/autoconf/id/'
                };
            }
        },
        ...._

Et dans notre application, nous l'utilisons comme ceci :

    _var AUTO_CONF = "autoconf.js";
    ....
    initConfig: function() {
    return this.lazyLoadCartographieLibs().then(() => {
        if(Gp.Config != null) {
            return Promise.resolve(Gp.Config);
        }
        return new Promise((resolve, reject) => {
            Gp.Services.getConfig({
                serverUrl: URL_SERVER+AUTO_CONF,
                callbackSuffix: "",
                contentType: "application/javascript",
                onBeforeParse: function(xml){
                    // remplacement des URL par notre proxy
                    return xml.replace(/https:\/\/wxs.ign.fr/g, URL_PROXY_WXS)
                },
                onSuccess: resolve,
                onFailure: reject
            });
        });
    });
},
    ..._

Je vous remercie d'avance de votre aide.

Cordialement,

elias75015 commented 3 years ago

Bonjour,

nous réflechissons à un moyen de simplifier l'accès aux ressources via les clés gratuites sur nos APIs JavaScript.

Cela etant dit, le plus simple est selon moi de demander au service client d'ajouter toutes les ressources qui vous intéressent à votre clé payante : vous n'aurez alors plus qu'une autoconf à gérer.

Autre solution, moins triviale, utiliser une autoconf locale (un fichier mon/chemin/autoconf.js) qui fusionne les autoconf de plusieurs clés (le service d'autoconfiguration permet de faire ca) : https://wxs.ign.fr/key1/autoconf/?keys=key1,key2&output=json&callback=callback

Le problème de cette solution, c'est que l'autoconf est statique et n'est pas mise à jour si vos clés évoluent, car elle est en local de votre côté.

Pour plus d'informations sur cette solution, vous pouvez voir le sujet suivant : https://www.developpez.net/forums/d2103545/applications/sig-systeme-d-information-geographique/ign-api-geoportail/openlayers-extension-geoportail-ol-gerer-2-cles/

En espérant que cela réponde à votre question.

khamphon commented 3 years ago

Bonjour,

Tout d'abord je vous remercie de votre réponse super rapide !!! Concernant le fichier autoconf, celui-ci est déjà en statique dans notre application. Ce que je comprends suite à votre réponse, ce serait de fusionner les 2 fichiers autoconf en un seul via votre outil sur le site IGN.

Par contre, dans notre code, nous utilisons la clé pour du géocodage. Nous pourrions alors utiliser notre clé payante pour cela et donc n'avoir qu'une seule clé de déclarée dans l'application. En effet, le fichier autoconf fusionnant les couches disponibles pour les 2 clés permettra d'utiliser comme aujourd'hui l'utilisation des ces couches.

Confirmez vous cela ?

Merci d'avance de votre réponse.

Cordialement,

elias75015 commented 3 years ago

Après analyse, pas certain que cela fonctionne, car les url d'appel aux services ne semblent construites qu'à partir de la première clé déclarée. Verifier ce que cela donne dans la pratique.

Nous allons essayer de remédier à cela en priorisant dès que possile l'évolution consistant à simplifier l'accès aux ressouces via plusieurs clés d'accès.

En attendant, si ce qui est proposé plus haut n'est pas concluant, le mieux reste encore de n'avoir qu'une clé personnelle avec toutes les ressources nécessaires dessus (ressources actuelles de votre clé payante + les ressources de la clé essentielle) : en faire la demande au service client.

Désolé pour ces petites difficultés et le manque de clarté des API JavaScript Géoportail sur ce point en particulier.

elias75015 commented 3 years ago

Bonjour,

un PR est en cours pour utiliser plusieurs clés pour les extensions Géoportail pour Openlayers. Normalement, elle est déjà fonctionnelle dans les grandes lignes. Je vous invite à la tester si cela vous dit : #310

khamphon commented 3 years ago

Bonjour,

Nous avons testé le fichier autoconf généré avec plusieurs clés sur notre application. Aucune modification de notre code a été réalisée et lorsque nous sélectionnons les couches à afficher, l'URL des tuiles avec la clé concernée est réalisé de façon transparente.

En résumé, la solution de l'autoconf multi-clé est concluant pour nous.

Bien cordialement,