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 :

Clic sur GPX (Plusieurs)


Sujet :

IGN API Géoportail

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 40
    Points : 17
    Points
    17
    Par défaut Clic sur GPX (Plusieurs)
    Bonjour,

    Il me semble que j'aborde un sujet récurrent mais je n'ai pas trouvé de réponse à mon problème.

    Lien pour test : http://mazamet-montagne-noire.fr/ign/test.html

    Mon objectif :
    Afficher plusieurs GPX sur la carte et déclencher au clic une même fonction sur chacun d'entre eux sans avoir à activer/désactiver la couche ou jouer avec les niveaux de zoom.
    Bref, faire en sorte que tous les GPX ajoutés soit sur le même couche.

    Mon problème :
    Je n'arrive pas à lancer ma fonction 'clickme' sur le clic de chaque GPX.
    Des fois, même, il y n'y a qu'un clic qui marche et sur les autres le clic affiche les attributs du GPX et non le 'OK' de la fonction 'clickme'.

    J'ai documenté le code source.

    Merci !

  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 Eho47 Voir le message
    Mon problème :
    Je n'arrive pas à lancer ma fonction 'clickme' sur le clic de chaque GPX.
    Des fois, même, il y n'y a qu'un clic qui marche et sur les autres le clic affiche les attributs du GPX et non le 'OK' de la fonction 'clickme'.
    Pourrais-tu enlever les " autour des affectations des variables optionsParcours et optionsPopup (en rouge) et réactiver ce code (en désactivant les lignes 100 à 116)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
         //Les options gpx
     82  var optionsParcours = "{styleMap: style2,visibility: true,minZoomLevel: 8,maxZoomLevel: 14,panMapIfOutOfView:false }"; 
     83   
     84  //Les options popup : ajout de la fonction clickme sur le 'onSelect' 
     85  var optionsPopup= "{ onSelect: function(f){clickme();} }";
    Ceci écrit, tu as deux gestionnaires de clic par GPX qui réagissent tout les deux au ... clic (même si le second s'appelle hoverCtrl, il ne réagit qu'au clic)
    C'est le second clic qui gagne à chaque fois ... pas celui qui appelle "clickme"

    L'un des deux est en trop ou le second devrait avoir un

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    J'ai fait les modifs que tu m'as indiqué

    Avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     var optionsPopup= { hover:true,onSelect: function(f){clickme();}};
    La fonction clickme() est bien déclenchée mais sur le hover du gpx.

    Avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     var optionsPopup= { onSelect: function(f){clickme();}};
    La fonction clickme() n'est pas déclenchée, ni sur l'état hover, ni sur le clic.

  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 Eho47 Voir le message
    J'ai fait les modifs que tu m'as indiqué
    Pas toute, il reste la boucle for et une ligne non désactivée :

    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
     /*Solution d'ajout des GPX avec fonction */    
     /*
      //Les options gpx
      //var optionsParcours = "{styleMap: style2,visibility: true,minZoomLevel: 8,maxZoomLevel: 14,panMapIfOutOfView:false }";
      
      //Les options popup : ajout de la fonction clickme sur le 'onSelect'
     // var optionsPopup= "{ onSelect: function(f){clickme();} }";
     
    for(i=0;i<tab_gpx.length;i++){
    
                //nom de la variable, gpx0,gpx1,gpx2
                var id_gpx= 'gpx'+i;
                   
                //eval sert à créer dynamiquement les variables  (gpx0,gpx1,gpx2)
                eval( "var gpx" + i +" = viewer.getMap().addLayer('GPX', '"+ id_gpx +"', '/ign/datas/gpx/" + tab_gpx[i] + "',optionsParcours,optionsPopup)" );    
                
            
                    
            
         }//fin for
     */
    Citation Envoyé par Eho47 Voir le message
    Avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     var optionsPopup= { hover:true,onSelect: function(f){clickme();}};
    La fonction clickme() est bien déclenchée mais sur le hover du gpx.
    Normal, tu as activé hover à true
    Par contre, il faudrait passer le paramètre f à la fonction clickme():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var optionsPopup= {hover:true,onSelect: function(f){clickme(f);}};
    Citation Envoyé par Eho47 Voir le message
    Avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     var optionsPopup= { onSelect: function(f){clickme();}};
    La fonction clickme() n'est pas déclenchée, ni sur l'état hover, ni sur le clic.
    Je pense qu'il faudrait vraiment désactiver la boucle d'abord pour investiguer ensuite ...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    J'avais déjà fait des tests en désactivant la boucle mais sans succès.

    J'ai appliqué tes derniers conseils, sans succès.

    La fonction clickme() ne se lance toujours pas !

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 130
    Points : 1 765
    Points
    1 765
    Par défaut
    J'ai dénaturé un peu le code: http://atlasnw.free.fr/geoportail/ex...t_mazamet.html
    mais à priori le clic sur toutes les couches fonctionne!
    J'ai lourdement simplifié les gpx car 1,6Mo, c'est beaucoup...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par mga_geo Voir le message
    J'ai dénaturé un peu le code: http://atlasnw.free.fr/geoportail/ex...t_mazamet.html
    mais à priori le clic sur toutes les couches fonctionne!
    J'ai lourdement simplifié les gpx car 1,6Mo, c'est beaucoup...

    Merci beaucoup mga_geo !

    J'ai repris ton bout de code et j'ai finalisé mon script. Les GPX sont ajoutés via un tableau et une boucle 'for'. J'ai donc bien un ajout dynamique avec le clic sur chaque GPX.

    Pour ce qui souhaite voir le code complet, le voici :
    Penser à remplacer la clé par la votre et à modifier le tableau qui contient le chemin vers les GPX.

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"><!-- coding: utf-8 -->
      <head>
        <title>Sélection sur plusieurs couches</title>			
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    
        
        <script type="text/javascript" src="http://api.ign.fr/geoportail/api?v=1.0-e&amp;key=YOUR_KEY&amp;instance=viewer&amp;includeEngine=false&amp;"></script>
        
        <script type="text/javascript" src="http://api.ign.fr/geoportail/api/js/1.0/GeoportalExtended.js"></script>
        
        <script type="text/javascript">
        <!--
    	//
    	// le debug sous firefox avec firebug
    	if (typeof console != "object") {
    	  var console = {
    		'log': function() {}
    	  };
    	}
    	//
    	
    	
    	/* Variables */
    	viewer = null;
    	map = null;
    	var style2;
    		
    	/* tableau de 3 GPX à ajouter à la carte*/
    	var tab_gpx=['3/circuit_pas_des_betes25_09_2010_allege.gpx','2/rando_st_denis18072010.gpx','1/rando_albine12092010_allege.gpx'];
    
    
    
    	function initGeoportalMap() {
    	
    		  geoportalLoadviewer("viewerDiv", "normal");
    		  if (!viewer) {
    			console.log('new.instance.failed');
    			return;
    		  }
      
    		map = viewer.getMap();
    	  
    		map.addControl(new OpenLayers.Control.LoadingPanel());
    	  
    		viewer.addGeoportalLayers(['GEOGRAPHICALGRIDSYSTEMS.MAPS:WMSC']);
    
    
    		//définitions du style 2
    		style2 = new OpenLayers.StyleMap({
    		"default": new OpenLayers.Style({
    		  strokeColor: '#0000ff',
    		  strokeWidth: 3
    		}),
    		"select": new OpenLayers.Style({
    		  strokeColor: '#00ff00',
    		  strokeWidth: 3
    		}),
    		"multi": new OpenLayers.Style({
    		  strokeColor: '#ff0000',
    		  strokeWidth: 10
    		})
    	  });	
      
    
    	   //J'ajoute les GPX, je passe mon tableau à la fonction
    	   add_gpx(tab_gpx);
    
    }
    
    
    
    
    /* Fonction qui ajoute les GPX avec un tableau de GPX passé en param)*/
    function add_gpx(tab_gpx){
    
      var montableau='';
      var total=tab_gpx.length;
      
     
     /*Solution d'ajout des GPX avec boucle for */	
     
      //Les options gpx
      var optionsParcours = {styleMap: style2,visibility: true,minZoomLevel: 8,maxZoomLevel: 14,panMapIfOutOfView:false };
      
      //Les options popup : ajout de la fonction clickme sur le 'onSelect'
      var optionsPopup= { onSelect: function(f){clickme(f);} };
     
    	for(i=0;i<tab_gpx.length;i++){
    
    			//nom de la variable, gpx0,gpx1,gpx2
    			var id_gpx= 'gpx'+i;
    			   
    		   // eval sert à créer dynamiquement les variables  (gpx0,gpx1,gpx2)
    			eval( "var gpx" + i +" = viewer.getMap().addLayer('GPX', '"+ id_gpx +"', '/ign/datas/gpx/" + tab_gpx[i] + "',optionsParcours,optionsPopup)" );	
    
     	 }
    
      	//j'attache la fonction clic sur les 3 GPX
      	attache_click(gpx0,gpx1,gpx2);
    
    }
    
    
    
    /* Fonction qui sert à faire un select Feature sur plusieurs couches */
    function attache_click(gpx0,gpx1,gpx2){
    
       var selectControl = new	OpenLayers.Control.SelectFeature([gpx0, gpx1, gpx2], {
    		onSelect: clickme
    	});
    	
      viewer.getMap().addControl(selectControl);
      selectControl.activate();
      viewer.getMap().setCenterAtLonLat(2.375736, 43.498586, 10);	
    }
    
    
    /* Fonction qui devrait être appelée sur le clic de chaque GPX*/
    function clickme(f) {
    	
    	   //console.log('ici');
    	   alert("ok1");
           if (f) {
    
                alert("ok2");
                //this.unselect(f);
            }
    }
    
    
    </script>
    
      </head>
      <body onload="initGeoportalMap();">
        <div id="viewerDiv" style="width:98%;height:95%;"></div>
    
      </body>
    </html>

  8. #8
    Membre du Club
    Géomatique appliquée à la gestion routière
    Inscrit en
    Janvier 2011
    Messages
    51
    Détails du profil
    Informations professionnelles :
    Activité : Géomatique appliquée à la gestion routière
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2011
    Messages : 51
    Points : 46
    Points
    46
    Par défaut Clic activé par défaut
    Est-ce qu'il serait possible que le comportement par défaut de l'api inclue l'activation du clic sur tous les gpx ou kml de la carte ?

  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 hm7845 Voir le message
    Est-ce qu'il serait possible que le comportement par défaut de l'api inclue l'activation du clic sur tous les gpx ou kml de la carte ?
    Par défaut, c'est le cas pour chaque GPX/KML/OSM/... pris individuellement

    Il est par contre impossible de le faire pour tous à la fois car c'est à la création du contrôleur que l'on associe les couches GPX/KML/OSM/... Il faudrait donc qu'elles soient toutes présentes et qu'à un moment, on lui dise de les contrôler ... c'est quasi de la magie

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

Discussions similaires

  1. Une même procedure pour un clic sur plusieurs images
    Par steph41200 dans le forum Débuter
    Réponses: 8
    Dernier message: 02/07/2012, 18h26
  2. Réponses: 2
    Dernier message: 27/06/2012, 11h25
  3. affichage d'une trace gpx par un clic sur un POI
    Par bauschr dans le forum IGN API Géoportail
    Réponses: 5
    Dernier message: 05/08/2011, 13h24
  4. Clic sur balise "li" à plusieurs niveaux
    Par filou2931 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 04/03/2011, 10h33
  5. [STRUTS] plusieurs clic sur un bouton
    Par jehlg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 27/03/2006, 16h02

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