Tout d'abord, la première ligne de votre csv doit être une liste de noms de colonnes séparés par des virgules pour utiliser cette méthode. Si ce n'est pas possible, ajoutez un commentaire à ce sujet et je verrai si je peux trouver comment utiliser à la d3.csv.parseRows
place de d3.csv.parse
. d3.csv.parse
est appelé par la fonction d'évaluateur sur .defer(function, url, assessor)
.
Je vais supposer que votre fichier ressemble maintenant à ceci:
danger.csv
iso,level
AFG,100
ALB,0
DZA,12
...
En utilisant cela, vous pouvez créer un hachage de recherche de ISO3 au niveau de danger.
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)
}
Procédure pas à pas de code
var dangerByISO3 = d3.map();
Vous créez d'abord un objet d3.map () qui fonctionnera comme votre hachage de clé et le stockez dans la variable dangerByISO3.
queue()
Utilisez la file d'attente pour le chargement parallèle.
.defer(d3.json, "url to topo.json")
Chargez votre topojson comme premier argument à passer à la fonction wait (après erreur). Notez le style ici où il s'agit d'une fonction chaînée activée queue()
, mais répertoriée sur une ligne distincte (il n'y a pas de point-virgule de fin activé queue()
).
.defer(d3.csv, "url to danger.csv", function(d) {dangerByISO3.set(d.iso, +d.level);})
Il se passe deux choses ici. Tout d'abord, vous chargez danger.csv comme deuxième argument à passer à la fonction wait. Comme vous le verrez ci-dessous, cet argument n'est pas réellement utilisé. Au lieu de cela, un argument assesseur est fourni à la fonction de chargement, d3.csv. Cet évaluateur traitera chaque ligne du csv. Dans ce cas, nous appelons la fonction set sur dangerByISO3 de sorte que pour chaque combinaison d'une iso
clé, nous définissons level
la valeur comme aller avec cette clé. La +d.level
notation utilise unaire +
pour contraindre la valeur de d.level à un nombre.
.await(ready);
Une fois les deux sources de données chargées, elles sont transmises en tant que deux arguments distincts à la fonction ready()
. Le premier argument du rappel est toujours la première erreur qui s'est produite. Si aucune erreur ne s'est produite, alors null sera transmis comme premier argument. Le deuxième argument est la première source de données (résultat de la première tâche) et le troisième argument est la deuxième source de données (résultat de la deuxième tâche).
function ready(error, world) {...}
Il s'agit de la fonction de rappel ready()
. Nous prenons d'abord l' error
argument qui devrait être nul si les deux tâches de chargement se sont terminées avec succès (vous devez en fait ajouter un langage pour détecter et gérer les erreurs). Ensuite, nous prenons les données topojson comme objet countries
. Ces données doivent être traitées dans le corps de la fonction avec quelque chose comme .data(topojson.feature(world,world.objects.countries).features)
. Puisque ready()
ne prend pas un troisième argument, le résultat de la deuxième tâche, notre csv, est simplement rejeté. Nous l'avons utilisé uniquement pour créer le hachage de clé et n'en avons plus eu besoin par la suite.