Po pierwsze, pierwszy wiersz pliku csv musi być oddzieloną przecinkami listą nazw kolumn, aby można było użyć tej metody. Jeśli nie jest to możliwe, dodaj komentarz na ten temat, a zobaczę, czy mogę wymyślić, jak go używać d3.csv.parseRows
zamiast d3.csv.parse
. d3.csv.parse
jest wywoływana przez funkcję asesora na .defer(function, url, assessor)
.
Zakładam, że twój plik wygląda teraz tak:
danger.csv
iso,level
AFG,100
ALB,0
DZA,12
...
Korzystając z tego, możesz utworzyć skrót kontrolny od ISO3 do poziomu niebezpieczeństwa.
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)
}
Przewodnik po kodzie
var dangerByISO3 = d3.map();
Najpierw utworzysz obiekt d3.map (), który będzie działał jako skrót skrótu, i zapiszesz go w zmiennej niebezpieczeństwoByISO3.
queue()
Użyj kolejki do równoległego ładowania.
.defer(d3.json, "url to topo.json")
Załaduj swój topojson jako pierwszy argument, który zostanie przekazany do funkcji oczekiwania (po błędzie). Zwróć uwagę na styl, w którym jest to funkcja łańcuchowa queue()
, ale wymieniona w osobnej linii (nie ma kończącego średnika queue()
).
.defer(d3.csv, "url to danger.csv", function(d) {dangerByISO3.set(d.iso, +d.level);})
Działają się tutaj dwie rzeczy. Po pierwsze, ładujesz niebezpieczeństwo.csv jako drugi argument, który zostanie przekazany do funkcji oczekiwania. Jak zobaczysz poniżej, ten argument nie jest faktycznie używany. Zamiast tego do funkcji ładującej d3.csv dostarczany jest argument oceniający. Ten asesor przetworzy każdy wiersz pliku csv. W takim przypadku wywołujemy funkcję set w niebezpieczeństwieBISISO3, aby dla każdej kombinacji iso
klucza ustawiać wartość level
jako wartość odpowiadającą temu kluczowi. +d.level
Notacja wykorzystuje jednoskładnikowa +
zmusić wartość d.level do liczby.
.await(ready);
Po załadowaniu obu źródeł danych są one przekazywane do funkcji jako dwa osobne argumenty ready()
. Pierwszym argumentem wywołania zwrotnego jest zawsze pierwszy występujący błąd. Jeśli nie wystąpił błąd, jako pierwszy argument zostanie przekazany null. Drugi argument to pierwsze źródło danych (wynik pierwszego zadania), a trzeci argument to drugie źródło danych (wynik drugiego zadania).
function ready(error, world) {...}
To jest funkcja oddzwaniania ready()
. Najpierw bierzemy error
argument, który powinien być zerowy, jeśli dwa zadania ładowania zakończą się powodzeniem (powinieneś dodać język, aby wychwytywać i obsługiwać błędy). Następnie bierzemy dane topojson jako obiekt countries
. Dane te powinny być przetwarzane w treści funkcji za pomocą czegoś podobnego .data(topojson.feature(world,world.objects.countries).features)
. Ponieważ ready()
nie bierze trzeciego argumentu, wynik drugiego zadania, nasze csv, jest po prostu odrzucany. Użyliśmy go tylko do zbudowania kluczowego skrótu i nie potrzebowaliśmy go później.