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 :

Je place mes marqueurs sur la carte, puis elle disparaissent


Sujet :

IGN API Géoportail

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 27
    Points : 18
    Points
    18
    Par défaut Je place mes marqueurs sur la carte, puis elle disparaissent
    Grâce à l'aide reçue (efficace ), j'arrive bien à placer mes marqueurs sur la carte.
    Seul "petit" ennui... lorsque je place le dernier marqueur, tous les autres disparaissent
    J'ai fait du pas à pas avec Firebug et c'est bien ça. Je vois apparaître un à un les marqueurs, j'arrive tout à la fin, le dernier marqueur est placé... et quand je laisse défiler le script alors qu'il n'y a plus aucune logique à exécuter (après la dernière boucle dans "addRandomMarker" (voir le code), tous les marqueurs sauf le dernier disparaissent. Je n'arrive pas à comprendre pourquoi. Est-ce qu'il y a un paramètre qui me manque dans la création du Viewer?
    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
                    // Rajout des paramètres à l'URL de la ligne détail
                    var lat = 5445978.139841032;
                    var lng = 172665.0948426;
                    var rad = 200;
    
                    OpenLayers.Lang.setCode('fr');
                    geoportalLoadviewer("map_canvas","normal");
                    if(viewer){
                        viewer.addGeoportalLayer('ORTHOIMAGERY.ORTHOPHOTOS:WMSC');                              // Photos aériennes
                        viewer.addGeoportalLayer('TRANSPORTNETWORKS.ROADS:WMSC', {visibility: true});           // Plans des routes
                        viewer.addGeoportalLayer('GEOGRAPHICALGRIDSYSTEMS.MAPS:WMSC', {visibility: false});     // Cartes IGN
                    }
                    // Set map at center
                    // Note, we are not using longitude/latitude but metres for the map projection
                    var lonlat= new OpenLayers.LonLat(lng, lat);
                    viewer.getMap().setCenter(lonlat,16,false,false);
    
                    // Make the tools folded
                    // onglet "couches" affiché (true=oui  false=non)
                    viewer.setLayersPanelVisibility(true);
                    // onglet "couches" développé (true=oui  false=non)
                    viewer.openLayersPanel(false);
                    // onglet "outils" affiché (true=oui  false=non)
                    viewer.setToolsPanelVisibility(true);
                    // onglet "outils" développé (true=oui  false=non)
                    viewer.openToolsPanel(false);
                    // Add marker at center
                    markers = new OpenLayers.Layer.Markers("Marqueurs");
                    markers.displayInLayerSwitcher=false;
                    viewer.getMap().addLayer(markers);
                    prepMarkers();
                    var popupClass = OpenLayers.Popup.Anchored;
                    var popupContentHTML = '<p>My test marker</p>';
                    markers.addMarker(new OpenLayers.Marker(lonlat,icons[0]));
                    for (var i = 1; i < 5; i++) {
                        addRandomMarker(lonlat, rad, i);
                    }
                }
                function prepMarkers() {
                    var size = new OpenLayers.Size(25,40);
                    var offset = new OpenLayers.Pixel(-(size.w/2), -(size.h));
                    icons[0] = new OpenLayers.Icon('http://10.156.239.229/PatrimIGN/img_maps/marker.png',size,offset);
                    for (var i = 1; i < 10; i++) {
                        icons[i] = new OpenLayers.Icon('http://10.156.239.229/PatrimIGN/img_maps/marker_'+i+'.png',size,offset);
                    }
                    return;
                }
                function addRandomMarker(lonlat, radius, i) {
                    var random_lonlat = lonlat;
                    random_lonlat.lon = random_lonlat.lon + ((Math.random() - 0.5) * radius);
                    random_lonlat.lat = random_lonlat.lat + ((Math.random() - 0.5) * radius);
                    markers.addMarker(new OpenLayers.Marker(random_lonlat,icons[i]));
                    return;
                }

  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 martink Voir le message
    Est-ce qu'il y a un paramètre qui me manque dans la création du Viewer?
    Je ne vois rien d'anormal, je vais partir de ton code et regarder ...

  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
    Citation Envoyé par dgrichard Voir le message
    Je ne vois rien d'anormal, je vais partir de ton code et regarder ...
    Vieux piège habituel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var lonlat= new OpenLayers.LonLat(lng, lat);/*1*/
    ...
    for (var i = 1; i < 5; i++) {
        addRandomMarker(lonlat, rad, i);/*2*/
    }
    ...
    function addRandomMarker(lonlat, radius, i) {
         var random_lonlat = lonlat;/*3*/
         random_lonlat.lon = random_lonlat.lon + ((Math.random() - 0.5) * radius);/*4*/
         random_lonlat.lat = random_lonlat.lat + ((Math.random() - 0.5) * radius);/*5*/
         ...
    }
    /*1/ on crée l'objet lonlat;
    /*2*/ on passe l'objet (la valeur de l'adresse de l'objet)
    /*3*/ on croit copier l'objet passé en paramètre dans une nouvelle variable, mais en fait, random_lonlat et lonlat représente maintenant le même objet
    /*4*//*5*/ on modifie l'objet => on modifie l'original

    à la fin, ils sont tous empilés
    En mode pas à pas, le débogeur empêche le rafraîchissement de la carte, jusqu'à ce que l'on arrive à la fin du traitement

    Le fix :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var lonlat= new OpenLayers.LonLat(lng, lat);/*1*/
    ...
    for (var i = 1; i < 5; i++) {
        addRandomMarker(lonlat, rad, i);/*2*/
    }
    ...
    function addRandomMarker(lonlat, radius, i) {
         var random_lonlat = lonlat.clone();/*3*/
         random_lonlat.lon = random_lonlat.lon + ((Math.random() - 0.5) * radius);/*4*/
         random_lonlat.lat = random_lonlat.lat + ((Math.random() - 0.5) * radius);/*5*/
         ...
    }
    /*3*/ on fait une copie complète de l'objet passé en paramètre (c'est un clone())

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    La vââââââââccchhhe.... Ca, c'est vraiment du vicieux
    Mais la solution proposée marche!!
    J'avais vu pour l'icône, mais pas pour la longitude/latitude
    Est-ce que cette bizarrerie est une fonction du Javascript, ou de OpenLayers?

  5. #5
    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 martink Voir le message
    Est-ce que cette bizarrerie est une fonction du Javascript, ou de OpenLayers?
    Javascript ...

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

Discussions similaires

  1. [WD19] Nombre maximum de marqueurs sur une carte google
    Par EriCstoFF dans le forum WinDev
    Réponses: 17
    Dernier message: 12/02/2017, 18h41
  2. [Google Maps] Affichage des marqueurs sur une carte à partir d'une base de donnée
    Par sigway dans le forum APIs Google
    Réponses: 16
    Dernier message: 22/10/2012, 18h49
  3. Marqueur sur la carte Google Maps
    Par tunisdroid dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 23/05/2012, 11h41
  4. [Google Maps] affichage de plusieurs marqueurs sur une carte de google maps
    Par franklin19 dans le forum APIs Google
    Réponses: 5
    Dernier message: 30/06/2011, 18h32
  5. Réponses: 4
    Dernier message: 11/06/2011, 11h20

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