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 :

Migration V2 vers V3 : redraw d'un élément d'un KML


Sujet :

IGN API Géoportail

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 868
    Points : 371
    Points
    371
    Par défaut Migration V2 vers V3 : redraw d'un élément d'un KML
    Bonjour
    J'ai une page que affiche des mailles carrées issues de 6 KML.
    Nom : Sans titre-1.fw.png
Affichages : 287
Taille : 1 017,5 Ko
    Dans cette exemple de carte, pour plus de lisibilité, je n'affiche que les mailles 1x1km.

    L'utilisateur peut sélectionner/désélectionner des mailles, la sélection étant matérialisée par la couleur de la maille.
    S'il clique sur une maille rouge, elle devient verte, et vis versa.
    J'ai trouvé l'équivalent pour mon ancien coding, mais je bloque que l'équivalent de redraw.

    Chaque KML est ajouté avec

    var KML3 = new ol.layer.Vector({
    source: new ol.source.Vector({
    url: kml_1x1km,
    format: new ol.format.KML({
    extractStyles: true,
    showPointNames: showPointNames
    })
    })
    });
    allLayers.push(KML3);
    allLayerSwitcher.push({
    layer: KML3,
    config: {
    title: kml_1x1km_titre,
    description: kml_1x1km_titre,
    }
    })
    Le clic sur les éléments est capturé par :

    var displayFeatureInfo = function (pixel) {
    var currentZoom = map.getView().getZoom();
    var feature = map.forEachFeatureAtPixel(pixel, function (feature, layer) {
    return feature;
    });

    if (feature) {
    var f=feature;
    var att = feature.getProperties();
    styleUrl = att.styleUrl.split("#");
    maille=att.description.split("~");
    if (styleUrl[1]=="Rouge_Rouge")
    {
    att.styleUrl="#Jaune_Vert";
    feature.style = eval(maille[3]).getStyle("#Jaune_Vert",{})
    }
    else
    {
    att.styleUrl="#Rouge_Rouge";
    feature.style = eval(maille[3]).getStyleFunction("#Rouge_Rouge",{})
    }
    eval(maille[3]).redraw();
    this.unselect(feature);
    return 1;
    } else {
    return 0;
    }
    };
    Avec la V2 de l'API je faisais

    if (f) {

    maille=f.attributes.description.split("~");

    if (f.attributes.styleUrl=="#Rouge_Rouge")
    {
    f.attributes.styleUrl="#Jaune_Vert";
    f.style = eval(maille[3]).protocol.format.getStyle("#Jaune_Vert",{})
    }
    else
    {
    f.attributes.styleUrl="#Rouge_Rouge";
    f.style = eval(maille[3]).protocol.format.getStyle("#Rouge_Rouge",{})
    }
    eval(maille[3]).redraw();
    this.unselect(f);
    }

    mais je ne trouve pas l’équivalent de la fonction redraw en V3.

    Une idée ?

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 119
    Points : 1 764
    Points
    1 764

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 868
    Points : 371
    Points
    371
    Par défaut
    J'ai fais des recherches et je ne vous pas comment ça fonctionne !
    J'ai essayé feature.changed, pas d'erreur mais rien de visible.

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 868
    Points : 371
    Points
    371
    Par défaut J'ai trouvé !
    En partant du postulat que dans le KML il existe des styles nommés #wnat_0, #wnat_1, #wnat_2, #wnat_3
    et que les tous les placemarks sont liés à un de ces styles ;

    On test le style courant de l'élément cliqué (au premier clic sur un élément, on récupère le nom du style lié au placemark dans le KML).
    Fonction du suffixe du nom (on fait un split avec #),
    1 - on force le nom du styleurl avec le nom du nouveau style qui par chance, aura le même nom que celui du KML.
    2 - on affecte un nouveau style en y indiquant ses couleurs spécifiques qui par chance, aura les mêmes couleur que le style correspondant dans le KML.

    et hop !

    Dans l'exemple ci-dessous, on passera du noir au vert, du vert à l'orange, de l'orange au rouge et du rouge au noir.

    var displayFeatureInfo = function (pixel) {
    var currentZoom = map.getView().getZoom();
    var feature = map.forEachFeatureAtPixel(pixel, function (feature, layer) {
    return feature;
    });

    if (feature) {
    var f=feature;
    var myStyle=feature.getStyleFunction();
    var att = feature.getProperties();
    styleUrl = att.styleUrl.split("#");
    styleUrlFull = att.styleUrl;
    maille=att.description.split("~");


    switch (styleUrl[1])
    {
    case "wnat_3":
    feature.set('styleUrl', "#wnat_0");
    feature.setStyle(new ol.style.Style({
    stroke: new ol.style.Stroke({color: 'rgba(255,255,255,1)'}),
    fill: new ol.style.Fill({color: 'rgba(0,0,0,1)'})
    }));

    break;
    case "wnat_2":
    feature.set('styleUrl', "#wnat_3");
    feature.setStyle(new ol.style.Style({
    stroke: new ol.style.Stroke({color: 'rgba(255,255,255,1)'}),
    fill: new ol.style.Fill({color: 'rgba(255,0,0,1)'})
    }));
    break;
    case "wnat_1":
    feature.set('styleUrl', "#wnat_2");
    feature.setStyle(new ol.style.Style({
    stroke: new ol.style.Stroke({color: 'rgba(255,255,255,1)'}),
    fill: new ol.style.Fill({color: 'rgba(255,127,0,1)'})
    }));
    break;
    default:
    feature.set('styleUrl', "#wnat_1");
    feature.setStyle(new ol.style.Style({
    stroke: new ol.style.Stroke({color: 'rgba(255,255,255,1)'}),
    fill: new ol.style.Fill({color: 'rgba(0,255,0,1)'})
    }));

    break;
    }


    return 1;
    } else {
    return 0;
    }
    };

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

Discussions similaires

  1. Migration access vers DB2
    Par zeno dans le forum Migration
    Réponses: 5
    Dernier message: 13/06/2005, 14h19
  2. Migration access vers sqlserver
    Par bifus dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/02/2005, 07h58
  3. Migration Access vers Oracle
    Par Pfeffer dans le forum Migration
    Réponses: 5
    Dernier message: 23/02/2005, 09h57
  4. [Migration]java vers C
    Par chelguera dans le forum Général Java
    Réponses: 1
    Dernier message: 14/01/2005, 19h09
  5. Migration HyperFile vers SQL SERVER
    Par mathll65 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/03/2004, 09h57

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