-
Par Papasti le 13 Octobre 2014 à 20:05
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....
votre commentaire -
Par Papasti le 11 Octobre 2014 à 09:43
Une carte pour localiser des lieux, des événements ou des informations géopolitiques par exemple, ça peut être sacrément sympa. Alors il y a la solution d'aller créer sa carte sur Google maps puis de la placer sur son blog à l'aide du code html fourni. Mais il y a plus sympa: La définir directement au sein du blog. C'est ce que permet Gmaps.js
1. Exemples
Une carte classique positionnée selon des coordonnée à l'échelle choisie et qui réagit au clic de souris Code correspondant à la carte ci-dessus 2. Mise en place
Comme toujours, il va falloir charger des scripts. Le premier est récupéré directement chez Google. Pour le second, téléchargez le ici: https://raw.githubusercontent.com/HPNeo/gmaps/master/gmaps.js puis enregistrez le parmi les fichiers de votre blog sous le nom gmaps.js
C'est quasiment fini.
Dans l'article ou la page concernés, créez une balise <div> en lui donnant l'id "map" puis placez le code correspondant à la carte que vous avez créée.
Cela vous donne:
<script src="http://maps.google.com/maps/api/js?sensor=true"></script> <script src="url du fichier gmaps.js"></script> <div id="map"> </div> <script> onJSFilesLoaded.push(function(){ map = new GMaps({ div: '#map', zoom: 5, lat:47.497035, lng:2.483923, click: function(e) { alert('Vous avez cliqué sur la carte'); } }); }); </script>
3. Informations complémentaires
Voici quelques lien si vous souhaitez aller un peu plus loin.
votre commentaire
Suivre le flux RSS des articles de cette rubrique
Suivre le flux RSS des commentaires de cette rubrique