Je viens de faire un test http://atlasnw.free.fr/geoportail/ex...eta5/over.html
En bas à droite, au dessus du logo de l'IGN, on a bien un petit signe +.
Mais le "popup" qui s'affiche ne contient aucune carte.
Je viens de faire un test http://atlasnw.free.fr/geoportail/ex...eta5/over.html
En bas à droite, au dessus du logo de l'IGN, on a bien un petit signe +.
Mais le "popup" qui s'affiche ne contient aucune carte.
C'est normal
Le contrôleur OverviewMap utilise une pile de couches pour afficher les données à sa création...
Si cette pile est vide (c'est ton cas), il utilise la baseLayer de la carte principale. Hors, les baseLayers de l'API sont des cartes vides qui ne servent qu'à gérer la projection et l'emprise totale de la carte
Il faudrait que tu ajoutes quelque chose comme (à vérifier cependant) :
Après il faudrait jouer sur la couche dans l'overview (la carte en Miller par exemple). Dans ce cas, il faudra tester avec d'autres options du contrôleur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 viewer.getMap().addControl(new OpenLayers.Control.OverviewMap({ layers:[viewer.getMap().getLayersByName("GEOGRAPHICALGRIDSYSTEMS.MAPS:WMSC")[0]] }));
Après modification, j'ai tout de suite une erreur:
D is undefined
http://localhost/geoportail/api/js/1...talExtended.js
Line 4289 D.div.className="olLayerDiv";\n
La couche passée n'est visiblement pas bonne (le boggue intervient dans OpenLayers.Map.addLayer()) ...
Ma proposition de codes doit donc être foireuse ...
Je rajoute à ma TODO liste![]()
Effectivement, voilà un code qui fonctionne chez moi :
Cependant, plusieurs intervention ont été nécessaire :
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 var worldMap= ((viewer.getMap().getLayersByName('GEOGRAPHICALGRIDSYSTEMS.MAPS'))[1]).clone(); worldMap.isBaseLayer= true; worldMap.opacity= worldMap.options.opacity= 1.0; var miller= worldMap.getNativeProjection().clone(); var tbx= viewer.getMap().getControlsByClass('Geoportal.Control.ToolBox')[0]; var ovDiv= OpenLayers.Util.getElement(tbx.id+'_ovmap'); ovDiv.style.display= ''; ovDiv.className= 'olControlOverviewMapContainer'; var ovmap= new OpenLayers.Control.OverviewMap({ div:ovDiv, layers:[worldMap], mapOptions:{ resolutions:worldMap.resolutions.slice(0,4), numZoomLevels:5, maxExtent:(new OpenLayers.Bounds(-180,-90,180,90)).transform(OpenLayers.Projection.CRS84,miller), minZoomLevel:0, maxZoomLevel:4, projection: miller, units: miller.getUnits() }, size: new OpenLayers.Size(72,36), maxRatio: 128 }) viewer.getMap().addControl(ovmap); ovmap.maximizeControl();
- la div tbx.id+'_ovmap' est en display:none dans la 1.0beta4/5, je l'ai passé en display:block. La classe CSS était aussi incorrecte; => le faire aussi dans le code en attendant (en rouge);
- bug dans OpenLayers, la méthode showToggle() ne teste pas le cas dedans/dehors (Cf. [1]); => là aussi, c'est dans le code de développement, mais en attendant i lfaut le rajouter à la main;
- CSS, modifications des CSS de base OpenLayers (Cf. [2]);
- il me faut encore jouer sur la valeur de maxRatio pour avoir un rendu de la carte de contexte meilleur.
[1]
[2]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 /** * Method: showToggle * Hide/Show the toggle depending on whether the control is minimized * * Parameters: * minimize - {Boolean} */ OpenLayers.Control.OverviewMap.prototype.showToggle= function(minimize) { if (!this.outsideViewport) {//IGNF this.maximizeDiv.style.display = minimize ? '' : 'none'; this.minimizeDiv.style.display = minimize ? 'none' : ''; } };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 .olControlOverviewMapContainer { float:left; position:relative; top:0px; right:0px; margin-top: 1px; border:1px solid #606060; } .olControlOverviewMapElement { padding: 0px; background-color: #99CCFF; -moz-border-radius:0px; }
Voici ce que cela donne:
http://atlasnw.free.fr/geoportail/ex...a5/over_2.html
C'est un peu trop miniature, je vais essayer de me plonger dans le code d'OpenLayers pour avoir leur positionnement/taille.
Et un grand merci pour la partie sur "miller", elle ne s'invente pas!
Sur mon grand écran, je préfère comme cela
http://atlasnw.free.fr/geoportail/ex...a5/over_3.html
Bon d'accord, je perds les logos ...
Je n'arrive pas à régler augmenter le niveau de zoom (plus de détails) dans cette fenêtre.
La carte "Over" n'est pas centrée comme la carte principale: ce n'est pas loin mais il y a un écart notable.
Je pense que c'est le même écart que celui rapporté avec la couche photo dans une autre discussion ...
Nous avons corrigé cela sur notre environnement de développement (problèmes de géoréférencement de la carte et du calcul des données NASA ...)
As-tu essayé avec un WMS mondial en WGS84 pour vérifier cela ?
- Pourrait-on nous renseigner sur les paramètres suivants:
resolutions:
numZoomLevels:
minZoomLevel:
maxZoomLevel:
minRatio:
maxRatio:
Je modifie bien leur valeur (une à une), mais je comprend très mal leur fonction précise
- Que doit faire OpenLayers.Control.OverviewMap.prototype.showToggle? Est-ce qu'elle est opérationnelle sur http://atlasnw.free.fr/geoportail/exemples_beta5/over_3.html ?
Tableau de résolutions (unité de la carte en pixel) triée par ordre décroissant. Par exemple : 0.125 signifie si l'unité de la carte est le mètre 12,5 cm par pixel.
Nombre total de niveaux de zooms sur la carte. C'est un nombre inférieur ou égal à la longueur du tableau des résolutions.
Niveau de zoom arrière minimal
Niveau de zoom avant maximal
rapport entre la résolution de la carte de situation et la carte principale à partir duquel un zoom arrière est fait sur la carte de situation
rapport entre la résolution de la carte de situation et la carte principale à partir duquel un zoom avant est fait sur la carte de situation
Cette méthode ne sert qu'à cacher/afficher la carte de situation si celle-ci sur trouve dans un contrôleur le permettant.
Dans l'exemple cité, elle ne fait rien.
Je te remercie pour ta réponse, mais cela ne m'avance pas beaucoup.... Alors, je vais reprendre mes questions d'une manière différente (en espérant que tes réponses me débloquent d'autres points.
- D'abord, j'aimerais que dans dans le cadre overview, la carte qui s'affiche soit systématiquement à un niveau zoom-2 par rapport au zoom de la carte affichée dans l'API.
- Si je reprends ta citation
Cela veut dire que tu as constaté que la méthode showToggle() de OL est à remplacer par celle que tu donnes en dessous, mais qu'il faut compléter par???bug dans OpenLayers, la méthode showToggle() ne teste pas le cas dedans/dehors (Cf. [1]); => là aussi, c'est dans le code de développement, mais en attendant i lfaut le rajouter à la main;
Seulement si je me réfère à l'exemple http://openlayers.org/dev/examples/overviewmap.html j'ai des difficultés (comme d'habitude) à cerner les lignes ouvrant au controle de l'overview...
Comme écrit OpenLayers se base sur des rapports de résolutions. Les résolutions Géoportail sont en facteur de 2. Un zoom-2 serait donc un facteur de 4 ... si tes résolutions sont les mêmes dans l'overview et la carte principale. Il suffirait alors de mettre le minRatio et le maxRation à 4. A tester bien sûr
J'ai bien compris qu'avec Google tu as des multitudes d'exemples sur lesquels d'appuyer, alors qu'avec OpenLayers et l'API Géoportail, il faut faire un effort supplémentaire de formation, mais de nouveau il faut le faire ! L'exemple que tu cites montre deux utilisations des cartes de contexte. La seconde ne fonctionnant que très moyennementLe code est néanmoins clair car structuré et commenté (en anglais certes, mais il existe des outils en ligne pour cela
). Il suppose néanmoins que tu regardes la documentation développeur pour comprendre le rôle des options.
Je te réponds rapidement:
C'est aussi mon avis... Ou alors quelque chose m'échappe...La seconde ne fonctionnant que très moyennement
Je suis d'accord avec toi, mais tu me renvoies sur cette url http://dev.openlayers.org/docs/files...iewMap-js.html alors que je regardais jusqu'à présent celle-ci http://dev.openlayers.org/releases/O...erviewMap.size beaucoup moins bien renseigné (et pourtant plus récente non?)... J'essayerai de faire gaffe pour la prochaine fois.Il suppose néanmoins que tu regardes la documentation développeur pour comprendre le rôle des options.
Merci pour ton réacheminement
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager