block by mpmckenna8 4218a4e272b3c6635ae8

example loading multiple layers from cartodb in a leaflet map

Full Screen

index.html

<!DOCTYPE html>
<html>
  <head>
    <title>Leaflet example | CartoDB.js</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <link rel="shortcut icon" href="//cartodb.com/assets/favicon.ico" />
    <style>
      html, body, #map {
        height: 100%;
        padding: 0;
        margin: 0;
      }
    </style>
    <link rel="stylesheet" href="//libs.cartocdn.com/cartodb.js/v3/themes/css/cartodb.css" />
  </head>
  <body>
    <div id="map"></div>
    
    <!-- include cartodb.js library -->
    <script src="//libs.cartocdn.com/cartodb.js/v3/cartodb.js"></script>
    <script src="//d3js.org/queue.v1.min.js"></script>

    <script>
      function main() {
        var map = new L.Map('map', {
          zoomControl: false,
          center: [43, 0],
          zoom: 3
        });

        L.tileLayer('//tile.stamen.com/toner/{z}/{x}/{y}.png', {
          attribution: 'Stamen'
        }).addTo(map);

        var layers = [
          '//documentation.cartodb.com/api/v2/viz/2b13c956-e7c1-11e2-806b-5404a6a683d5/viz.json',
          '//documentation.cartodb.com/api/v2/viz/236085de-ea08-11e2-958c-5404a6a683d5/viz.json'
          // add here more layers
        ]

        var q = queue(3);

        layers.forEach(function(vizjson) {
          q.defer(function(vizjson, callback) {
            cartodb.createLayer(map, vizjson, function(layer) { callback(null, layer); })
          }, vizjson);
        })

        q.await(function() {
          var leafletLayers = Array.prototype.slice.call(arguments, 1);
          leafletLayers.forEach(function(lyr) {
            lyr.addTo(map);
          });
        })

      }

      // you could use $(window).load(main);
      window.onload = main;
    </script>
  </body>
</html>