• DataMaps.js

    1. Présentation

    Peut-être avez vous voyagé et vous souhaitez faire apparaître sur une carte toutes les destinations visitées. Ou alors vous êtes enseignant et souhaitez illustrer votre blog avec une carte mondiale. Quelque soit votre motivation, je pense que Datamaps.js va vous simplifier la vie en vous permettant l'affichage d'une carte interactive.

     
     

     

    En partant d'une carte mondiale, on va pouvoir afficher une partie qui nous intéresse, comme ci-dessus. Cela dit, sur le site officiel ne sont disponibles que la carte des Usa et la carte mondiale. Pour obtenir un pays en particulier, il faudra appliquer des zooms et des rotations à la carte du monde. Mais rassurez vous, c'est très simple.

    Il est néanmoins possible de créer sa propre carte avec des outils externes. J'en parlerai en fin d'article.

    2. Mise en place

    Cette fois-ci, il y a 3 scripts à charger dont 2 correspondant à d3.js, datamaps étant construit sur celui-ci.

    Commencez par enregistrer parmi les fichiers de votre blog datamaps.world.min.js et récupérez son url.

    Le code à placer pour charger les 3 scripts est le suivant:

    <script src="http://d3js.org/d3.v3.min.js"></script>
    <script src="http://d3js.org/topojson.v1.min.js"></script>
    <script src="url de datamaps.world.min.js"></script>

    Il vous faut ensuite placer une div qui va servir à contenir la carte (on l'appelle dans notre cas container) et enfin un script qui va la construire. Voyez l'exemple ci dessous

    <div id="container" style="position: relative; width: 640px; height: 300px;"> </div>
    <script>
    onJSFilesLoaded.push(function(){
    var map = new Datamap({element: document.getElementById('container')});
    });
    </script>

    Et voilà, il n'en faut pas plus pour obtenir la carte du monde.

    3. Options

    Changer la couleur par défaut

    var map = new Datamap({
            element: document.getElementById('container'),
            fills: {
                defaultFill: 'rgba(23,48,210,0.9)' 
            }
        });

    Supprimer les pop-ups ou effets sur le hover

    var map = new Datamap({
            element: document.getElementById('container'),
            geographyConfig: {
                highlightOnHover: false,
                popupOnHover: false
            }
        });

    Colorer les pays lors de la création de carte

    Vous pouvez définir différentes couleurs en leur donnant un label, puis appliquer le label correspondant à chaque pays comme ceci:

    var map = new Datamap({
            element: document.getElementById('container'),
            fills: {
                HIGH: '#afafaf',
                LOW: '#123456',
                MEDIUM: 'blue',
                UNKNOWN: 'rgb(0,0,0)',
                defaultFill: 'green'
            },
            data: {
                IRL: {
                    fillKey: 'LOW'
                },
                USA: {
                    fillKey: 'MEDIUM'
                },
    FRA: {
                    fillKey: 'HIGH'
                }
            }
        });
    
    });

    Il est aussi possible de modifier la couleur d'un pays plus tard en lançant un script contenant:

    map.updateChoropleth({
       USA: {fillKey: 'LOW'},
       CAN: '#0fa0fa'
    });

    Ajouter des cercles pour localiser des évènements

     
    var bombMap = new Datamap({
        element: document.getElementById('containerx'),
        scope: 'world',
        geographyConfig: {
            popupOnHover: false,
            highlightOnHover: false
        },
        fills: {
            'USA': '#1f77b4',
            'RUS': '#9467bd',
            'PRK': '#ff7f0e',
            'PRC': '#2ca02c',
            'IND': '#e377c2',
            'GBR': '#8c564b',
            'FRA': '#d62728',
            'PAK': '#7f7f7f',
            defaultFill: '#EDDC4E'
        },
        data: {
            'RUS': {fillKey: 'RUS'},
            'PRK': {fillKey: 'PRK'},
            'PRC': {fillKey: 'PRC'},
            'IND': {fillKey: 'IND'},
            'GBR': {fillKey: 'GBR'},
            'FRA': {fillKey: 'FRA'},
            'PAK': {fillKey: 'PAK'},
            'USA': {fillKey: 'USA'}
        }
    });
    
         var bombs = [{
            name: 'Joe 4',
            radius: 25,
            yeild: 400,
            country: 'USSR',
            fillKey: 'RUS',
            significance: 'First fusion weapon test by the USSR (not "staged")',
            date: '1953-08-12',
            latitude: 50.07,
            longitude: 78.43
          },{
            name: 'RDS-37',
            radius: 40,
            yeild: 1600,
            country: 'USSR',
            fillKey: 'RUS',
            significance: 'First "staged" thermonuclear weapon test by the USSR (deployable)',
            date: '1955-11-22',
            latitude: 50.07,
            longitude: 78.43
    
          },{
            name: 'Tsar Bomba',
            radius: 75,
            yeild: 50000,
            country: 'USSR',
            fillKey: 'RUS',
            significance: 'Largest thermonuclear weapon ever tested—scaled down from its initial 100 Mt design by 50%',
            date: '1961-10-31',
            latitude: 73.482,
            longitude: 54.5854
          }
        ];
    //draw bubbles for bombs
    bombMap.bubbles(bombs, {
        popupTemplate: function (geo, data) { 
                return ['<div class="hoverinfo">' +  data.name,
                '<br/>Payload: ' +  data.yeild + ' kilotons',
                '<br/>Country: ' +  data.country + '',
                '<br/>Date: ' +  data.date + '',
                '</div>'].join('');
        }
    });

    Centrer, tourner et changer l'echelle de la carte

    C'est ce que j'ai utilisé pour obtenir la carte de France en haut de l'article en modifiant les valeurs de center, rotate et scale.

    var map = new Datamap({
      scope: 'world',
      element: document.getElementById('container1'),
      setProjection: function(element) {
        var projection = d3.geo.equirectangular()
          .center([19, -3])
          .rotate([4.4, 0])
          .scale(400)
          .translate([element.offsetWidth / 2, element.offsetHeight / 2]);
        var path = d3.geo.path()
          .projection(projection);
    
        return {path: path, projection: projection};
      },

    4. Créer ses propres cartes

    A venir très bientôt....


  • Commentaires

    Aucun commentaire pour le moment

    Suivre le flux RSS des commentaires

    Vous devez être connecté pour commenter