Bienvenue! Inscrivez-vous et rejoignez notre communauté :)
  • Login:

Bienvenue sur Forum SIG - Systèmes d'Information Géographique et Géomatique.

Bienvenue sur le forumSIG. S'il s'agit de votre première visite, assurez vous de faire une recherche préalable dans les FAQ SIG. Vous devez vous inscrire avant de pouvoir poster.

Affichage des résultats 1 à 4 sur 4
  1. #1

    Date d'inscription
    mars 2009
    Localisation
    Arlon
    Organisme
    Université de Liège
    Messages
    18

    Par défaut Non Résolu : [OpenLayers] Projection de points avec fond Google Maps: Points & PopUp décalés

    Bonjour,

    Ca fait des heures que je cherche une solution à mon problème, en vain!

    Je souhaite juste ajouter des points (par OpenLayers.Layer.Vector) à une carte avec fond Google. J'ai bien mis ma carte en projection Spherical Mercator (EPSG:900913), j'ai essayé de transformer mes points (entrés en EPSG:4326) mais j'ai toujours un problème!

    Mes points s'affichent bien près de l'endroit voulu, mais avec un léger décalage. Lorsque je zoom/dézomme ou que je me déplace sur l'axe N-S, les points changent de position.

    Jusque là, ça ressemble à un bête problème de proj, mais ce qui est super bizzare, c'est que les PopUps qui doivent s'afficher sur les points, eux, se mettent rigoureusement aux bons endroits, à n'importe quelle échelle.

    En gros, mes points ne s'affichent pas correctement, alors que les PopUp associé à ces points, oui!

    J'ai essayé plusieurs trucs, comme transformer les coord des points de EPSG4326 à EPSG900913, mais à ce moment les points ne s'affichent plus du tout, à n'importe quelle échelle.

    Je fournis mon code (qui fonctionne en stand-alone):

    Code:
     <html xmlns="http://www.w3.org/1999/xhtml"> 
      <head> 
        <link rel="stylesheet" href="http://openlayers.org/dev/theme/default/style.css" type="text/css" />  
        <link rel="stylesheet" href="http://openlayers.org/dev/examples/style.css" type="text/css" /> 
        <title>Wallonie with GoogleMaps</title> 
        <script src='http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAACxUxJ46tcIiZKWG81HlNYBQNmDPi4Y89dW251X5Bl4Z1--Eg2BTkAwr63SeUaRI4wI8RwX7LgtHN0g'></script> 
        <script src="http://openlayers.org/api/OpenLayers.js"></script>  
        <script type="text/javascript"> 
        // Declaration des variables 
        var map, gbase, gsatellite, ghyb, points, selectControl, selectedFeature;
        var proj = new OpenLayers.Projection("EPSG:4326");
         var bounds = new OpenLayers.Bounds(6.190,50.517,6.205,50.535);
        bounds.transform(proj, map.getProjectionObject());
    
        var options = { 
            projection: new OpenLayers.Projection("EPSG:900913"),
            displayProjection: new OpenLayers.Projection("EPSG:4326"),
            units: "m",
            numZoomLevels: 18,
            maxResolution: 156543.0339,
            maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508.34) 
            };
    
        function onPopupClose(evt) {
                selectControl.unselect(selectedFeature);
            }
            function onFeatureSelect(feature) {
                selectedFeature = feature;
                popup = new OpenLayers.Popup.FramedCloud("chicken", 
                                         feature.geometry.getBounds().getCenterLonLat(),
                                         null,
                          "<div" + feature.id +"></div>",
                                         null, true, onPopupClose);
                  popup.setBackgroundColor("red");
            popup.setBorder("10px");
              feature.popup = popup;
                map.addPopup(popup);
            }
    
            function onFeatureUnselect(feature) {
                map.removePopup(feature.popup);
                feature.popup.destroy();
                feature.popup = null;
            }   
     
        function init() { 
                map = new OpenLayers.Map('map',options); 
             // Add google layers 
             gbase = new OpenLayers.Layer.Google( "Google Physical", {type: G_PHYSICAL_MAP}, {'sphericalMercator': true} ); 
                gsatellite = new OpenLayers.Layer.Google( "Google Satellite" , {type: G_SATELLITE_MAP}, {'sphericalMercator': true} ); 
                ghyb = new OpenLayers.Layer.Google( "Google Hybrid", {type: G_HYBRID_MAP},  {'sphericalMercator': true} );         
    
            map.addLayers([gbase, gsatellite, ghyb]);
    
            // Add Bornes Frontières Geometry
            var Bornes = new Array();
            
            Bornes[0] = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(6.20475,50.52167));
            Bornes[1] = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(6.20440,50.52148));        
            //Bornes[0] = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(6.20475,50.52167).transform(new OpenLayers.Projection("EPSG:4326"),new OpenLayers.Projection("EPSG:900913")));
            //Bornes[1] = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(6.20440,50.52148).transform(new OpenLayers.Projection("EPSG:4326"),new OpenLayers.Projection("EPSG:900913")));
    
                points = new OpenLayers.Layer.Vector("Infos", {projection: new OpenLayers.Projection("EPSG:4326")});
            points.addFeatures(Bornes);
            
            map.addLayer(points);
     
            // Ajout des Controls 
            map.addControl(new OpenLayers.Control.LayerSwitcher()); 
            map.addControl(new OpenLayers.Control.ScaleLine({div:document.getElementById("scale")})); 
            map.addControl(new OpenLayers.Control.MousePosition({div:document.getElementById("mouseposition")})); 
    
                selectControl = new OpenLayers.Control.SelectFeature(points,{onSelect: onFeatureSelect, onUnselect: onFeatureUnselect});
                map.addControl(selectControl);
            selectControl.activate();
     
               map.zoomToExtent(bounds);
         }       
     
        </script> 
      </head> 
        <body onload="init()"> 
          <h4 id="title">Wallonie with GoogleMaps</h4> 
          <div> Carte dynamique OpenLayers</div> 
          <div style="width:100%; height:80%" id="map"></div> 
          <div align="right" id="mouseposition"></div> 
          <div align="right" id="scale"> </div> 
      </body> 
    </html>
    Un autre truc étrange, si je change les coord de mes points pour les afficher à l'Equateur (lat=0), tout fonctionne parfaitement!

    Merci bcp pour toute aide, je vous tiendrai informé si j'arrive à qqch de mieux de mon coté!

    Ju

  2. #2

    Date d'inscription
    mars 2009
    Localisation
    Arlon
    Organisme
    Université de Liège
    Messages
    18

    Par défaut

    Salut!

    J'ai eu la réponse sur la mailing list d'OL.

    Il faut simplement changer:
    gbase = new OpenLayers.Layer.Google( "Google Physical", {type: G_PHYSICAL_MAP}, {'sphericalMercator': true} );


    en:

    gbase = new OpenLayers.Layer.Google( "Google Physical", {type: G_PHYSICAL_MAP, 'sphericalMercator': true} );

    Il faut alors bien définir la projection de la carte en EPSG900913 et transformer les données si on les a rentrés en WGS84 (EPSG4326) (comme j'avais fait)

    Ca fait 2 semaines que j'étais bloqué sur ce bete truc! Je vois pas le role de ces "{ }"??

    Julien

  3. #3
    Admin' Annuaire
    Date d'inscription
    septembre 2004
    Localisation
    Toulouse
    Emploi
    Ingé. Cartographe / Enseignant
    Organisme
    Université de Toulouse-Le Mirail
    Âge
    41
    Messages
    3 889

    Par défaut

    Merci pour le retour. Si je comprend bien c'est un problème de syntaxe de rédaction des paramètres, les accolades étant là pour fournir un tableau de type KVP (key-value pair) en valuer à un paramètre. Votre première syntaxe envoyait deux paramètres (en plus du nom du layer) là où il n'en faut qu'un.
    The larger the island of knowledge, the longer the shoreline of wonder. Ralph W. Sockman

  4. #4

    Date d'inscription
    août 2010
    Localisation
    Maroc
    Emploi
    Etudiante
    Messages
    5

    Par défaut Re : [OpenLayers] Projection de points avec fond Google Maps: Points & PopUp décalés

    Mille Merci pour le retour, vous me sauvez la vie.
    Sigway

 

 

Discussions similaires

  1. [ArcGIS 10.x] Coord DMS, les points créés sont décalés
    Par emmanuelleravaillault dans le forum Assistance Technique
    Réponses: 2
    Dernier message: 21/06/2011, 13h57
  2. [OpenLayers] [GeoExt] Décalage Kml sur fond Google Maps
    Par Arno dans le forum Assistance et Programmation
    Réponses: 0
    Dernier message: 03/03/2011, 14h27
  3. [OpenLayers] Points WFS et zoom sur fond GoogleMap
    Par AdrienL dans le forum Assistance et Programmation
    Réponses: 6
    Dernier message: 07/05/2010, 16h28
  4. [OpenLayers] Décalage fond Google Maps
    Par webiboo dans le forum Assistance et Programmation
    Réponses: 0
    Dernier message: 02/06/2009, 10h10
  5. [ArcGis 9.x] VBA : Points créés décalés
    Par firyel dans le forum Programmation
    Réponses: 0
    Dernier message: 24/07/2008, 10h08

Les tags pour cette discussion

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •