Prima di tutto, la prima riga del tuo csv deve essere un elenco separato da virgole di nomi di colonne per utilizzare questo metodo. Se ciò non è possibile, aggiungi un commento su questo e vedrò se riesco a capire come usare d3.csv.parseRows
invece di d3.csv.parse
. d3.csv.parse
viene chiamato dalla funzione di valutazione su .defer(function, url, assessor)
.
Presumo che il tuo file ora assomigli a questo:
danger.csv
iso,level
AFG,100
ALB,0
DZA,12
...
Usando questo, puoi creare un hash di ricerca da ISO3 a livello di pericolo.
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)
}
Procedura dettagliata del codice
var dangerByISO3 = d3.map();
Per prima cosa crei un oggetto d3.map () che funzionerà come hash della tua chiave e lo memorizzi nella variabile dangerByISO3.
queue()
Usa la coda per il caricamento parallelo.
.defer(d3.json, "url to topo.json")
Carica il tuo topojson come primo argomento da passare alla funzione wait (dopo l'errore). Nota qui lo stile in cui questa è una funzione concatenata queue()
, ma elencata su una riga separata (non è presente il punto e virgola terminato queue()
).
.defer(d3.csv, "url to danger.csv", function(d) {dangerByISO3.set(d.iso, +d.level);})
Qui stanno accadendo due cose. Innanzitutto, stai caricando danger.csv come secondo argomento da passare alla funzione waitit. Come vedrai di seguito, questo argomento non è effettivamente utilizzato. Invece, viene fornito un argomento del valutatore alla funzione di caricamento, d3.csv. Questo valutatore elaborerà ogni riga del CSV. In questo caso, chiamiamo la funzione set su dangerByISO3 in modo che per ogni combinazione di una iso
chiave, impostiamo level
come valore da utilizzare con quella chiave. La +d.level
notazione usa unario +
per forzare il valore di d.level su un numero.
.await(ready);
Una volta caricate entrambe le origini dati, vengono passate come due argomenti separati alla funzione ready()
. Il primo argomento del callback è sempre il primo errore che si è verificato. Se non si è verificato alcun errore, il primo argomento verrà passato a null. Il secondo argomento è la prima origine dati (risultato della prima attività) e il terzo argomento è la seconda origine dati (risultato della seconda attività).
function ready(error, world) {...}
Questa è la funzione di richiamata ready()
. Innanzitutto prendiamo l' error
argomento che dovrebbe essere nullo se le due attività di caricamento sono state completate correttamente (dovresti effettivamente aggiungere la lingua per rilevare e gestire gli errori). Successivamente prendiamo i dati topojson come oggetto countries
. Questi dati dovrebbero essere elaborati nel corpo della funzione con qualcosa di simile .data(topojson.feature(world,world.objects.countries).features)
. Poiché ready()
non accetta un terzo argomento, il risultato del secondo compito, il nostro CSV, viene semplicemente scartato. L'abbiamo usato solo per creare l'hash chiave e non ne abbiamo avuto bisogno dopo.