ก่อนอื่นแถวแรกของ csv ของคุณต้องเป็นรายการชื่อคอลัมน์ที่คั่นด้วยเครื่องหมายจุลภาคเพื่อใช้วิธีนี้ ถ้าเรื่องนี้เป็นไปไม่ได้เพิ่มความคิดเห็นเกี่ยวกับเรื่องนี้และเราจะดูว่าฉันสามารถทำงานออกวิธีการใช้งานแทนd3.csv.parseRows
ถูกเรียกโดยฟังก์ชั่นในการประเมินd3.csv.parse
d3.csv.parse
.defer(function, url, assessor)
ฉันจะสมมติว่าไฟล์ของคุณมีลักษณะดังนี้:
danger.csv
iso,level
AFG,100
ALB,0
DZA,12
...
เมื่อใช้สิ่งนี้คุณสามารถสร้างแฮชการค้นหาจาก ISO3 ไปจนถึงระดับอันตราย
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)
}
คำแนะนำแบบรหัส
var dangerByISO3 = d3.map();
ขั้นแรกให้คุณสร้างวัตถุ d3.map () ซึ่งจะทำหน้าที่เป็นแฮชคีย์ของคุณและเก็บสิ่งนี้ไว้ในตัวแปร dangerByISO3
queue()
ใช้คิวสำหรับการโหลดแบบขนาน
.defer(d3.json, "url to topo.json")
โหลด topojson ของคุณเป็นอาร์กิวเมนต์แรกที่จะถูกส่งผ่านไปยังฟังก์ชั่นคอย (หลังจากเกิดข้อผิดพลาด) โปรดสังเกตสไตล์ที่นี่ซึ่งนี่เป็นฟังก์ชั่นที่ถูกล่ามโซ่queue()
แต่อยู่ในบรรทัดที่แยกต่างหาก (ไม่มีเซมิโคลอนสิ้นสุดในqueue()
)
.defer(d3.csv, "url to danger.csv", function(d) {dangerByISO3.set(d.iso, +d.level);})
มีสองสิ่งเกิดขึ้นที่นี่ ก่อนอื่นคุณกำลังโหลด danger.csv เป็นอาร์กิวเมนต์ที่สองของคุณที่จะถูกส่งผ่านไปยังฟังก์ชันรอ ดังที่คุณจะเห็นด้านล่างอาร์กิวเมนต์นี้ไม่ได้ใช้จริง อาร์กิวเมนต์ตัวประเมินจะถูกกำหนดให้กับฟังก์ชันการโหลด d3.csv ผู้ประเมินนี้จะประมวลผลแต่ละแถวของ csv ในกรณีนี้เราเรียกใช้ฟังก์ชั่นการตั้งค่าเกี่ยวกับ dangerByISO3 เพื่อให้การรวมกันของiso
คีย์แต่ละครั้งเราตั้งค่าlevel
เป็นค่าที่จะไปกับคีย์นั้น +d.level
สัญกรณ์ใช้เอก+
บีบบังคับค่าของ d.level ไปจำนวน
.await(ready);
ready()
เมื่อทั้งสองแหล่งข้อมูลจะถูกโหลดพวกเขาจะส่งเป็นสองอาร์กิวเมนต์ที่แยกต่างหากเพื่อฟังก์ชั่น อาร์กิวเมนต์แรกของการติดต่อกลับเป็นข้อผิดพลาดแรกที่เกิดขึ้นเสมอ หากไม่มีข้อผิดพลาดเกิดขึ้น null จะถูกส่งผ่านเป็นอาร์กิวเมนต์แรก อาร์กิวเมนต์ที่สองคือแหล่งข้อมูลแรก (ผลลัพธ์ของงานแรก) และอาร์กิวเมนต์ที่สามคือแหล่งข้อมูลที่สอง (ผลลัพธ์ของงานที่สอง)
function ready(error, world) {...}
ready()
นี่คือฟังก์ชันการเรียกกลับ อันดับแรกเรารับerror
อาร์กิวเมนต์ที่ควรเป็นโมฆะหากงานการโหลดสองรายการเสร็จสมบูรณ์ (คุณควรเพิ่มภาษาเพื่อตรวจจับและจัดการข้อผิดพลาด) ต่อไปเราจะนำข้อมูล topojson countries
เป็นวัตถุ .data(topojson.feature(world,world.objects.countries).features)
ข้อมูลนี้ควรจะดำเนินการในร่างกายของฟังก์ชั่นที่มีบางสิ่งบางอย่างเช่น เนื่องจากready()
ไม่ใช้อาร์กิวเมนต์ที่สามผลลัพธ์ของภารกิจที่สองคือ csv ของเราจะถูกยกเลิก เราใช้มันเพื่อสร้างแฮชคีย์และไม่ต้องการมันหลังจากนั้น