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 :

Choix dynamiques des couches et des propriétés de celles-ci


Sujet :

IGN API Géoportail

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 886
    Points : 374
    Points
    374
    Par défaut Choix dynamiques des couches et des propriétés de celles-ci
    Bonjour
    Voila le problème :
    Dans une page WEB, mes utilisateurs peuvent choisir les couches IGN qu'ils veulent pouvoir afficher sur les cartes. Pour cela, ils peuvent indiquer deux choix : Affichage et affiché.

    Nom : I1.fw.png
Affichages : 207
Taille : 378,1 Ko

    Il en résulte qu'à chaque demande de carte, je commence par construire dynamiquement la liste des couches en tenant compte des statuts Affichable et Affiché.

    J'obtiens donc une chaine qui contient par exemple :

    new ol.layer.GeoportalWMTS({layer: "PROTECTEDAREAS.APB",olParams: {opacity: 0.7,visible:true}}), new ol.layer.GeoportalWMTS({layer: "PROTECTEDAREAS.CEN",olParams: {opacity: 0.7,visible:true}}), new ol.layer.GeoportalWMTS({layer: "PROTECTEDAREAS.CDL",olParams: {opacity: 0.7,visible:true}}), new ol.layer.GeoportalWMTS({layer: "PROTECTEDAREAS.PN",olParams: {opacity: 0.7,visible:true}}), new ol.layer.GeoportalWMTS({layer: "PROTECTEDAREAS.PNM",olParams: {opacity: 0.7,visible:true}}), new ol.layer.GeoportalWMTS({layer: "PROTECTEDAREAS.PNR",olParams: {opacity: 0.7,visible:true}}), new ol.layer.GeoportalWMTS({layer: "PROTECTEDAREAS.RB",olParams: {opacity: 0.7,visible:true}}), new ol.layer.GeoportalWMTS({layer: "PROTECTEDAREAS.BIOS",olParams: {opacity: 0.7,visible:true}}), new ol.layer.GeoportalWMTS({layer: "PROTECTEDAREAS.RNCF",olParams: {opacity: 0.7,visible:true}}), new ol.layer.GeoportalWMTS({layer: "PROTECTEDAREAS.RNC",olParams: {opacity: 0.7,visible:true}}), new ol.layer.GeoportalWMTS({layer: "PROTECTEDAREAS.RN",olParams: {opacity: 0.7,visible:true}}), new ol.layer.GeoportalWMTS({layer: "PROTECTEDAREAS.SIC",olParams: {opacity: 0.7,visible:true}}), new ol.layer.GeoportalWMTS({layer: "PROTECTEDAREAS.ZPS",olParams: {opacity: 0.7,visible:true}}), new ol.layer.GeoportalWMTS({layer: "PROTECTEDAREAS.RAMSAR",olParams: {opacity: 0.7,visible:true}}), new ol.layer.GeoportalWMTS({layer: "ORTHOIMAGERY.ORTHOPHOTOS",olParams: {visible:false}}), new ol.layer.GeoportalWMTS({layer: "GEOGRAPHICALGRIDSYSTEMS.MAPS",olParams: {opacity: 0.5,visible:true}}), new ol.layer.GeoportalWMTS({layer: "ADMINISTRATIVEUNITS.BOUNDARIES",olParams: {visible:true}})
    Puis je charge un objet allLayers avec l'instruction suivante :

    allLayers=eval("["+ma_chaine_de_layers+"]");
    Il en résulte que les choix d'affichage sont reflétés dans la carte et que dans le gestionnaire de couches, les noms des couches apparaissent et l'opacy et la visible sont correctement interprétés.

    La où ça se corse, c'est que j'aimerais proposer aux utilisateurs le choix d'ajouter la couche OpenStreetMap.

    Ainsi, si j'ajoute

    allLayers=eval("["+ma_chaine_de_layers+", new ol.layer.Tile({source: new ol.source.OSM(visible = false,opacity = 0.5)})"+"]");
    La couche OpenStreet map est affiché mais son nom apparait en tant que 21 (alors que pour les autres couches, les noms sont correctes) et l'opacité et la visibilité ne sont pas effectives.
    Nom : I2.fw.png
