9

Ajouter un sélecteur de couches (layer switcher) à polymaps

 3 years ago
source link: https://blog.mathieu-leplatre.info/ajouter-un-selecteur-de-couches-layer-switcher-a-polymaps-fr.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Ajouter un sélecteur de couches (layer switcher) à polymaps

Ajouter un sélecteur de couches (layer switcher) à polymaps

Wed 09 March 2011

Je fais partie de ceux qui sont persuadés que polymaps est tout à fait mature ! Certes, il ne fournit pas autant de fonctionnalités et de connecteurs qu'OpenLayers, mais il ne semble pas que ce soit son objectif ! Il est léger et personnalisable à souhait !

Pour le prouver, nous allons créer ici un sélecteur de couches pour polymaps.

Javascript n'est pas mon langage de prédilection, encore moins pour faire de la programmation orientée objets.

Voici ce que j'ai réussi à comprendre de l'héritage et la portée dans le modèle objet de polymaps :

(function(po) {
  po.classname = function(args) {
   var self = {},      // new class or inheritance
        member;         // member variable

    function privatemethod () {
        // [...]
    }

    self.classmethod = function (args) {
        // [...]
        return self;  // allows to chain method calls
    }

    return self;
  };
})(org.polymaps);

Pour faire ce sélecteur de couches, nous aurons besoin d'une classe disposant :

  • de variables membres qui stockent la liste de couches disponibles (layers) et la couche actuelle (current)
  • d'une méthode de classe qui bascule d'une couche à l'autre
self.switchto = function (name) {
    var l = layers[name];  // find layer by name
    if (l.map()) {
       l.visible(true);   // if already loaded, make it visible
    }
    else {
        map.add(l);        // else load it
    }
    if (current) current.visible(false);  // hide current
    current = l;
}
  • d'une méthode qui crée l'interface avec les radio buttons et qui les relie à la méthode précedente
self.container = function (elt) {
    var list = document.createElement('div');
    // [...]
    // For each layer, create a <input>
    for (name in layers) {
        var input = document.createElement('input');
        input.setAttribute('type', 'radio');
        input.setAttribute('value', name);
        // [...]
        // Link onChange event on radio
        input.onchange = function () {
            self.switchto(this.getAttribute('value'));
        };
        // [...]
        list.appendChild(input);
    }
    // [...]
    elt.appendChild(list);
    return self;
}

Maintenant il suffit de l'utiliser ! Voici un exemple simple avec deux couches :

// Create a normal map
map = po.mcmap()
        .container(document.getElementById("map").appendChild(po.svg("svg")))
        .add(po.interact());

// Define the layers
var layers = {
    "layer1" :
    po.image()
      .url(po.url("http://server1/{Z}/{X}/{Y}.png"))
      .id('l1'),

    "layer2" :
    po.image()
      .url(po.url("http://server2/{Z}/{X}/{Y}.png"))
      .id('l2'),
};

// Add the default one
map.add(layers["layer1"]);

// Create the switcher
po.switcher(map, layers, {title : 'Fond de carte'})
  .container(document.getElementById("layerswitcher"));

Et voilà ! Nous avons notre sélecteur de couches, avec un code html tout simple (div, input, label), facile à styler en CSS, contrairement au gros pavé généré par le *LayerSwitcher* d'OpenLayers.

polymaps-switcher.png

Pour accéder au code complet et l'améliorer : "Fork me on GitHub" !

Article original publié chez Makina Corpus

#polymaps, #tips, #javascript, #gis - Posted in the Dev category


© Copyright 2020 by Mathieu Leplatre. mnmlist Theme

Content licensed under the Creative Commons attribution-noncommercial-sharealike License.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK