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 :

[1.0beta4]Affichage de popup


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 [1.0beta4]Affichage de popup
    Bonjour,
    Je voudrais savoir si l'affichage des popup peut se faire sans "déplacer" la carte. Je m'explique...lorsque le popup est affiché, il se centre sur la carte....et la carte se décale pour que l'élément cliqué (ayant déclenché le popup) soit en bas à gauche du popup...

    Est-il possible de changer ce comportement ? Et si oui, comment ?

  2. #2
    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 Unusual Voir le message
    Bonjour,
    Je voudrais savoir si l'affichage des popup peut se faire sans "déplacer" la carte. Je m'explique...lorsque le popup est affiché, il se centre sur la carte....et la carte se décale pour que l'élément cliqué (ayant déclenché le popup) soit en bas à gauche du popup...

    Est-il possible de changer ce comportement ? Et si oui, comment ?

    Par défault, l'API le fait ... Pour changer de comportement, il faut changer de classe de base (Geoportal.Popup.Anchored) et choisir une autre classe dans OpenLayers.Popup...
    OpenLayers:
    C'est la méthode draw() qui fait le boulot, elle appelle la méthode panIntoView() qui déplace la popup si la propriété (non documentée) panMapIfOutOfView est à true.
    Geoportal:
    La méthode draw() fait appel à panIntoView() tout le temps.

    Il va falloir donc effectuer ceci (je suppose que l'on veuille créer des popup à partir de KML/GPX) :


    1. Surcharger le callback onFeatureInsert pour qu'il n'utilise pas Geoportal.Popup.Anchored - le mieux est de tester les différents type de popup d'OpenLayers : OpenLayers.Popup.Anchored, OpenLayers.Popup.AnchoredBubble, OpenLayers.Popup.Framed et OpenLayers.Popup.FramedCloud - la page suivante donne l'apercu des possibles;
    2. Si nécessaire, jouer avec le code de la classe choisie pour avoir le comportement souhaité ...

    L'exemple WFS de l'API montre comment faire en mimiquant les popups Géoportail (déplacement au centre de l'image) avec des popup à la Google!

    Globalement, il va aussi falloir que regarder comment faciliter cela depuis l'API (par exemple en passant une propriété poup donnant la classe à utiliser à l'instar de la propriété format !-)

  3. #3
    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 Exemple de création de popup
    Voilà un exemple pris dans nos tests de développement qui utilise exclusivement OpenLayers :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
       //variable globale:
        var selectedFeature;
    
       //fonction de création de popup:
        function createPopup(feature) {
            feature.createPopup= function() {
                var popupContent= 'contenu';
                var popup= new OpenLayers.Popup.Anchored("chicken",
                                    this.geometry.getBounds().getCenterLonLat(),
                                    new OpenLayers.Size(250,150),
                                    popupContent, null, true, onPopupClose);
                this.popup= popup;
            }.bind(feature);
        }
    
        //fonction de fermeture de popup:
        //stop propagation de l'évènement
        //cache la popup
        //redessine l'objet
        //nettoyage
        //émission évènement desélection
        function onPopupClose(evt) {
            OpenLayers.Event.stop(evt);
            this.hide();
            selectedFeature.layer.drawFeature(selectedFeature, "default");
            OpenLayers.Util.removeItem(selectedFeature.layer.selectedFeatures, selectedFeature);
            selectedFeature.layer.events.triggerEvent("featureunselected", {feature: selectedFeature});
            onFeatureUnselect(selectedFeature);
        }// onPopupClose
    
        //callback de l'évènement "featureselected" :
        function onFeatureSelect(feature) {
            selectedFeature= feature;
            if (!selectedFeature.popup) {
                selectedFeature.createPopup();
            }
            viewer.getMap().addPopup(selectedFeature.popup);
        }// onFeatureSelect
    
        //callback de l'évènement "featureunselected" :
        function onFeatureUnselect(feature) {
            viewer.getMap().removePopup(feature.popup);
            feature.popup.destroy();
            feature.popup= null;
        }// onFeatureUnselect
    
        //création de la couche KML/GPX :
        var l= MAP.getMap().addLayer(
            new OpenLayers.Layer.Vector(
                "nom de la couche",
                {
                    projection: MAP.getMap().getProjection(),
                    onFeatureInsert: createPopup,
                    format: OpenLayers.Format.KML,
                    formatOptions:{
                        internalProjection: MAP.getMap().getProjection()
                    }
                }
            )
        );
    Voilà, globalement l'API fait tout celà et même plus ...


    J'ai modifié le code de l'API (en développement) pour permettre au développeur de passer une option qui existe dans OpenLayers.Popup : panMapIfOutOfView.

    Aujourd'hui, l'API ne considère pas cette option. Son comportement est de toujours re-centrer la popup (comme si panMapIfOutOfView était toujours à true).
    Après la prochaine mise-à-jour, rien ne changera en apparance ... sauf si le développeur passe panMapIfOutOfView:false à la création de la couche!

  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
    La prochaine mise à jour est prévue pour quand?

  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
    En fait, c'est ce que je fais déjà avec :

    OpenLayers.Popup.FramedCloud

    mais cela "m'oblige" à utiliser l'API étendue juste à cause de cette fonctionnalité...c'est dommage, non

  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 cmail Voir le message
    La prochaine mise à jour est prévue pour quand?
    Quand j'aurai suffisamment de correctifs. Pour l'instant, je n'ai que :

    - changement du curseur au dessus des pictos (KML/PGX);
    - intégration d'OpenLayers.Format.KML 2.8 dans l'API (ExtendedData);
    - possibilité de changer le comportement par défaut des popups.


    Et à moins d'un boggue bloquant (comme celui des changements d'affichage en coordonnées cartésiennes), je préfère accumuler les patches que de pousser en production tous les jours ...

    Au mieux, je ferai une mise à jour avant le 15 juin, au pire à la fin juin.

  7. #7
    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 Unusual Voir le message
    En fait, c'est ce que je fais déjà avec :

    OpenLayers.Popup.FramedCloud

    mais cela "m'oblige" à utiliser l'API étendue juste à cause de cette fonctionnalité...c'est dommage, non
    Si je comprends bien : "API standard doit intégrer tous les types de Popup Openlayers ?"

    Bon, pourquoi pô !

    Une précision: l'API standard embarque les OpenLayers.Popup.Anchored*,elle embarquera donc toutes les popups au prochain correctif.

  8. #8
    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
    C'est aussi une question qui me préoccupe énormément. En effet, le déplacement de la carte à l'affichage d'un popup n'est vraiment pas idéal pour une consultation rapide. Dans ce domaine, mon idéal serait:
    1/ La carte ne bouge pas.
    2/ Le popup s'affiche centré sur la zone carto du géoportail. Eventuellement, avoir la possibilité de l'ancrer à des coordonnées fixes du géoportail (par exemple le coin haut gauche du popup à une abscisse de 50 px et une ordonnée de 70 px par rapport au coin haut gauche du géoportail.

  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
    Dans ce cas, l'exemple WFS donne toutes les informations nécessaires.

    En le modifiant légèrement, les popups s'ouvrent systèmatiquement au centre de la carte :

    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 overRiver(feature) {
        if (feature) {
            if (!feature.popup) {
                var me= viewer.getMap().getExtent();
                var ll= me.getCenterLonLat();
                feature.popup= new OpenLayers.Popup.FramedCloud(
                    "chicken",
                    ll,
                    null,
                    "contenu",
                    null,
                    false);
            }
            if (feature.popup) {
                viewer.getMap().addPopup(feature.popup,true);
            }
        }
    }
    Toutes les variations sont ensuites possibles ...

  10. #10
    Membre averti Avatar de Zébulon-21
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Points : 315
    Points
    315
    Par défaut
    Citation Envoyé par dgrichard Voir le message
    Si je comprends bien : "API standard doit intégrer tous les types de Popup Openlayers ?"
    Bon, pourquoi pô !
    Une précision: l'API standard embarque les OpenLayers.Popup.Anchored*,elle embarquera donc toutes les popups au prochain correctif.
    J'ai l'impression que OpenLayers.Popup.AnchoredBubble ne fonctionne qu'avec API étendu (version 1.0).

    Me trompe-je ?

  11. #11
    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 Zébulon-21 Voir le message
    J'ai l'impression que OpenLayers.Popup.AnchoredBubble ne fonctionne qu'avec API étendu (version 1.0).

    Me trompe-je ?
    Oui
    Si tu cherches Anchored dans Geoportal.js, tu trouves son code

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

Discussions similaires

  1. affichage intempestif popup
    Par miriade dans le forum Balisage (X)HTML et validation W3C
    Réponses: 14
    Dernier message: 27/11/2007, 13h01
  2. Validator avec affichage dans popup
    Par trihanhcie dans le forum Framework .NET
    Réponses: 1
    Dernier message: 16/11/2007, 14h19
  3. Suppression du mode d'affichage en popup
    Par shexna dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 27/10/2006, 20h51
  4. [HTML] Suppression du mode d'affichage en popup
    Par shexna dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 26/10/2006, 15h18
  5. Réponses: 11
    Dernier message: 24/10/2005, 17h02

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