Affichages : 179
Taille : 559,9 Ko

    Par contre, si au lieu d'ajouter les paramètres de la couche OpenStreet "au cul" de ma chaine dynamique, je passe par un traditionnel

    var osmLyr = new ol.layer.Tile({
    source: new ol.source.OSM(visible = false,
    opacity = 0.5),

    });

    allLayers.push(osmLyr);

    allLayerSwitcher=[];

    allLayerSwitcher.push({
    layer: osmLyr,
    config: {
    title: "OpenStreet Map",
    description: "OpenStreet Map",
    visible:false,
    opacity:0.5
    }
    })
    Le nom de la couche OpenSteet Map est affiché mais la visibilité et l'opacité ne sont pas rendus correctement.

    Voila, si vous lisez cette conclusion, il me reste de l'espoir !

    Notez que la solution chaine dynamique a ma préférence.

  2. #2
    Membre du Club
    Homme Profil pro
    Archéologue
    Inscrit en
    Novembre 2017
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Archéologue

    Informations forums :
    Inscription : Novembre 2017
    Messages : 67
    Points : 57
    Points
    57
    Par défaut
    salut,
    essaie
    new ol.layer.Tile({source: new ol.source.OSM(),visible: false,opacity: 0.5})
    les parametres visible et opacity relevant du layer et non de la source.
    Et l'attribution de la valeur se fait avec ":" comme dans le css.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 886
    Points : 374
    Points
    374
    Par défaut
    Au lieu de faire allLayers=eval("["+ma_chaine_de_layers+"]"), ma_chaine_de_layers contenant la liste des couches voulues comme montré dans l'exposé du problème,
    je construis dynamiquement "ma_chaine_de_layers" comme suit
    "myLAYER1 = new ol.layer.GeoportalWMTS({layer: \"PROTECTEDAREAS.APB\",olParams: {opacity: 0.7,visible:true}});
    myLAYER2 = new ol.layer.GeoportalWMTS({layer: \"PROTECTEDAREAS.CEN\",olParams: {opacity: 0.7,visible:true}});
    myLAYER3 = new ol.layer.GeoportalWMTS({layer: \"PROTECTEDAREAS.CDL\",olParams: {opacity: 0.7,visible:true}});
    myLAYER4 = new ol.layer.GeoportalWMTS({layer: \"PROTECTEDAREAS.PN\",olParams: {opacity: 0.7,visible:true}});
    myLAYER5 = new ol.layer.GeoportalWMTS({layer: \"PROTECTEDAREAS.PNM\",olParams: {opacity: 0.7,visible:true}});
    myLAYER6 = new ol.layer.GeoportalWMTS({layer: \"PROTECTEDAREAS.PNR\",olParams: {opacity: 0.7,visible:true}});
    myLAYER7 = new ol.layer.GeoportalWMTS({layer: \"PROTECTEDAREAS.RB\",olParams: {opacity: 0.7,visible:true}});
    myLAYER8 = new ol.layer.GeoportalWMTS({layer: \"PROTECTEDAREAS.BIOS\",olParams: {opacity: 0.7,visible:true}});
    myLAYER9 = new ol.layer.GeoportalWMTS({layer: \"PROTECTEDAREAS.RNCF\",olParams: {opacity: 0.7,visible:true}});
    myLAYER10 = new ol.layer.GeoportalWMTS({layer: \"PROTECTEDAREAS.RNC\",olParams: {opacity: 0.7,visible:true}});
    myLAYER11 = new ol.layer.GeoportalWMTS({layer: \"PROTECTEDAREAS.RN\",olParams: {opacity: 0.7,visible:true}});
    myLAYER12 = new ol.layer.GeoportalWMTS({layer: \"PROTECTEDAREAS.SIC\",olParams: {opacity: 0.7,visible:true}});
    myLAYER13 = new ol.layer.GeoportalWMTS({layer: \"PROTECTEDAREAS.ZPS\",olParams: {opacity: 0.7,visible:true}});
    myLAYER14 = new ol.layer.GeoportalWMTS({layer: \"PROTECTEDAREAS.RAMSAR\",olParams: {opacity: 0.7,visible:true}});
    myLAYER15 = new ol.layer.GeoportalWMTS({layer: \"ORTHOIMAGERY.ORTHOPHOTOS\",olParams: {visible:false}});
    myLAYER_OSM = new ol.layer.Tile({source: new ol.source.OSM(),visible:true,opacity: 0.6,brightness: 0.2});
    myLAYER17 = new ol.layer.GeoportalWMTS({layer: \"GEOGRAPHICALGRIDSYSTEMS.MAPS\",olParams: {opacity: 0.5,visible:true}});
    myLAYER18 = new ol.layer.GeoportalWMTS({layer: \"ADMINISTRATIVEUNITS.BOUNDARIES\",olParams: {visible:true}});
    allLayers=[myLAYER1,myLAYER2,myLAYER3,myLAYER4,myLAYER5,myLAYER6,myLAYER7,myLAYER8,myLAYER9,myLAYER10,myLAYER11,myLAYER12,myLAYER13,myLAYER14,myLAYER15,myLAYER_OSM,myLAYER17,myLAYER18]"
    et je l'évalue avec


    allLayers=[];
    eval(ma_chaine_de_layers);


    allLayerSwitcher=[];

    allLayerSwitcher.push({
    layer: myLAYER_OSM,
    config: {
    title: "OpenStreet Map",
    description: "OpenStreet Map",
    visible:false,
    opacity:0.5
    }
    })
    Ce qui est surprenant/embêtant, c'est que pour que la couche OSM apparaisse dans le gestionnaire de couche avec son nom, il faut ajouter
    allLayerSwitcher=[];

    allLayerSwitcher.push({
    layer: myLAYER_OSM,
    config: {
    title: "OpenStreet Map",
    description: "OpenStreet Map",
    visible:false,
    opacity:0.5
    }
    })
    Sans cela, la couche OSM apparait sous le forme d'un numéro.

  4. #4
    Membre du Club
    Homme Profil pro
    Archéologue
    Inscrit en
    Novembre 2017
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Archéologue

    Informations forums :
    Inscription : Novembre 2017
    Messages : 67
    Points : 57
    Points
    57
    Par défaut
    Bonjour
    la couche OSM est dans la liste que tu évalues.
    alors point n'est besoin de faire un push pour la rajouter une deuxième fois.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 886
    Points : 374
    Points
    374
    Par défaut
    Si je ne push pas le layerswithcher pour osm, la couche apparait sous la forme d'un numéro dans la liste.

  6. #6
    Membre du Club
    Homme Profil pro
    Archéologue
    Inscrit en
    Novembre 2017
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Archéologue

    Informations forums :
    Inscription : Novembre 2017
    Messages : 67
    Points : 57
    Points
    57
    Par défaut
    ah oui excuses-moi
    la première fois du déclare tes couches et la seconde tu les déclarent dans le layerswitcher, moi je fais les deux toujours dans cet ordre.
    tu peux aussi les ajouter avec addLayer

    allLayerSwitcher.addLayer(myLAYER_OSM,
    {
    title : "",
    description : "", etc
    });

    Quans tu observes bien ton code, quand tu utilises la déclaration de layer propre à géoportail "GeoportalWMTS",
    dedans tu vois le paramètre layer contrairement à la couche OSM qui passe par la déclaration de lalyer propre à OL.
    Cela signifie que GeoportalWMTS déclare un layer aussi dans son switchlayer, le switchlayer n'existant pas nativement dans OL.
    C'est pourquoi tu dois déclarer toutes couches hors géoportail dans le switchlayer aussi.

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

Discussions similaires

  1. [MySQL] Requete Select avec choix dynamique des champs de condition
    Par belaggoun2000 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/02/2009, 12h30
  2. [CSS/Javascript] Changement des propriété CSS dynamiquement
    Par heladar dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 06/02/2009, 13h33
  3. Réponses: 4
    Dernier message: 02/01/2009, 19h34
  4. Pb d'accès dynamique à des propriétés
    Par Psycadi dans le forum C#
    Réponses: 4
    Dernier message: 27/05/2008, 17h45
  5. [MySQL] choix dynamique des pages
    Par luciedoudou dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/10/2007, 08h16

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