<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <!-- nuestro mapa se dibujará en este contenedor --> <div class="map"></div> <!-- cargamos las dos librerías que necesitamos--> <script src="https://d3js.org/d3.v4.min.js"></script> <script src="https://d3js.org/topojson.v1.min.js"></script> <script> // añadimos un elemento canvas a nuestro contenedor var canvas = d3.select(".map").append("canvas"); // parametros necesarios poder referenciar al conenedor context = canvas.node().getContext("2d"), // función de d3 para poder crear mapas path = d3.geoPath().projection(null).context(context); // variables sobre el tamaño de nuestro mapa var width = 960, height = 500; // las añadimos al canvas canvas .attr("width", width) .attr("height", height) .style("width", width + "px") .style("height", height + "px"); context.lineJoin = 'round'; context.lineCap = 'round'; // con este método cargamos el json (!) // d3 tiene métodos específicos como d3.csv, de.json, d3.tsv // Con d3.queue podemos cargar varios archivos (csv's, mapas, jsons...) // una vez cargado llamará a la función ready d3.queue() .defer(d3.json, "./map.json") .await(ready); // esta función recibe como parametro nuestro mapa // para aclararnos la hemos llamado 'map' (podríamos llamarla como quisieramos) function ready(error, map) { if (error) throw error; // variable que almacena todos los polígonos del mapa con topojson var penales = topojson.feature(map, map.objects.penales).features //vamos a utilizar un bucle for para iterar por todas las unidades del mapa, un bucle por cada municipio // queremos conocer exactamente el valo de la tasa de paro en cada iteración for (var i = 0; i < penales.length; i++) { context.fillStyle = "black" context.beginPath() // pasamos al método de d3 (path()) arriba definido la unidad espacial correspondiente path(penales[i]); // la coloreamos context.fill() } // estos pasos son similares para el dibujo // de los contornos de los municipios // esta vez no iteramos sino que los dibujamos todos de una vez // color del contorno context.strokeStyle = "white" // una línea discontínua context.setLineDash([1,3]) // grosor de línea context.lineWidth = .9; // pasamos a la función TODOS los polígonos path(topojson.feature(map, map.objects.penales)); // dibujamos el contorno context.stroke() // reseteamos la línea discontínua context.setLineDash([0]) // a partir de este momento cualquier línea será continua // variable que almacena todos los entidades del mapa con topojson var entidades = topojson.feature(map, map.objects.entidades).features for (var i = 0; i < entidades.length; i++) { context.beginPath() // pasamos al método de d3 (path()) arriba definido la unidad espacial correspondiente xy = entidades[i].geometry path(entidades[i],path.pointRadius(1)) // la coloreamos context.fillStyle = "green" context.fill() } }; </script> </body> </html>