Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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 Sun 05 May 2013 14:58

mat19
Juste Inscrit !
Date d'inscription: 28 Dec 2012
Messages: 4

Mapserveur/Openlayers/JqueryMobile (UI) : changer l'ordre des couches

Bonjour à tous,

Je suis actuellement sur un projet de SIG en ligne utilisant les technologies Mapserveur, Jquery et Openlayers.

Me basant sur le jquery Mobile disponible sur le site Openlayers (http://openlayers.org/dev/examples/mobi … ml#mappage), je souhaiterai rajouter les fonctions de déplacement de l'ordre des couches pour les Overlays seulement.

Je compte passer par différentes étapes si possible :

- Dissocier les Overlays et les Baselayers dans le code HTML pour avoir ce type de code :

<!-- Contrôle des couches -->
<div data-role="page" id="layerspage">
          <div data-role="header">
            <h1>Layers</h1>
          </div>
            <ul data-role="listview" data-inset="true" data-theme="d" data-dividertheme="c" id="baseLayers">
            </ul>
            <ul data-role="listview" data-inset="true" data-theme="d" data-dividertheme="c" id="dataLayers">
            </ul>
        </div>

- Je souhaiterais ensuite utilisé la fonction .sortable de jquery pour pointer uniquement sur les overlays (dataLayers)


$('#dataLayers').sortable({appendTo: document.body});

Si le code marchait, je devrais pouvoir déplacer mes couches dans le menu gestion de couche sans que ça ait un impact sur la carte.

- Construire un code javascript pour que justement le changement d'ordre des couches ait un impact sur la carte.

Ayant pu utiliser GeoExt et Mapquery, je me suis finalement orienté sur le jquery mobile. Cette tâche est possible à faire vu, ce qui a été développé pour Mapquery.

Notamment avec cette partie du code :

   ulElement.sortable({
            axis:'y',

            update: function(event, ui) {
                var layerNodes = ui.item.siblings().andSelf();
                var num = layerNodes.length-1;
                layerNodes.each(function(i) {
                    var layer = $(this).data('layer');
                    var pos = num-i;
                    var label = $('span.label', this);
                    var icon = label.children();
                    layer.position(pos);
                    label.text(layer.label)
                        .prepend(icon);
                });
            }

Etant développeur novice (j'ai jamais construit un code à partir de rien), mes questions sont les suivantes :

- Est-il possible de dissocier les baselayers et les overlays dans le layersSwitch sans supprimer la partie baselayers ? Pouvoir les rendre indépendant pour choisir le overlays pour ma fonction .sortable.

J'avais essayé ce code sans réel conviction :

map.addControl(new OpenLayers.Control.LayerSwitcher({'baseLayersDiv': document.getElementById('baseLayers'), 'dataLayersDiv': document.getElementById('dataLayers')}));

- Connaissez-vous d'autres exemples que Mapquery ou projet qui ont demandé cette fonctionnalité et qui n'utilisent pas GeoExt sur lequel je peux m'appuyer ?

- Des éléments dans ma démarche vous paraissent-ils inappropriés pour les résultats voulus.

Le résultat que j'ai actuellement : je peux déplacer tous les items y compris les titres et les couches sans que cela n'ait aucun impact sur la carte.
Je voudrais restreindre ce résultat aux overlays et que cela ait un impact sur la carte.

Je pense que ce type de demande que ne doit pas être isolé, aussi je suis surpris de n'avoir pas pu trouver de cas similaire sur internet au fil de mes recherches (et ça fait deux semaines que je suis dessus).

Je vous remercie par avance pour les nouvelles pistes que vous m'apporterez et des éléments complémentaires pour m'orienter dans ma recherche/quête d'informations.

Voici les éléments en ma possession en pièce jointe, si cela peut vous aider également dans vos projets.

En vous souhaitant une agréable journée.

A bientôt.


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

Hors ligne

 

#2 Wed 05 June 2013 19:57

mat19
Juste Inscrit !
Date d'inscription: 28 Dec 2012
Messages: 4

Re: Mapserveur/Openlayers/JqueryMobile (UI) : changer l'ordre des couches

Bonjour à tous,

Vu le nombre de déplacement de ce mois, j'ai pu me pencher sur ce projet que de manière sporadique, c'est pour cela que je me permets de faire un petit "up".

Reprenons les étapes :

- Dissocier les layers dans le HTML.

Pas nécessaire. En reprenant le DOM de firebug, on peut extraire les li qui correspondent à chacune de couches.

- Ne garder que les overlays avec la fonction sortable de jquery.

Il faut donc indiquer que l'on souhaite les li après le titre des overlays (analyse chez moi), soit le 5eme "li" du HTML.

En cherchant sur la doc Jquery et en remaniant la "fonction", voilà un code qui marche :

//$( "#layerlist" ).sortable({items: "> li:gt(5)",axis:'y'});

Plus dur pour moi : faire en sorte que déplacer les objets des couches, ca ait un impact sur la carte. Une méthode que je trouve intéressante peut être utiliser. La synchronisation de deux listes html :

http://www.developpez.net/forums/d89857 … es-resolu/

Je sais pas si je suis clair. En gros, lorsque je mets à jour l'ordre des couches dans ma liste de l'interface, ca change l'ordre des couches dans la partie mappage, c'est à dire sur la carte. Mon "li" correspondant au département passe au dessus ou en dessous des communes. Voici le code permettant la synchronisation des couches.


$("#layerlist").sortable({
                items: "> li:gt(5)",axis:'y',
                update: function(event, ui) {
                    var nb = ui.item[0].id.slice(3);
                    var s1Array = [];
                    var s2Array = [];

                    $("li", this).each(function(i, item){
                        s1Array.push(item.id.slice(3));
                    });

                    $("#mappage").each(function(i, item){
                        s2Array.push(item.id.slice(3));
                    });

                    var s1Pos = $.inArray(nb, s1Array);
                    var s2Pos = $.inArray(nb, s2Array);

                    $("#mappage:eq(" + s2Pos + ")")
                        .remove()
                        .insertBefore("#mappage:eq(" + s1Pos + ")");
                   
                }
            });

Pour l'instant ca marche pas, du coup je vais essayer d'utiliser l'outil de sélection pour savoir quelle couche correspondant à quoi, une fonction remove peut être supprimer les couches dans firebug. Une fois fait, j'essaierai de la retranscrire dans ce code.

Je suis curieux et friand de toute suggestion.

En vous souhaitant une bonne soirée,

A bientôt.

Hors ligne

 

Pied de page des forums

Powered by FluxBB