En primer lugar, la primera fila de su csv debe ser una lista separada por comas de nombres de columna para usar este método. Si esto no es posible, agregue un comentario al respecto y veré si puedo averiguar cómo usarlo en d3.csv.parseRows
lugar de hacerlo d3.csv.parse
. d3.csv.parse
es llamado por la función de evaluador en .defer(function, url, assessor)
.
Voy a asumir que su archivo ahora se ve así:
danger.csv
iso,level
AFG,100
ALB,0
DZA,12
...
Con esto, puede crear un hash de búsqueda desde ISO3 hasta el nivel de peligro.
var dangerByISO3 = d3.map();
queue()
.defer(d3.json, "url to topo.json")
.defer(d3.csv, "url to danger.csv", function(d) {dangerByISO3.set(d.iso, +d.level);})
.await(ready);
function ready(error, world) {
//You now have world as your available topojson
//And you have dangerByISO3 as your danger level hash
//You can lookup a danger level by dangerByISO3.get(ISO3 code)
}
Tutorial de código
var dangerByISO3 = d3.map();
Primero crea un objeto d3.map () que funcionará como el hash de su clave y lo almacena en la variable dangerByISO3.
queue()
Utilice la cola para carga paralela.
.defer(d3.json, "url to topo.json")
Cargue su topojson como el primer argumento que se pasará a la función de espera (después del error). Tenga en cuenta el estilo aquí donde esta es una función encadenada queue()
, pero aparece en una línea separada (no hay punto y coma finalizado queue()
).
.defer(d3.csv, "url to danger.csv", function(d) {dangerByISO3.set(d.iso, +d.level);})
Dos cosas están sucediendo aquí. Primero, está cargando danger.csv como su segundo argumento para pasar a la función de espera. Como verá a continuación, este argumento no se usa realmente. En cambio, se proporciona un argumento evaluador para la función de carga, d3.csv. Este asesor procesará cada fila del csv. En este caso, llamamos a la función set en dangerByISO3 para que, para cada combinación de una iso
tecla, establezcamos level
el valor como el que va con esa tecla. La +d.level
notación usa unario +
para coaccionar el valor de d.level a un número.
.await(ready);
Una vez que se cargan ambas fuentes de datos, se pasan como dos argumentos separados a la función ready()
. El primer argumento para la devolución de llamada es siempre el primer error que ocurrió. Si no se produjo ningún error, se pasará nulo como primer argumento. El segundo argumento es la primera fuente de datos (resultado de la primera tarea), y el tercer argumento es la segunda fuente de datos (resultado de la segunda tarea).
function ready(error, world) {...}
Esta es la función de devolución de llamada ready()
. Primero tomamos el error
argumento que debería ser nulo si las dos tareas de carga se completan con éxito (en realidad, debe agregar un idioma para detectar y manejar los errores). A continuación tomamos los datos de topojson como el objeto countries
. Estos datos deben procesarse en el cuerpo de la función con algo como .data(topojson.feature(world,world.objects.countries).features)
. Como ready()
no toma un tercer argumento, el resultado de la segunda tarea, nuestro csv, simplemente se descarta. Solo lo usamos para construir el hash clave y no lo necesitamos después de eso.