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 :

Disparition du marqueur avec OpenLayers + Carte IGN


Sujet :

IGN API Géoportail

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Disparition du marqueur avec OpenLayers + Carte IGN
    Bonjour,

    J'ai un problème en utilisant l'API OpenLayers et la carte IGN : mon marqueur disparait ...
    Si je ne met qu'une couche "OpenStreet Map", le marqueur se met au bon en droit, mais dès que je switch de baselayer sur la carte IGN mon marqueur disparait ... et ne revient seulement que si je rebascule vers OpenStreet Map.

    Cela doit être un problème de projection, mais j'avoue que la je suis perdu.

    Aussi, je dois être indépendant de la projection de la carte, l'utilisateur doit pouvoir choisir entre une carte IGN, Google, OpenStreet Map, Un WMS ....

    Voila, merci pour vos (futures) réponses

    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
    <div id="carte-content" style="height: 650px"></div>
    
    <script src="/js/carto/OpenLayers.js"></script>
    <script src="http://api.ign.fr/geoportail/api?v=1.2-e&amp;key=XXXXXXXXXXXXXXXXXX&amp;includeEngine=false"></script>
    <script src="/js/carto/GeoportalExtended.js"></script>
    <script src="/js/carto/GeoRMHandler.js"></script>
    		
    <script>
    
    	// Nouvel objet carte, paramètre : id du div contenant la carte
    	var map = new OpenLayers.Map('carte-content');
    
    	// On ajoute des contrôles
    	map.addControl(new OpenLayers.Control.LayerSwitcher());
    
    	// On ajoute des couches
    	var couches = new Array();
    
    	couches.push(new OpenLayers.Layer.OSM());
    	
    	couches.push(
    		new OpenLayers.Layer.WMS(
    			'IGN', 
    			'http://wxs.ign.fr/geoportail/wmsc',
    			{
    				layers: 'ORTHOIMAGERY.ORTHOPHOTOS',
    				exceptions: 'text/xml',
    				tiled: true
    			},	{
    				isBaseLayer: true,
    				projection: new OpenLayers.Projection('IGNF:GEOPORTALFXX'),
    				resolutions: [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048],
    				maxExtent: new OpenLayers.Bounds(-1181626.0, 3815715.0, 2340591.0, 7071932.0),
    				GeoRM: Geoportal.GeoRMHandler.addKey(
    					gGEOPORTALRIGHTSMANAGEMENT.apiKey,
    					gGEOPORTALRIGHTSMANAGEMENT[gGEOPORTALRIGHTSMANAGEMENT.apiKey].tokenServer.url,
    					gGEOPORTALRIGHTSMANAGEMENT[gGEOPORTALRIGHTSMANAGEMENT.apiKey].tokenServer.ttl,
    					map
    				),
    				getURL: function(bounds) {
    					bounds = this.adjustBounds(bounds);
    					var imageSize = this.getImageSize();
    					var newParams = {
    						'BBOX': this.encodeBBOX ?  bounds.toBBOX() : bounds.toArray(),
    						'WIDTH': imageSize.w,
    						'HEIGHT': imageSize.h
    					};
    					newParams = OpenLayers.Util.extend(newParams, this.GeoRM.getToken());
    					var requestString = this.getFullRequestString(newParams);
    					return requestString;
    				}
    			}
    		)
    	);
    
    	// On ajoute les couches
    	map.addLayers(couches);
    
    	// Couche de marqueurs
    	var markers = new OpenLayers.Layer.Markers('Marqueurs');
    	map.addLayer(markers);
    	
    	var dimension_icon = new OpenLayers.Size(32, 32);	
    	var offset_icon = new OpenLayers.Pixel(-(dimension_icon.w/2), -dimension_icon.h);
    	var icon = new OpenLayers.Icon('/images/red-dot.png', dimension_icon, offset_icon);
    	var lonlat = new OpenLayers.LonLat(2.732931, 50.301608).transform(
    		OpenLayers.Projection.CRS84,
    		map.getProjectionObject()
    	);
    				
    	var marker = new OpenLayers.Marker(lonlat, icon);
    	markers.addMarker(marker);
    
    	map.setCenter(new OpenLayers.LonLat(2.732931, 50.301608).transform(OpenLayers.Projection.CRS84, map.getProjectionObject()), 15);
    </script>

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 128
    Points : 1 764
    Points
    1 764
    Par défaut Firebug toujours!
    Dans Firebug, onglet réseau, as-tu des échecs ?
    Typiquement, j'aimerais bien sur la projection GEOPORTALFXX !

  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
    A priori, il faudrait nettoyer ton code car je ne sais pas trop ce que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    <script src="/js/carto/OpenLayers.js"></script>
    <script src="http://api.ign.fr/geoportail/api?v=1.2-e&amp;key=XXXXXXXXXXXXXXXXXX&amp;includeEngine=false"></script>
    <script src="/js/carto/GeoportalExtended.js"></script><script src="/js/carto/GeoRMHandler.js"></script>...
    car GeoportalExtended.js contient OpenLayers.js 2.10 (compacté) ainsi que GeoRMHandler.js ...

    à priori, tout cela devrait s'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    <script  src="http://api.ign.fr/geoportail/api?v=1.2-e&amp;key=XXXXXXXXXXXXXXXXXX&amp;includeEngine=false"></script>
    <script src="/js/carto/GeoportalExtended.js"></script>  
    ...
    Ensuite, lors du changement de baselayer, la méthode suivante (propre à l'API non implémentée dans 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
        OpenLayers.Layer.Markers.prototype.changeBaseLayer= function(evt) {
            if (OpenLayers.Layer.prototype.changeBaseLayer.apply(this,arguments)===false) {
                return false;
            }
            if (!this.isBaseLayer) {
                var oldMapProj= evt.baseLayer? evt.baseLayer.getNativeProjection() : null;
                var mapProj= this.map.getProjection();
                // force re-computing resolutions
                this.addOptions({projection: mapProj.clone()});
                var v= this.getVisibility();
                if (v) {
                    this.setVisibility(false);
                }
                for (var i= 0, len= this.markers.length; i<len; i++) {
                    var m= this.markers[i];
                    m.lonlat.transform(oldMapProj,mapProj);
                }
                if (v) {
                    this.setVisibility(true);
                }
            }
            return true;
        };
    est appelée ...
    Je te conseille d'inclure ce code dans ta page, et de regarder avec Firebug si effectivement tu passes dedans

Discussions similaires

  1. affichage de cartes osm avec openlayers
    Par courdi95 dans le forum WebDev
    Réponses: 2
    Dernier message: 20/01/2019, 12h02
  2. Affichage d'une carte IGN avec le logiciel Qlik (QlikView)
    Par jj.Bonnin dans le forum IGN API Géoportail
    Réponses: 4
    Dernier message: 24/01/2015, 18h09
  3. API 1.3 avec JS : le fond de carte IGN n'apparaît plus
    Par Gérard-65 dans le forum IGN API Géoportail
    Réponses: 4
    Dernier message: 22/08/2012, 11h09
  4. créer un site avec une carte IGN simple - le B.A. BA
    Par Didier63 dans le forum IGN API Géoportail
    Réponses: 27
    Dernier message: 14/09/2011, 13h49
  5. construire 1 gateway avec 1 carte réseaux sous débian
    Par regular dans le forum Développement
    Réponses: 4
    Dernier message: 28/08/2003, 01h05

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