Pages: 1
- Sujet précédent - [OpenLayers+GoogleMaps] Problème de positionnement des tuiles - Sujet suivant
#1 Fri 20 February 2009 16:23
- tflorac
- Juste Inscrit !
- Date d'inscription: 20 Feb 2009
- Messages: 9
[OpenLayers+GoogleMaps] Problème de positionnement des tuiles
Bonjour,
Je commence aujourd'hui l'apprentissage de OpenLayers et je fais face à quelques problèmes.
Mon cas d'étude est pour l'instant simple : étant donné un point de coordonnées connues, je veux positionner une carte GoogleMaps sur ce point avec différentes couches, ainsi qu'un marqueur pour situer le point en question.
Globalement tout est OK, mais j'ai un problème d'affichage des tuiles : certaines parties de la carte situées à droite et/ou en bas de la zone d'affichage ne sont pas affichées (Cf copie d'écran jointe). Mais :
- en fonction des déplacements et/ou des changements de zoom effectués, c'est parfois mieux, parfois pire !
- en suivant un peu ce qui se passe avec Firebug (sous Firefox), il s'avère qu'il y a bien des tuiles de chargées, mais ce sont celles qui sont situées en haut et à gauche et donc en dehors de la zone d'affichage !!
À toutes fins utiles, je mets ci-dessous le code que j'utilise, principalement construit sur la base des exemples disponibles sur le site d'OpenLayers :
Code:
function calculateOffset(size) { return new OpenLayers.Pixel(-(size.w/2), -size.h); } $(document).ready(function() { OpenLayers.ImgPath = '/@@/onf.skin.fo.openlayers.img/'; var map = new OpenLayers.Map('location_map', { projection: new OpenLayers.Projection('EPSG:4326') }); var gphy = new OpenLayers.Layer.Google('Google Physical', { type: G_PHYSICAL_MAP, numZoomLevels: 20 }); var gmap = new OpenLayers.Layer.Google('Google Streets', { numZoomLevels: 20 }); var ghyb = new OpenLayers.Layer.Google('Google Hybrid', { type: G_HYBRID_MAP, numZoomLevels: 20 }); var gsat = new OpenLayers.Layer.Google('Google Satellite', { type: G_SATELLITE_MAP, numZoomLevels: 20 }); map.addLayers([gmap, gphy, ghyb, gsat]); position = new OpenLayers.LonLat(1.8442, 48.6262); var markers = new OpenLayers.Layer.Markers('Marqueurs'); map.addLayer(markers); size = new OpenLayers.Size(10,17); icon = new OpenLayers.Icon('/@@/onf.skin.fo.openlayers.img/marker-aqua.png', size, null, calculateOffset); markers.addMarker(new OpenLayers.Marker(position, icon)); map.addControl(new OpenLayers.Control.LayerSwitcher()); map.setCenter(position, 14); });
P.S. : les coordonnées sont ici indiquées "en dur", mais dans les faits elles sont gérées dynamiquement dans mon CMS.
Merci de vos conseils,
Thierry
Hors ligne
#2 Fri 20 February 2009 18:08
- tflorac
- Juste Inscrit !
- Date d'inscription: 20 Feb 2009
- Messages: 9
Re: [OpenLayers+GoogleMaps] Problème de positionnement des tuiles
Petit complément après quelques tests complémentaires :
- lors de l'affichage initial, la première couche s'affiche avec des tuiles "tronquées" (Cf copie d'écran). Mais dès qu'on effectue un zoom ou un déplacement, tout rentre dans l'ordre pour cette couche
- si on demande ensuite l'affichage d'une autre couche, les tuiles de ces couches restent "tronquées", même après déplacement ou zoom
- si on demande à afficher une autre couche sans avoir zoomé/déplacé la première, on voit que les différentes couches sont décalées, voire à des niveaux de zooms variables !!
En espérant que ces quelques compléments vous aideront à m'en dire plus... :-\
Hors ligne
#3 Tue 24 February 2009 15:24
Re: [OpenLayers+GoogleMaps] Problème de positionnement des tuiles
Bonjour tflorac,
Votre code est relativement simple et semble valide.
La seule chose qui m'étonne un peu est de voir le numZoomLevels défini au niveau des objets Layer. Normalement, c'est une propriété définie au niveau de l'objet Map (en toute logique).
Ces numZoomLevel m'étonnent d'autant plus que vous utilisez des fonds de plan Google. Il me semble que l'utilisation des Layers Google impose tout le paramétrage des niveaux de zoom (nombre de niveau et valeurs d'échelle). Je n'ai pas l'habitude d'utiliser les layers Google, il est possible que je me trompe mais ça peut valoir le coup d'essayer.
Cordialement.
Hors ligne
#4 Tue 24 February 2009 17:56
- tflorac
- Juste Inscrit !
- Date d'inscription: 20 Feb 2009
- Messages: 9
Re: [OpenLayers+GoogleMaps] Problème de positionnement des tuiles
Bonjour,
Après avoir creusé encore la question et fait moulte tests, il semblerait que le problème ne vienne pas d'OpenLayers lui-même, mais d'un autre script chargé dans la même page (avant OpenLayers) et qui perturbe le fonctionnement de ce dernier.
Cet autre script est basé sur jQuery (lequel fonctionne par ailleurs très bien, étant chargé avant comme indiqué dans les docs) ; je vais encore creuser la question, et je reviendrai vers vous dès que j'aurai une solution à ce problème pour vous faire part de mon expérience...
Merci encore,
Thierry
Hors ligne
#5 Tue 24 February 2009 18:03
- René-Luc D'Hont
- Participant assidu
- Date d'inscription: 7 Nov 2006
- Messages: 328
- Site web
Re: [OpenLayers+GoogleMaps] Problème de positionnement des tuiles
Bonjour tflorac,
Tout d'abord pourquoi ne pas travailler en EPSG:900913, système de projection de Google Maps, au lie de l'EPSG:4326.
Regarder le code de l'exemple spherical-mercator.
Par contre si vous faîtes cela vous devrez transformer vos coordonnées en ESPG:4326 vers EPSG:900913. Par exemple avec le code suivant :
Code:
position.tranform(map.displayProjection,map.projection);
Hors ligne
#6 Wed 25 February 2009 10:10
- tflorac
- Juste Inscrit !
- Date d'inscription: 20 Feb 2009
- Messages: 9
Re: [OpenLayers+GoogleMaps] Problème de positionnement des tuiles
Bonjour,
Pour ce qui est des paramètres "numZoomLevels", c'est effectivement le fruit de différents tests que j'ai pu faire pour essayer d'arranger les choses, sans succès de ce point de vue.
Pour ce qui est du système de coordonnées, je dois superposer au fond de carte des marqueurs correspondant à des informations dont les coordonnées (relevées via GPS) sont stockées en WGS84, j'ai donc imaginé qu'il serait plus simple de travailler intégralement dans ce système de projection.
Pour le reste, je pense avoir trouvé l'origine de mes problèmes : la carte est en effet affichée dans une page qui présente plusieurs onglets, chaque onglet correspondant à une balise DIV ; pour permettre un minimum d'accessibilité ainsi que l'affichage d'un minimum d'informations dans le cas où le JavaScript est désactivé, certains de ces onglets sont masqués en JavaScript, dont celui affichant la carte (en sachant bien que la carte ne s'affichera pas sans javascript, mais celle-ci n'est pas le contenu principal de la page). Et voilà le problème : si le DIV contenant la carte est masqué avant l'affichage de celle-ci, la carte ne s'initialise pas correctement ; par contre, si l'on initialise la carte avant de masquer le DIV, tout rentre dans l'ordre !!
Je ne saurais dire toutefois si ce comportement est normal...
Cordialement,
Thierry
Hors ligne
#7 Wed 25 February 2009 10:16
Re: [OpenLayers+GoogleMaps] Problème de positionnement des tuiles
Thierry,
J'ai le même problème pas de solution si ce n'est d'afficher la carte en premier.
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
Pages: 1
- Sujet précédent - [OpenLayers+GoogleMaps] Problème de positionnement des tuiles - Sujet suivant