Trước hết, hàng đầu tiên của csv của bạn phải là một danh sách tên cột được phân tách bằng dấu phẩy để sử dụng phương thức này. Nếu điều này là không thể, hãy thêm một nhận xét về điều này và tôi sẽ xem liệu tôi có thể tìm ra cách sử dụng d3.csv.parseRows
thay vì d3.csv.parse
. d3.csv.parse
được gọi bởi chức năng đánh giá trên .defer(function, url, assessor)
.
Tôi sẽ giả sử tập tin của bạn bây giờ trông như thế này:
danger.csv
iso,level
AFG,100
ALB,0
DZA,12
...
Sử dụng điều này, bạn có thể tạo băm tra cứu từ ISO3 đến mức nguy hiểm.
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)
}
Mã hướng dẫn
var dangerByISO3 = d3.map();
Trước tiên, bạn tạo một đối tượng d3.map () sẽ hoạt động như hàm băm chính của bạn và lưu trữ đối tượng này trong biến nguy hiểmByISO3.
queue()
Sử dụng hàng đợi để tải song song.
.defer(d3.json, "url to topo.json")
Tải topojson của bạn làm đối số đầu tiên được chuyển đến hàm await (sau lỗi). Lưu ý kiểu ở đây có chức năng xâu chuỗi trên queue()
, nhưng được liệt kê trên một dòng riêng biệt (không có dấu chấm phẩy kết thúc trên queue()
).
.defer(d3.csv, "url to danger.csv", function(d) {dangerByISO3.set(d.iso, +d.level);})
Hai điều đang xảy ra ở đây. Đầu tiên, bạn đang tải risk.csv làm đối số thứ hai của bạn được chuyển đến hàm đang chờ. Như bạn sẽ thấy bên dưới, đối số này không thực sự được sử dụng. Thay vào đó, một đối số đánh giá được cung cấp cho hàm tải, d3.csv. Người đánh giá này sẽ xử lý từng hàng của csv. Trong trường hợp này, chúng tôi gọi hàm set trên riskByISO3 để cho mỗi kết hợp của một iso
khóa, chúng tôi đặt level
giá trị là giá trị đi cùng với khóa đó. Các +d.level
ký hiệu sử dụng unary +
để ép buộc các giá trị của d.level thành một số.
.await(ready);
Khi cả hai nguồn dữ liệu được tải, chúng được truyền dưới dạng hai đối số riêng biệt cho hàm ready()
. Đối số đầu tiên cho cuộc gọi lại luôn là lỗi đầu tiên xảy ra. Nếu không có lỗi xảy ra, thì null sẽ được chuyển làm đối số đầu tiên. Đối số thứ hai là nguồn dữ liệu đầu tiên (kết quả của nhiệm vụ đầu tiên) và đối số thứ ba là nguồn dữ liệu thứ hai (kết quả của nhiệm vụ thứ hai).
function ready(error, world) {...}
Đây là chức năng gọi lại ready()
. Đầu tiên chúng ta lấy error
đối số là null nếu hai tác vụ tải hoàn thành thành công (bạn thực sự nên thêm ngôn ngữ để bắt và xử lý lỗi). Tiếp theo chúng ta lấy dữ liệu topojson làm đối tượng countries
. Dữ liệu này nên được xử lý trong phần thân của hàm với nội dung tương tự .data(topojson.feature(world,world.objects.countries).features)
. Vì ready()
không có đối số thứ ba, kết quả của nhiệm vụ thứ hai, csv của chúng tôi, chỉ đơn giản là bị loại bỏ. Chúng tôi chỉ sử dụng nó để xây dựng hàm băm chính và không cần nó sau đó.