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 :

Pb de migration de code


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 Pb de migration de code
    Bonjour,

    Après quelques mois d'abandon de la carto IGN, je reviens afin de mettre à jour notre site avec la dernière version (GeoportalExtended.js).

    Le but est d'afficher des fichiers KML aussi ai-je récupérer le fichier Javascript de l'api et je l'utilise en local (au passage, y a-t-il besoin de plus ?).

    J'ai suivi toutes les étapes préconisées pour la migration mais j'obtiens dans firebug l'erreur suivante : "TypeError: Geoportal.Catalogue.TERRITORIES[territory] is undefined"

    J'y ai aussi vérifié que Geoportal.Catalogue.TERRITORIES['FXX'] était bien connu dans la console Firebug.

    Est-ce un problème de latence ?

    Voici une portion du code utilisé :

    Dans un premier temps, j'ai bien l'init

    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
    function loadAPI() 
        {
            if (IsCartoIGN==true)
    	    {
    	        // on attend que les classes soient chargées
    	        if (checkApiLoading('loadAPI();', ["OpenLayers", "Geoportal", "Geoportal.Viewer", "Geoportal.Viewer.Default", "Geoportal.Viewer.Standard", "Geoportal.Catalogue"]) === false)
                {
                    return;
                }
    
                // on charge la configuration de la clef API, puis on charge l'application
                Geoportal.GeoRMHandler.getConfig([CleIGN], null, null, {
                    onContractsComplete: initGeoportalMap
                });
            }
        }
        
        window.onload= loadAPI;
    puis une fois la page chargée...avec SystemeReferenceCoordonneesIGN = 'FXX' pour le cas de mon KML courant

    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
    function geoportalLoadmap(idDivMap, mode, territoire, crs, dispcrs, proxy) 
    {
            var options= {};
            if(mode) {options.mode= mode;}
            if (territoire) { options.territory = territoire; }
            if(crs) {options.projection= crs;}
            if(dispcrs) {options.displayProjection= dispcrs;}
            if(proxy) {options.proxy= proxy;}
            options.nameInstance = 'map';
            
            map = new Geoportal.Viewer.Default(idDivMap,  OpenLayers.Util.extend(options,
                                                            window.gGEOPORTALRIGHTSMANAGEMENT===undefined? {'apiKey':CleIGN} : gGEOPORTALRIGHTSMANAGEMENT)
            );
    
            return map;
    }
    
    function initGeoportalMap() 
    {
        ObjetDIV = window.document.getElementById('GeoportalMapDiv');    
        if ((ObjetDIV) && (IsAffichageAFaire == true))
        {
            if (map == null) 
            {
                if (typeof(geoportalLoadmap) == 'function')
                    {
                        geoportalLoadmap("GeoportalMapDiv", "normal", SystemeReferenceCoordonneesIGN);
                    }
    ... // Chargement des couches ad hoc
            }
    ...
        }
       ....
    C'est semble-t-il le "territory" qui semble ne pas être connu...comme c'est la version compressée javascript, difficile d'aller plus loin dans l'exploration du code afin de trouver le blême...

    Merci d'avance pour tout éclaircissement.

  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
    Une url svp !

  3. #3
    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 mga_geo Voir le message
    Une url svp !
    Je n'ai pas d'url à fournir, vu que pour l'instant c'est une clef pour le dév qui n'est valable qu'en localhost.

    Tous nos sites marchaient bien avant le changement d'API (après, on a suspendu tout développement et désactivé la carto IGN tant que les tractations commerciales n'étaient pas terminées avec l'IGN, et là, on doit juste réactiver la carto...après migration. Sur le papier, je n'ai pas l'impression d'avoir loupé une étape (appel, référence,...), mais là, je me sens pieds et poings liés du fait que cela se passe dans GeoportalExtended.js. Y a-t-il une initialisation préalable à faire pour les types de projection/territoire, d'autres variables à renseigner par rapport à avant (cf mon code cité) ?

    Vu que ma recherche de base sur ces critères d'erreur (google, ce forum) n'a rien donné, je comptais surtout sur le retour d'expérience pour émettre une hypothèse, une voie de recherche, une solution (soyons fou ! )...sinon il faudrait le GeoportalExtended.js en version décompressé pour voir dans quelle condition cela plante (variable non initialisée, tableau non encore rempli au moment de l'appel), mais est-il disponible sur une URL IGN ?

    J'avais bien vu une erreur similaire soulevée il y a quelques mois (pour le message d'erreur en tout cas), mais je n'ai pas compris la réponse de DGRichard...

    http://www.developpez.net/forums/d12...t=TypeError%3A

    La pertinence se situe là :

    Citation Envoyé par gilgil Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OpenLayers.Protocol.Script.registry.regId1({"http":{"status":200,"error":null},"xml":"<?xml version=\"1.0\" encoding=\"UTF-8\"?><ViewContext xmlns=\"http://www.opengis.net/context\" xmlns:gpp=\"http://api.ign.fr/geoportail\" xmlns:ows=\"http://www.opengis.net/ows/1.1\" xmlns:sld=\"http://www.opengis.net/sld\" xmlns:wmts=\"http://www.opengis.net/wmts/1.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"autoConf\" version=\"1.1.0\" xsi:schemaLocation=\"http://www.opengis.net/context http://gpp3-wxs.ign.fr/schemas/extContext.xsd http://api.ign.fr/geoportail http://gpp3-wxs.ign.fr/schemas/autoconf.xsd\"><General><Window height=\"300\" width=\"500\"/><BoundingBox SRS=\"EPSG:4326\" maxx=\"180.0\" maxy=\"90.0\" minx=\"-90.0\" miny=\"-180.0\"/><Title>Service d'autoconfiguration des API</Title><Extension><gpp:General><gpp:Theme>default</gpp:Theme><gpp:Territories><gpp:Territory default=\"1\" id=\"FXX\" name=\"FXX\"> <gpp:defaultCRS>EPSG:3857</gpp:defaultCRS> <gpp:AdditionalCRS>CRS:84</gpp:AdditionalCRS> <gpp:AdditionalCRS>IGNF:RGF93G</gpp:AdditionalCRS> <gpp:AdditionalCRS>EPSG:4171</gpp:AdditionalCRS> <gpp:AdditionalCRS>IGNF:LAMB93</gpp:AdditionalCRS> <gpp:AdditionalCRS>EPSG:2154</gpp:AdditionalCRS> <gpp:AdditionalCRS>IGNF:LAMBE</gpp:AdditionalCRS> <gpp:AdditionalCRS>EPSG:27582</gpp:AdditionalCRS> <gpp:AdditionalCRS>EPSG:27572</gpp:AdditionalCRS> <gpp:BoundingBox>-31.17,27.33,69.03,80.83</gpp:BoundingBox> <sld:MinScaleDenominator>533</sld:MinScaleDenominator> <sld:MaxScaleDenominator>128209039</sld:MaxScaleDenominator> <gpp:Resolution>2445.984905</gpp:Resolution> <gpp:Center> <gpp:x>2.345274398</gpp:x> <gpp:y>48.860832558</gpp:y> </gpp:Center> <gpp:DefaultLayers> <gpp:DefaultLayer layerId=\"ORTHOIMAGERY.ORTHOPHOTOS$GEOPORTAIL:OGC:WMTS\"/> <gpp:DefaultLayer layerId=\"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\"/> <gpp:DefaultLayer layerId=\"CADASTRALPARCELS.PARCELS$GEOPORTAIL:OGC:WMTS\"/> </gpp:DefaultLayers> </gpp:Territory><gpp:Territory id=\"ANF\" name=\"ANF\"> <gpp:defaultCRS>EPSG:3857</gpp:defaultCRS> <gpp:AdditionalCRS>CRS:84</gpp:AdditionalCRS> <gpp:AdditionalCRS>IGNF:WGS84RRAFGEO</gpp:AdditionalCRS> <gpp:AdditionalCRS>EPSG:4558</gpp:AdditionalCRS> <gpp:AdditionalCRS>IGNF:UTM20W84GUAD</gpp:AdditionalCRS> <gpp:AdditionalCRS>EPSG:2969</gpp:AdditionalCRS> <gpp:AdditionalCRS>EPSG:4559</gpp:AdditionalCRS> <gpp:AdditionalCRS>IGNF:GUAD48UTM20</gpp:AdditionalCRS> <gpp:AdditionalCRS>EPSG:32620</gpp:AdditionalCRS> <gpp:BoundingBox>-64,11.7,-59,18.18</gpp:BoundingBox> <sld:MinScaleDenominator>533</sld:MinScaleDenominator> <sld:MaxScaleDenominator>128209039</sld:MaxScaleDenominator> <gpp:Resolution>9.554629</gpp:Resolution> <gpp:Center> <gpp:x>-61.732777778</gpp:x> <gpp:y>15.996111111</gpp:y> </gpp:Center> <gpp:DefaultLayers> <gpp:DefaultLayer layerId=\"ORTHOIMAGERY.ORTHOPHOTOS$GEOPORTAIL:OGC:WMTS\"/> <gpp:DefaultLayer layerId=\"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\"/> </gpp:DefaultLayers></gpp:Territory><gpp:Territory id=\"ASP\" name=\"ASP\"> <gpp:defaultCRS>EPSG:3857</gpp:defaultCRS> <gpp:AdditionalCRS>CRS:84</gpp:AdditionalCRS> <gpp:AdditionalCRS>IGNF:UTM43SW84</gpp:AdditionalCRS> <gpp:AdditionalCRS>EPSG:32743</gpp:AdditionalCRS> <gpp:BoundingBox>76,-40,79,-36</gpp:BoundingBox> <sld:MinScaleDenominator>8531</sld:MinScaleDenominator> <sld:MaxScaleDenominator>128209039</sld:MaxScaleDenominator> <gpp:Resolution>9.554629</gpp:Resolution> <gpp:Center> <gpp:x>77.571944</gpp:x> <gpp:y>-37.796389</gpp:y> </gpp:Center> <gpp:DefaultLayers> <gpp:DefaultLayer layerId=\"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\"/> </gpp:DefaultLayers> </gpp:Territory><gpp:Territory id=\"ATF\" name=\"ATF\"> <gpp:defaultCRS>EPSG:3857</gpp:defaultCRS> <gpp:AdditionalCRS>CRS:84</gpp:AdditionalCRS> <gpp:AdditionalCRS>IGNF:TERA50STEREO</gpp:AdditionalCRS> <gpp:AdditionalCRS>EPSG:2986</gpp:AdditionalCRS> <gpp:BoundingBox>132.56,-68.62,144.54,-64.03</gpp:BoundingBox> <sld:MinScaleDenominator>8531</sld:MinScaleDenominator> <sld:MaxScaleDenominator>128209039</sld:MaxScaleDenominator> <gpp:Resolution>76.437028</gpp:Resolution> <gpp:Center> <gpp:x>140.001389</gpp:x> <gpp:y>-66.66278</gpp:y> </gpp:Center> <gpp:DefaultLayers> <gpp:DefaultLayer layerId=\"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\"/> </gpp:DefaultLayers> </gpp:Territory><gpp:Territory id=\"CRZ\" name=\"CRZ\"> <gpp:defaultCRS>EPSG:3857</gpp:defaultCRS> <gpp:AdditionalCRS>CRS:84</gpp:AdditionalCRS> <gpp:AdditionalCRS>IGNF:UTM39SW84</gpp:AdditionalCRS> <gpp:AdditionalCRS>EPSG:32739</gpp:AdditionalCRS> <gpp:AdditionalCRS>IGNF:CROZ63UTM39S</gpp:AdditionalCRS> <gpp:BoundingBox>47,-48,55,-44</gpp:BoundingBox> <sld:MinScaleDenominator>34124</sld:MinScaleDenominator> <sld:MaxScaleDenominator>128209039</sld:MaxScaleDenominator> <gpp:Resolution>38.218514</gpp:Resolution> <gpp:Center> <gpp:x>51.866667</gpp:x> <gpp:y>-46.433333</gpp:y> </gpp:Center> <gpp:DefaultLayers> <gpp:DefaultLayer layerId=\"ORTHOIMAGERY.ORTHOPHOTOS$GEOPORTAIL:OGC:WMTS\"/> <gpp:DefaultLayer layerId=\"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\"/> </gpp:DefaultLayers> </gpp:Territory><gpp:Territory id=\"EUE\" name=\"EUE\">
    Voici un bout de la réponse que je ne peux pas poster entière car trop longue mais je ne comprends pas votre proposition

    J'ai modifié ma fonction d'attente de chargement des classes Geoportal et Openlayers pour mettre celle proposée dans l'exemple 'checkApiLoading'. Et j'ai ajouté l'attente de chargement de la classe Geoportal.Catalogue. Le pb reste entier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // on attend que les classes soient chargées
    if (checkApiLoading('application.init();',['OpenLayers','Geoportal','Geoportal.Catalogue'])===false) {
    return;
    }
    Le soucis c'est que lorsque j'ai l'erreur : Geoportal.Catalogue.TERRITORIES[d] is undefined, si je tape en console 'Geoportal.Catalogue.TERRITORIES['FXX'] : firebug me retourne bien un objet que je peux inspecter dans le DOM.
    On dirait donc bien que lors de l'execution de 'Geoportal.Catalogue.TERRITORIES['FXX'] par mon applicatio, cela retourne undefined mais que quelques fractions de seconde plus tard, ça retournerait qq chose.
    Réponse de DGRichard :

    Citation Envoyé par dgrichard Voir le message
    Bon, sans clef et sans site, difficile d'avancer ...

    Reste une chose, as-tu jeter un œil à ceci ?
    quand il cite "As-tu jeté un coup d'oeil à ceci ?"

    http://api.ign.fr/tech-docs-js/examp...ortalGeoExt.js

    cela ne m'a pas mis la puce à l'oreille (contrairement à gilgil semble-t-il)....une idée ?

  4. #4
    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 defaut d'URL, il faut donner tout ton code, si tu veux qu'on se penche sur ton problème...
    Les experts de l'IGN sont très forts, mais ils ne sont pas devins!

    Sinon il faudrait le GeoportalExtended.js en version décompressé
    Ici qui renvoie sur les différentes procédures dans http://depot.ign.fr/geoportail/api/d...lib/Geoportal/ . Sauf erreur de ma part, que mga_geo (ou d'autres) voudra bien me corriger...

  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
    Citation Envoyé par cmail Voir le message
    A defaut d'URL, il faut donner tout ton code, si tu veux qu'on se penche sur ton problème...
    Les experts de l'IGN sont très forts, mais ils ne sont pas devins!


    Ici qui renvoie sur les différentes procédures dans http://depot.ign.fr/geoportail/api/d...lib/Geoportal/ . Sauf erreur de ma part, que mga_geo (ou d'autres) voudra bien me corriger...
    Tout mon code, cela n'est pas possible, c'est un gros projet GMAO en C#/ASP.NET, base de données oracle, identification, différentes cartographies, etc.

    Cela marchait très bien avant la migration, donc je pense qu'il y a surtout à voir de ce côté (un contexte, un effet de bord,...). Par contre, là, c'est bien mieux avec le lien sur le GeoportalExtended.js décompressé (au passage, cela marche bien, le lien que tu cites est bon). J'ai bien la même erreur (c'est rassurant...ou pas) sauf que là, je vais pouvoir remonter le fil du bug, j'espère. Je refais le test en faisant toutes les captures pour isoler le traitement déclencheur, mais a priori, c'est dans l'initialisation (cf ligne de mon code précité)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     map = new Geoportal.Viewer.Default(idDivMap,  OpenLayers.Util.extend(options,
                                                            window.gGEOPORTALRIGHTSMANAGEMENT===undefined? {'apiKey':CleIGN} : gGEOPORTALRIGHTSMANAGEMENT)
            );
    Je reviens avec plus de détails...

    P.S. : Encore merci pour le lien, cmail

  6. #6
    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
    Voilà les captures d'erreur sous Firebug :



    ce qui nous mène là :



    Je suis donc aller mettre un point d'arrêt à la ligne spécifiée (l. 153) et en remontant pas à pas, je suis revenu à l'appel initial déclenchant le plantage :



    ce qui montre bien que c'est au démarrage que le plantage intervient...

    Si on revient à la deuxième capture (la fameuse ligne 153 dans le fichier catalogue.js), Geoportal.Catalogue.TERRITORIES[territory] vaut UNDEFINED donc a fortiori le defaultCRS n'est pas connu...
    alors qu'après, lors d'un deuxième passage, on a bien la valeur ['EPSG:3857'] pour defaultCRS et une taille de 1 pour le tableau...et cela passe.

    Cela fait penser à un problème de latence ou d'initialisation différée, non ?...Quand est-ce que cette initialisation intervient ? Doit-on la faire nous-mêmes ?

  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
    Je vais surement dire encore une bêtise...
    Mais il me semble que la valeur initiale de territory est "FXX"... Es-tu alors obligé de le paramétrer dans l'initialisation de ton viewer?

  8. #8
    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 cmail Voir le message
    Je vais surement dire encore une bêtise...
    Mais il me semble que la valeur initiale de territory est "FXX"... Es-tu alors obligé de le paramétrer dans l'initialisation de ton viewer?
    Amusant, j'ai eu la même idée...et j'ai déjà essayé hier... mais rien ne change...

  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
    bon bah alors, l'erreur se situe bien sur mon appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     map = new Geoportal.Viewer.Default(IdDivMap, Options);
    si je protège mon code par un try catch et que j'appelle en boucle avec un timeout...cela fait toujours la même chose...et ma variable map reste à null

    Par contre, sans être un pro du javascript, je suis un peu perplexe et quelque peu choqué par le code javascript du catalogue.js, du moins sur la partie incriminée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(Geoportal.Catalogue.TERRITORIES[territory]==undefined) {
                if (this.map) {
                    territory= this.map.territory || 'FXX';
                } else {
                    territory= 'FXX';
                }
            }
    Là, le test sur "Geoportal.Catalogue.TERRITORIES[territory]" est effectué
    mais joyeusement on continue (même si la variable est UNDEFINED) par :

    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
    for (var i= 0, len= Geoportal.Catalogue.TERRITORIES[territory].defaultCRS.length; i<len; i++) {
                var proj= Geoportal.Catalogue.TERRITORIES[territory].defaultCRS[i];
                if (typeof(proj)=='string') {
                    Geoportal.Catalogue.TERRITORIES[territory].defaultCRS[i]= new OpenLayers.Projection(
                        proj,
                        {
                            domainOfValidity: OpenLayers.Bounds.fromArray(Geoportal.Catalogue.TERRITORIES[territory].geobbox)
                        });
                }
            }
            if (typeof(Geoportal.Catalogue.TERRITORIES[territory].geoCRS[0])=='string') {
                Geoportal.Catalogue.TERRITORIES[territory].geoCRS[0]= new OpenLayers.Projection(
                    Geoportal.Catalogue.TERRITORIES[territory].geoCRS[0],
                    {
                        domainOfValidity: OpenLayers.Bounds.fromArray(Geoportal.Catalogue.TERRITORIES[territory].geobbox)
                    });
            }
    Forcément, si Geoportal.Catalogue.TERRITORIES[territory] = UNDEFINED alors l'appel à "Geoportal.Catalogue.TERRITORIES[territory].defaultCRS.length" plantera...

    Le problème, c'est que je récupère une variable à NULL pour map si je protège le code par un try catch...mais cela n'empêche pas l'API IGN de repasser dans ce code (plus tard ?) avec cette fois-ci la variable bien initialisée (et la carte s'affiche avec les couches voulues)...mais du coup, de mon côté, je n'ai pas mon traitement postérieur qui est de charger mon KML sur la carte (puisque ma variable map est à NULL suite à mon appel).

  10. #10
    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
    Après deux bonnes journées dans le nouveau bain de l'API IGN Geoportail...et quelques kilomètres de lignes en pas à pas dans Firebug

    je vois un peu plus clair dans l'ordonnancement du traitement de chargement de l'API (du moins, je pense)

    En gros, je crois que c'est pensé pour un affichage "bateau" de page HTML (sans être péjoratif) avec un traitement qui vérifie la clef IGN, prépare la config associée au contrat et redonne la main sur un callback une fois cela terminé
    via le onContractsComplete comme dans l'exemple suivant :

    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
    <script type="text/javascript">
       
    
        function loadAPI() 
        {
            if (IsCartoIGN==true)
    	    {
    	        // on attend que les classes soient chargées
    	        if (checkApiLoading('loadAPI();', ["OpenLayers", "Geoportal", "Geoportal.Viewer", "Geoportal.Viewer.Default", "Geoportal.Viewer.Standard", "Geoportal.Catalogue"]) === false)
                {
                    return;
                }
    
                // on charge la configuration de la clef API, puis on charge l'application
                Geoportal.GeoRMHandler.getConfig([CleIGN], null, null, {
                    onContractsComplete: initGeoportalMapPret
                });
            }
        }
        
        window.onload= loadAPI;
        </script>
    Dans ce cas, tout est prêt à partir de l'exécution de "initGeoportalMapPret" et là, je ne rencontrerais pas le problème de bug que je cite (malgré tout, je trouve le code discutable car pas assez protégé, hein ).

    Mais dans mon cas, j'ai un petit souci car mon projet est un projet ASP.NET qui génère entre autres des fichiers KML contextuels et doit les afficher (j'ai donc du code C# côté serveur pour ce faire et je lance des scripts (dynamiques, i.e. créés en C#) javascript derrière pour afficher les KML, centrer, zoomer comme il faut...et cela se fait un peu en parallèle du "onload" javascript.

    Ainsi, sur beaucoup de pages de l'application, dans les versions antérieures de l'api, je générais des scripts javascripts du genre de celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ChaineCommandeScriptAppel.Append("PnlMessageGeoportail.Show();");
    ChaineCommandeScriptAppel.Append(String.Format("EnleveCoucheKML('{0}');", AncienGlobalTitreCoucheCourant));
    ChaineCommandeScriptAppel.Append("ReinitCarte();");
    ChaineCommandeScriptAppel.Append("initGeoportalMap();");
    if (GlobalIsCasAucuneArmoireEtTropDeFoyers == false)
    {
            ChaineCommandeScriptAppel.Append(String.Format("loadKML('{0}','{1}','{2}','{3}','{4}');", GlobalTitreCoucheCourant, GlobalKMLIGNCourant, GlobaleLongitudeCourante, GlobaleLatitudeCourante, GlobalNiveauCoucheCourant));
    }
    ChaineCommandeScriptAppel.Append(String.Format("CentrerSurCoordonnees('{0}','{1}','{2}','{3}','{4}');", GlobalLongitudeMinCourant, GlobalLatitudeMinCourant, GlobalLongitudeMaxCourant, GlobalLatitudeMaxCourant, GlobalNiveauCoucheCourant));
    ChaineCommandeScriptAppel.Append("DeplaceGeoportalMap();");
    ChaineCommandeScriptAppel.Append("DoEffacerMessage();");
    Là se situe le problème, avec le onload javascript cité ci-dessus...car le onContractComplete n'a pas encore eu lieu au moment où la séquence javascript censée initialiser la carte, charger le kml,...est déclenchée.

    Comment puis-je "attendre" artificiellement la fin du chargement de la configuration (qui semble bien bien long ) afin que ces instructions soient déclenchées ?

    J'avais bien pensé utiliser un flag que je basculerais dans initGeoportalMapPret (cf onContractComplete) puis un setTimeout dans MON initialisation :

    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
    var IsContratPret = false;
    
    function initGeoportalMapPret()
    {
        IsContratPret = true;
    }
                       
    function initGeoportalMap(aNumTentative) 
    {
        if (aNumTentative==null)
        {
            aNumTentative = 1;
        }
        if ((IsContratPret == false) && (aNumTentative <= LimiteTentativeInitIGN))
        {
            window.setTimeout(function(){		                         
    		                         initGeoportalMap(aNumTentative++);
    	                            },300);
    	      return;                    
        }
        
        IsContratPret = false;
        var IsAffichageAFaire = true;
        if (typeof(IsCartoIGNAffichee) == 'function')
        {
            IsAffichageAFaire = IsCartoIGNAffichee();
        }
        ObjetDIV = window.document.getElementById('GeoportalMapDiv');    
        if ((ObjetDIV) && (IsAffichageAFaire == true))
        {
            if (map == null) 
            {
                if (typeof(geoportalLoadmap) == 'function')
                {
                        geoportalLoadmap("GeoportalMapDiv", "normal", SystemeReferenceCoordonneesIGN);                
                }
            }
         ...
         }
       ...
    }

    mais le problème, c'est que la séquence de lancement javascript ne serait pas interrompue pendant cela...cela déclencherait le chargement KML alors que la carte ne serait pas encore prête....donc ne ferait rien...c'est toute la séquence javascript qui doit attendre et garder le même ordonnancement d'exécution.

    Faudrait que j'utilise pratiquement à chaque fois un flag sur le traitement précédent afin de déclencher le suivant (et le différer en attendant)...méchante usine à gaz !!!

    Faudrait dans l'idéal que je n'ai qu'un traitement Javascript lancé du C#, mais avec une liste plus importante de paramètres afin de dire tout ce qu'il y a à faire et là, je pourrais utiliser le setTimeout juste sur la base de la valeur du flag géré par le onContractComplete...mais bon, cela me parait pas terrible quand même et cela me génère un boulot monstre pour mettre à jour tout le projet.

    Quelqu'un verrait-il une solution "simple" à mon affaire ?

  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
    Bon bah je me suis attelé à la tâche...J'ai commencé à factoriser mes appels Javascript à partir du C# afin de regrouper l'appel d'une seule procédure Javascript qui s'appelle en différé tant que le "onContractsComplete" n'est pas déclenché...et cela passe (enfin ).

    Par contre, cela bloque un peu plus loin...a priori, dans l'interprétation du KML (dont la génération n'a pas changé par rapport à avant GRRRRRR !!! )...donc suite du feuilleton dans deux semaines, après quelques jours de repos.

  12. #12
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Bonjour,

    effectivement la séquence d'initialisation de la carte est la suivante :

    1. création
    2. appel du service, dit d'autoconfiguration pour récupérer les paramètres d'initialisation et les droits relatifs à la clef de contrat
    3. initialisation de la carte avec le résultat du service d'autoconfiguration
    4. l'utilisateur a la main pour interagir avec la carte.
    (Les séquences 2 et 3 sont asynchrones.)

    Pour ton problème de lancement de chaînes de commandes javascript en parallèle du chargement de la page, ne peux tu pas simplement générer ton code dans une fonction au lieu de l'exécuter directement et ce serait la fonction initGeoportalMapPret qui appellerait cette fonction (donc lorsque la carte serait prête) ?

    En gros, si je reprends ton code exemple, cela donnerait (en gras, ce qui est rajouté) :

    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
    ChaineCommandeScriptAppel.Append("function mesCommandesALancer() {") ;
    ChaineCommandeScriptAppel.Append("PnlMessageGeoportail.Show();");
    ChaineCommandeScriptAppel.Append(String.Format("EnleveCoucheKML('{0}');", AncienGlobalTitreCoucheCourant));
    ChaineCommandeScriptAppel.Append("ReinitCarte();");
    ChaineCommandeScriptAppel.Append("initGeoportalMap();");
    if (GlobalIsCasAucuneArmoireEtTropDeFoyers == false)
    {
       ChaineCommandeScriptAppel.Append(String.Format("loadKML('{0}','{1}','{2}','{3}','{4}');", 
      GlobalTitreCoucheCourant, GlobalKMLIGNCourant, GlobaleLongitudeCourante,
      GlobaleLatitudeCourante, GlobalNiveauCoucheCourant));
    }
    ChaineCommandeScriptAppel.Append(String.Format("CentrerSurCoordonnees('{0}','{1}','{2}','{3}','{4}');", GlobalLongitudeMinCourant, GlobalLatitudeMinCourant, GlobalLongitudeMaxCourant, GlobalLatitudeMaxCourant, GlobalNiveauCoucheCourant));
    ChaineCommandeScriptAppel.Append("DeplaceGeoportalMap();");
    ChaineCommandeScriptAppel.Append("DoEffacerMessage();");
    ChaineCommandeScriptAppel.Append("}") ;
    
    et du coup, tu n'aurais plus qu'à gérer l'attente que ta fonction soit définie dans la fonction initGeoportalMapPret :

    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
    function initGeoportalMapPret()
    {
        initGeoportalMap() ;
    }
                       
    function initGeoportalMap() 
    {
        if (!mesCommandesALancer)
        {
            window.setTimeout(function(){		                         
    		                         initGeoportalMap();
    	                            },300);
    	      return;                    
        }
        // ici, ma fonction est definie, je peux l'appeler :
        mesCommandesALancer() ;
    }
    Au passage, si tu trouves le temps d'initialisation trop long, tu peux jouer dessus en chargeant les données d'autoconfiguration en local et non plus depuis un service distant, comme indiqué ici :

    http://www.developpez.net/forums/d12...g/#post7013176

  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
    Bonjour,

    après deux semaines d'absence, je reviens sur le sujet pour continuer où le problème en était :

    Citation Envoyé par gcebelieu Voir le message
    Pour ton problème de lancement de chaînes de commandes javascript en parallèle du chargement de la page, ne peux tu pas simplement générer ton code dans une fonction au lieu de l'exécuter directement et ce serait la fonction initGeoportalMapPret qui appellerait cette fonction (donc lorsque la carte serait prête) ?

    En gros, si je reprends ton code exemple, cela donnerait (en gras, ce qui est rajouté) :

    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
    ChaineCommandeScriptAppel.Append("function mesCommandesALancer() {") ;
    ChaineCommandeScriptAppel.Append("PnlMessageGeoportail.Show();");
    ChaineCommandeScriptAppel.Append(String.Format("EnleveCoucheKML('{0}');", AncienGlobalTitreCoucheCourant));
    ChaineCommandeScriptAppel.Append("ReinitCarte();");
    ChaineCommandeScriptAppel.Append("initGeoportalMap();");
    if (GlobalIsCasAucuneArmoireEtTropDeFoyers == false)
    {
       ChaineCommandeScriptAppel.Append(String.Format("loadKML('{0}','{1}','{2}','{3}','{4}');", 
      GlobalTitreCoucheCourant, GlobalKMLIGNCourant, GlobaleLongitudeCourante,
      GlobaleLatitudeCourante, GlobalNiveauCoucheCourant));
    }
    ChaineCommandeScriptAppel.Append(String.Format("CentrerSurCoordonnees('{0}','{1}','{2}','{3}','{4}');", GlobalLongitudeMinCourant, GlobalLatitudeMinCourant, GlobalLongitudeMaxCourant, GlobalLatitudeMaxCourant, GlobalNiveauCoucheCourant));
    ChaineCommandeScriptAppel.Append("DeplaceGeoportalMap();");
    ChaineCommandeScriptAppel.Append("DoEffacerMessage();");
    ChaineCommandeScriptAppel.Append("}") ;
    
    et du coup, tu n'aurais plus qu'à gérer l'attente que ta fonction soit définie dans la fonction initGeoportalMapPret :

    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
    function initGeoportalMapPret()
    {
        initGeoportalMap() ;
    }
                       
    function initGeoportalMap() 
    {
        if (!mesCommandesALancer)
        {
            window.setTimeout(function(){		                         
    		                         initGeoportalMap();
    	                            },300);
    	      return;                    
        }
        // ici, ma fonction est definie, je peux l'appeler :
        mesCommandesALancer() ;
    }
    En gros, c'est ce que j'ai fait avant mes congés (cf dernier message du 02/08/2013) et cela passait...par contre, cela plantait plus loin au moment de l'affichage du KML.

    Citation Envoyé par gcebelieu Voir le message
    Au passage, si tu trouves le temps d'initialisation trop long, tu peux jouer dessus en chargeant les données d'autoconfiguration en local et non plus depuis un service distant, comme indiqué ici :

    http://www.developpez.net/forums/d12...g/#post7013176
    Par contre, cela m'intéresse (pour après, si c'est lent)...mais comment fait-on pour enregistrer en local le fichier JSON en question ?

    En dehors de cela, ma problématique avant les congés n'était plus le lancement de l'API mais l'affichage d'une couche KML. Je précise que ma génération de KML n'a pas changé par rapport à avant (cela marche depuis les versions bêta) et par ailleurs, cela s'affiche très bien (encore) avec google maps sur un autre onglet du même projet...je fais une seule génération contextuelle de KML qui est utilisé par les deux API : IGN et google maps suivant les cartographies souhaitées à l'écran.

    Y a-t-il eu des contraintes/spécifications qui ont changé côté IGN par rapport au KML ?

    En attendant quelques infos supplémentaires ou une réaction sur le forum, je vais essayer d'en savoir plus sur le pourquoi de l'erreur...je vais ressortir firebug de sa boite...Finies les vacances

    Je peux fournir un KML exemple si besoin...pour qui serait intéressé à chercher.

  14. #14
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Citation Envoyé par Unusual Voir le message
    Y a-t-il eu des contraintes/spécifications qui ont changé côté IGN par rapport au KML ?

    En attendant quelques infos supplémentaires ou une réaction sur le forum, je vais essayer d'en savoir plus sur le pourquoi de l'erreur...je vais ressortir firebug de sa boite...Finies les vacances

    Je peux fournir un KML exemple si besoin...pour qui serait intéressé à chercher.
    Je veux bien un KML exemple.

    Sinon, as tu essayé d'en charger un à l'aide de la page :

    http://api.ign.fr/tech-docs-js/examp...ortalLike.html

    (ajouter une couche vectorielle...)

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 442
    Points : 502
    Points
    502
    Par défaut Pourquoi utiliser deux API?
    Il serait peut-être plus simple d'injecter les web services du Géoportail dans l'API Google qui fonctionne déjà dans ton projet, voir http://www.jacquet80.eu/blog/post/20...oogle-Maps-API .

  16. #16
    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 gcebelieu Voir le message
    Je veux bien un KML exemple.

    Sinon, as tu essayé d'en charger un à l'aide de la page :

    http://api.ign.fr/tech-docs-js/examp...ortalLike.html

    (ajouter une couche vectorielle...)
    Pas de pb pour fournir un KML exemple :
    http://195.7.104.235/ecddev/kml/test.kml

    J'ai testé sur le lien que tu as donné...avec l'URL, cela n'affiche rien...en choisissant le fichier sur disque, cela affiche bien la couche KML (sauf que les étiquettes sont dédoublées et décalées pour les doubles...cela semble apparaître / se répéter lors d'un pan ou d'un changement de zoom).

    Pour ce qui est de mon erreur en local sur le chargement du KML, j'ai fait une capture sous firebug :

    ErreurIGN_KML.png

  17. #17
    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 EricLebottier Voir le message
    Il serait peut-être plus simple d'injecter les web services du Géoportail dans l'API Google qui fonctionne déjà dans ton projet, voir http://www.jacquet80.eu/blog/post/20...oogle-Maps-API .
    Historiquement, le projet web (qui est le prolongement d'une solution de GMAO client/serveur + tablet + pocket PC) a commencé avec la bêta de l'API IGN et API Gmap V2...et je pense qu'à l'époque, on ne pouvait pas faire trop autrement que d'utiliser les deux (pour autant que je m'en souvienne ).

    L'intérêt de l'IGN (pour certains de nos clients), c'est avant tout la couche cadastrale, alors on a fait cohabiter les affichages google map et IGN sur des onglets différents (et ceux-ci ne sont présents que s'ils ont décidé d'utiliser telle ou telle cartographie - ou les deux).

    C'est sur qu'avec le chargement des deux api, c'est un peu long parfois (et encore plus si les KML concernés sont volumineux) alors certains ont choisi leur représentation préférée, d'autres préfèrent avoir les deux sous la main

    Evidemment, les API ont évolué, la donne a aussi changé avec les tarifications IGN (on ne peut pas répercuter une facturation trop importante à nos clients si ceux-ci font trop joujou avec la cartographie et on doit bien faire attention à ne pas faire de requêtes inutiles)...Ta piste peut effectivement être intéressante, je vais y jeter un coup d'oeil...Cela pourrait éviter de faire évoluer l'utilisation des deux API qui est un peu coûteuse en temps (tests pour chacune avec différents OS, différents navigateurs pour chaque nouvelle version d'API...sans parler parfois des régressions )

  18. #18
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Citation Envoyé par Unusual Voir le message
    Pas de pb pour fournir un KML exemple :
    http://195.7.104.235/ecddev/kml/test.kml

    J'ai testé sur le lien que tu as donné...avec l'URL, cela n'affiche rien...
    C'est normal : la page essaye de charger une ressource sur un nom de domaine différent du sien, c'est un problème de cross-domain classique.


    en choisissant le fichier sur disque, cela affiche bien la couche KML (sauf que les étiquettes sont dédoublées et décalées pour les doubles...cela semble apparaître / se répéter lors d'un pan ou d'un changement de zoom).
    En effet, je constate des libellés roses et verts décalés portant parfois le même nom et avec un affichage assez aléatoire...

    Par rapport au comportement ancien, quelle version de l'API utilisais-tu ?
    En effet, les différentes versions de l'API reposent sur différentes versions d'OpenLayers (cf. page : http://api.ign.fr/tech-docs-js/fr/historical.html) qui est le composant logiciel sur lequel elle est bâtie et qui gère notamment le chargement et l'affichage du KML. Une piste serait de voir les évolutions d'OpenLayers par rapport à la gestion du KML (normalement dans le bons sens...)


    Pour ce qui est de mon erreur en local sur le chargement du KML, j'ai fait une capture sous firebug
    C'est assez étrange, le parser plante lors de l'analyse d'une balise qui n'existe pas, mais c'est normalement géré... Aussi, cela ressemble à une erreur Firefox (NS_ERROR_FAILURE). As-tu le même problème sous chrome ou un autre navigateur ?

  19. #19
    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 EricLebottier Voir le message
    Il serait peut-être plus simple d'injecter les web services du Géoportail dans l'API Google qui fonctionne déjà dans ton projet, voir http://www.jacquet80.eu/blog/post/20...oogle-Maps-API .
    J'ai fait un test avec les appels suivants (en reprenant la fonction dans le site du lien que tu m'as donné) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mapGoogle.mapTypes.set('IGN', makeIGNMapType("GEOGRAPHICALGRIDSYSTEMS.MAPS", "IGN", 18));
    mapGoogle.mapTypes.set('Cadastre', makeIGNMapType("CADASTRALPARCELS.PARCELS", "Cadastre", 21));
    Pour la première couche, tout se passe bien, mais pour le cadastre, je n'ai rien qu'un fond gris. A priori, tout dépend du niveau de zoom car la couche IGN se comporte de la même façon au niveau de zoom 19 (j'ai des erreurs 404 not found en poussant le zoom de 18 à 19, i.e. si :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mapGoogle.mapTypes.set('IGN', makeIGNMapType("GEOGRAPHICALGRIDSYSTEMS.MAPS", "IGN", 19));
    et que je zoome en niveau 19

    A voir c'est autre chose à tout niveau pour la couche cadastrale : 400 bad request

    D'où ma question :
    - Est-ce qu'on peut obtenir la couche cadastrale de cette façon et si oui, à quel niveau et comment ?

    En tout cas, merci EricLebottier pour le lien et pour la piste : c'est vraiment intéressant !

    Question subsidiaire :

    - Pour les appels de ces tuiles, faut-il utiliser comme sur le lien

    "http://gpp3-wxs.ign.fr/"+ CleIGN + "/geoportail/wmts"

    ou alors

    "https://wxs.ign.fr/"+ CleIGN + "/geoportail/wmts"

    comme j'ai pu le voir conseiller sur un autre topic ?

    J'ai essayé les deux et les deux font pareil (du moins pour l'instant...mais s'il y en a une plus pérenne, je préfère le savoir tout de suite...

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 442
    Points : 502
    Points
    502
    Par défaut
    Les adresses en gpp3-wxs.ign.fr étaient pour la période transitoire de l'été 2012 et elles devraient disparaitre.
    => Il vaut mieux utiliser les adresses en wxs.ign.fr/CLE/geoportail/

    La couche cadastrale est comme les autres couches WMTS, il ne devrait pas y avoir de différence de programmation. Par contre, toutes les couches n'ont pas des données à tous les niveaux de zoom, par exemple, les images aériennes existent jusqu’au niveau 20 (ou 19 sur les départements sans HR) alors que les cartes ne sont visibles que jusqu'au niveau 18.
    Je crois que la couche cadastrale existe jusqu’au niveau 19.
    [Tous les niveaux de zoom que j'indique devrait être validé par un expert technique de l'IGN]

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

Discussions similaires

  1. [Débutant] migration de code sources sharepoint 2007 vers 2010
    Par roubi dans le forum SharePoint
    Réponses: 7
    Dernier message: 13/09/2012, 09h03
  2. Migration de Code
    Par pottiez dans le forum C++Builder
    Réponses: 0
    Dernier message: 29/07/2008, 14h29
  3. Migrations de codes MFC de Visual 6.0 vers Visual studio 2005
    Par jojo le boss dans le forum VC++ .NET
    Réponses: 12
    Dernier message: 06/08/2006, 11h47
  4. [C#] Migration de code VB - Fonction CreateObject
    Par Agoye dans le forum ASP.NET
    Réponses: 2
    Dernier message: 26/06/2006, 15h23
  5. Migration de code EasyPHP 1.6=>1.8
    Par lolodelp dans le forum Administration
    Réponses: 2
    Dernier message: 04/05/2006, 11h06

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