banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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

gilux
Juste Inscrit !
Lieu: Marseille
Date d'inscription: 5 Jun 2007
Messages: 6
Site web

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.


Gilles Bassière - Développeur Web/SIG
http://gbassiere.free.fr/

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

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [OpenLayers+GoogleMaps] Problème de positionnement des tuiles

Thierry,

J'ai le même problème wink 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

 

Pied de page des forums

Powered by FluxBB