Pertama, baris pertama csv Anda harus berupa daftar nama kolom yang dipisahkan koma untuk menggunakan metode ini. Jika hal ini tidak mungkin, menambahkan komentar tentang hal ini dan saya akan melihat apakah saya bisa mengetahui bagaimana menggunakan d3.csv.parseRows
bukan d3.csv.parse
. d3.csv.parse
dipanggil oleh fungsi penilai pada .defer(function, url, assessor)
.
Saya akan menganggap file Anda sekarang terlihat seperti ini:
danger.csv
iso,level
AFG,100
ALB,0
DZA,12
...
Dengan ini, Anda dapat membuat hash pencarian dari ISO3 ke tingkat bahaya.
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)
}
Panduan kode
var dangerByISO3 = d3.map();
Pertama Anda membuat objek d3.map () yang akan berfungsi sebagai hash kunci Anda, dan menyimpannya dalam variabel hazardByISO3.
queue()
Gunakan antrian untuk memuat paralel.
.defer(d3.json, "url to topo.json")
Memuat topojson Anda sebagai argumen pertama yang diteruskan ke fungsi menunggu (setelah kesalahan). Perhatikan gaya di mana fungsi ini dirantai queue()
, tetapi terdaftar pada baris terpisah (tidak ada tanda titik kominasi pada queue()
).
.defer(d3.csv, "url to danger.csv", function(d) {dangerByISO3.set(d.iso, +d.level);})
Dua hal terjadi di sini. Pertama, Anda memuat hazard.csv sebagai argumen kedua untuk diteruskan ke fungsi menunggu. Seperti yang akan Anda lihat di bawah, argumen ini sebenarnya tidak digunakan. Sebagai gantinya, argumen penilai disediakan untuk fungsi pemuatan, d3.csv. Penilai ini akan memproses setiap baris csv. Dalam hal ini, kami memanggil fungsi set pada hazardByISO3 sehingga untuk setiap kombinasi iso
kunci, kami menetapkan level
sebagai nilai untuk pergi dengan kunci itu. The +d.level
notasi menggunakan unary +
untuk memaksa nilai d.level ke angka.
.await(ready);
Setelah kedua sumber data dimuat, mereka dilewatkan sebagai dua argumen terpisah untuk fungsi ready()
. Argumen pertama ke callback selalu merupakan kesalahan pertama yang terjadi. Jika tidak ada kesalahan terjadi, maka nol akan diteruskan sebagai argumen pertama. Argumen kedua adalah sumber data pertama (hasil dari tugas pertama), dan argumen ketiga adalah sumber data kedua (hasil dari tugas kedua).
function ready(error, world) {...}
Ini adalah fungsi panggilan balik ready()
. Pertama-tama kita mengambil error
argumen yang seharusnya nol jika dua tugas pemuatan selesai dengan sukses (Anda sebenarnya harus menambahkan bahasa untuk menangkap dan menangani kesalahan). Selanjutnya kita mengambil data topojson sebagai objek countries
. Data ini harus diproses dalam tubuh fungsi dengan sesuatu seperti .data(topojson.feature(world,world.objects.countries).features)
. Karena ready()
tidak mengambil argumen ketiga, hasil dari tugas kedua, csv kami, dibuang begitu saja. Kami hanya menggunakannya untuk membangun hash kunci dan tidak membutuhkannya setelah itu.