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 :

Rendre invisible un seul point d'une couche


Sujet :

IGN API Géoportail

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut Rendre invisible un seul point d'une couche
    Bonjour à tous

    J'essaie de bidouiller quelques interactions entre ma carte et le reste de la page. J'ai donc une couche composée de quelques points (OpenLayers.Geometry.Point).
    J'ai affecté à cette couche un style (du coup, une image pour tous ces points) via un feature.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var proj_src = new OpenLayers.Projection("IGNF:RGF93G");
    var proj_tgt = new OpenLayers.Projection("IGNF:GEOPORTALFXX");
    p_1.transform(proj_src,proj_tgt);
    
    var style = {"externalGraphic" : "icon.gif", "graphicWidth" : 10, "graphicHeight" : 10, "graphicOpacity" : 1};
    
    var feature = new OpenLayers.Feature.Vector(p_1, {}, style);
    feature.state = 'Insert';
    feature.content = "contenu";
    feature.fid = "points__id";
    
    pointsLayer.addFeatures(feature);
    J'arrive bien à cacher et afficher tous les points de ma couche, avec setVisibility. Mais lorsqu'on veut cacher un point seulement (lors du clic sur un case à cocher par exemple), comment s'y prendre ?
    J'ai essayé de changer le style de seulement ce point mais je n'y arrive pas

    Des idées ?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Oups, désolé, après avoir avoir passer des heures à chercher, notamment du côté de Rule, je me suis rendu compte que j'avais fait une faute de frappe dans le nom de mon point ...

    Pour info, juste créer un style temporaire suffi, même pas besoin de redraw

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var styleTemp = {"display" : "none"};
            
            var featTemp = new OpenLayers.Feature.Vector(p_1, {}, styleTemp);
            pointsLayer.addFeatures([featTemp]);

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Grrrrrrrr, j'avais pas fait gaffe mais lorsque j'affiche des points avec cette technique (recréer le feature de chaque point en AJAX) et je me déplace dans la carte, mes points disparaissent au retour du clic !!!

    Par contre, si je zoome, ils restent en place. Si je décoche et que je recoche la checkbox faisant apparaitre ce point, il revient bien, ce qui veut dire qu'il n'avait été effacé que "visuellement".

    Que fais le redraw de l'API pour m'effacer ainsi mes points au déplacement de la carte ?

  4. #4
    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 kiouz Voir le message
    Grrrrrrrr, j'avais pas fait gaffe mais lorsque j'affiche des points avec cette technique (recréer le feature de chaque point en AJAX) et je me déplace dans la carte, mes points disparaissent au retour du clic !!!

    Par contre, si je zoome, ils restent en place. Si je décoche et que je recoche la checkbox faisant apparaitre ce point, il revient bien, ce qui veut dire qu'il n'avait été effacé que "visuellement".

    Que fais le redraw de l'API pour m'effacer ainsi mes points au déplacement de la carte ?
    Rien de spécial ...
    Il me semble que j'ai eu à faire cela, j'ai juste modifié l'état de l'objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    feature.state= OpenLayers.State.DELETE;
    Dans ce cas là, le style par défaut d'OpenLayers ("delete") est display:none

    Peut-être est-ce la bonne piste

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Désolé, je comprends mal, juste de mettre feature.state = OpenLayers.State.DELETE; au point le rend invisible ?

    Si c'est le cas, ca ne marche absolument pas pour moi. Je ne vois pas trop comment faire

  6. #6
    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 kiouz Voir le message
    Désolé, je comprends mal, juste de mettre feature.state = OpenLayers.State.DELETE; au point le rend invisible ?

    Si c'est le cas, ca ne marche absolument pas pour moi. Je ne vois pas trop comment faire
    As-tu redessiné la couche , l'affectation ne suffit pas ...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Du genre "layer.redraw();" ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Le problème de cette technique, c'est que je génère le position de mes points en AJAX. Donc, les variables ne sont pas déclarées dans le JS de la page mais via un appel AJAX.

    Du coup, quand je tente un feature.state = OpenLayers.State.DELETE au moment où je clique sur ma checkbox, il me dit "feature is not defined" ...

    Il n'y a pas de possibilité de changer le feature en utilisant son id (car j'en ai mis un différent pour chaque point) ?

  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 kiouz Voir le message
    Le problème de cette technique, c'est que je génère le position de mes points en AJAX. Donc, les variables ne sont pas déclarées dans le JS de la page mais via un appel AJAX.

    Du coup, quand je tente un feature.state = OpenLayers.State.DELETE au moment où je clique sur ma checkbox, il me dit "feature is not defined" ...

    Il n'y a pas de possibilité de changer le feature en utilisant son id (car j'en ai mis un différent pour chaque point) ?
    Si, bien sûr, mais je ne vois pas le problème ...

  10. #10
    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 kiouz Voir le message
    Du genre "layer.redraw();" ?
    oui

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Après une série de console.log, j'ai bien vérifié que le feature.state était bien à INSERT à la création, puis lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    feature.state = OpenLayers.State.DELETE;
    layer.redraw();
    Il passe bien à "delete" mais c'est pas pour autant que le point disparait

  12. #12
    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 kiouz Voir le message
    Après une série de console.log, j'ai bien vérifié que le feature.state était bien à INSERT à la création, puis lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    feature.state = OpenLayers.State.DELETE;
    layer.redraw();
    Il passe bien à "delete" mais c'est pas pour autant que le point disparait
    Un Url ?

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    En fait, il recréait une feature à chaque clic, d'où le fait que ca change rien ...

    Par contre, en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    feature.style = "display : none";layer.redraw();'
    Il plante que sous IE, pas sous FF ou Chrome. Il m'écrit sous IE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Ligne: 111
    Caractère: 163809
    Code: 0
    Message d'erreur: Argument non valide.
    URL: http://api.ign.fr/geoportail/api/js/1.0/GeoportalExtended.js
    et sous Firebug :
    "Valeur undefined inattendue lors de l'analyse de l'attribut r."

    Sachant que j'ai la version compressée de l'API, je peux pas trop voir d'où ca peut venir

    Des idées ?

    PS : pas possible de donner une URL car c'est dans un intranet

  14. #14
    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 kiouz Voir le message
    En fait, il recréait une feature à chaque clic, d'où le fait que ca change rien ...

    Par contre, en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    feature.style = "display : none";layer.redraw();'
    Il plante que sous IE, pas sous FF ou Chrome. Il m'écrit sous IE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Ligne: 111
    Caractère: 163809
    Code: 0
    Message d'erreur: Argument non valide.
    URL: http://api.ign.fr/geoportail/api/js/1.0/GeoportalExtended.js
    et sous Firebug :
    "Valeur undefined inattendue lors de l'analyse de l'attribut r."

    Sachant que j'ai la version compressée de l'API, je peux pas trop voir d'où ca peut venir

    Des idées ?

    PS : pas possible de donner une URL car c'est dans un intranet
    Normal, style est un objet de type OpenLayers.Style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    feature.style= new OpenLayers.Style({display:none});
    layer.redraw();
    Par contre, je ne comprends toujours pas la relation entre l'application web et le serveur ...

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Merci ca fonctionne maintenant

    Au niveau de l'appli, j'ai créé des checkbox externes à la carte permettant de filtrer l'affichage des points d'une même couche suivant certains paramètres, ce qui permet à l'utilisateur d'affiner ses choix.
    Le tout en AJAX pour ne pas avoir à valider ses choix mais que ca se fasse tout seul

    En tout cas, merci pour le coup de main car j'ai beau me ballader sur le Net et sur la doc OpenLayers, j'arrive pas forcément à trouver toutes les infos qu'il me faut. La principale difficulté étant déjà de savoir ce qui est possible de faire "nativement" ou pas.
    Car naturellement, il y a autant de façon de bidouiller que de programmeur

    D'ailleurs, si tu as en stock des liens vers de bons tutos ou de bonnes docs, je suis preneur

    A bientôt

  16. #16
    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 kiouz Voir le message
    D'ailleurs, si tu as en stock des liens vers de bons tutos ou de bonnes docs, je suis preneur
    Le site le plus "complet" que j'ai eu à faire ces derniers temps est celui-là : http://geodesie.ign.fr/fiches/
    Il contient un mécanisme de sélection/désélection d'objets pour le panier, un mécanisme de page à imprimer, du WMS, du WFS, bref plein de trucs !

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Ok merci pour l'info, effectivement c'est sympa !

Discussions similaires

  1. [Novice]Rendre invisible une page au démarrage ! !
    Par _shuriken_ dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 07/04/2006, 01h10
  2. rendre invisible une texte box si elle est vide
    Par kuhnden dans le forum IHM
    Réponses: 4
    Dernier message: 09/03/2006, 02h55
  3. Réponses: 6
    Dernier message: 11/02/2005, 22h38
  4. Réponses: 10
    Dernier message: 19/05/2004, 16h44
  5. comment rendre invisible une FormStyle->fsMDIchild
    Par caluloa dans le forum C++Builder
    Réponses: 5
    Dernier message: 16/05/2003, 15h21

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