सबसे पहले, इस विधि का उपयोग करने के लिए आपके सीएसवी की पहली पंक्ति कॉलम नामों की अल्पविराम से अलग की गई सूची होनी चाहिए। यदि यह संभव नहीं है, तो इस बारे में एक टिप्पणी जोड़ें और मैं देखूंगा कि क्या मैं बाहर काम कर सकता हूं 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 () ऑब्जेक्ट बनाते हैं जो आपके मुख्य हैश के रूप में कार्य करेगा, और इसे चर खतरे में स्टोर करेगा।
queue()
समानांतर लोडिंग के लिए कतार का उपयोग करें।
.defer(d3.json, "url to topo.json")
प्रतीक्षित फ़ंक्शन (त्रुटि के बाद) में पारित होने वाले पहले तर्क के रूप में अपने टॉपोजोन को लोड करें। यहां शैली पर ध्यान दें जहां यह एक जंजीर फ़ंक्शन है queue()
, लेकिन एक अलग लाइन पर सूचीबद्ध है (पर कोई समाप्ति अर्धविराम नहीं है queue()
)।
.defer(d3.csv, "url to danger.csv", function(d) {dangerByISO3.set(d.iso, +d.level);})
यहां दो चीजें हो रही हैं। सबसे पहले, आप खतरे को लोड कर रहे हैं। अपने दूसरे तर्क को प्रतीक्षा समारोह में पारित करने के लिए। जैसा कि आप नीचे देखेंगे, यह तर्क वास्तव में उपयोग नहीं किया गया है। इसके बजाय, लोडिंग फ़ंक्शन, d3.csv को एक आकलनकर्ता तर्क प्रदान किया जाता है। यह मूल्यांकनकर्ता csv की प्रत्येक पंक्ति को संसाधित करेगा। इस मामले में, हम खतरे पर सेट फ़ंक्शन को कॉल करते हैं BISISO3 ताकि एक iso
कुंजी के प्रत्येक संयोजन के लिए , हम level
उस कुंजी के साथ जाने के लिए मान सेट करें । +d.level
अंकन एकल का उपयोग करता है +
एक नंबर करने के d.level का मूल्य मजबूर करने के लिए।
.await(ready);
एक बार जब दोनों डेटा स्रोत लोड हो जाते हैं, तो उन्हें फ़ंक्शन के लिए दो अलग-अलग तर्क दिए जाते हैं ready()
। कॉलबैक के लिए पहला तर्क हमेशा होने वाली पहली त्रुटि है। यदि कोई त्रुटि नहीं हुई, तो अशक्त को पहले तर्क के रूप में पारित किया जाएगा। दूसरा तर्क पहला डेटा स्रोत (पहले कार्य का परिणाम) है, और तीसरा तर्क दूसरा डेटा स्रोत (दूसरे कार्य का परिणाम) है।
function ready(error, world) {...}
यह कॉलबैक फ़ंक्शन है ready()
। पहले हम यह error
तर्क लेते हैं कि यदि दो लोडिंग कार्यों को सफलतापूर्वक पूरा किया गया है, तो आपको अशक्त होना चाहिए (आपको त्रुटियों को पकड़ने और संभालने के लिए वास्तव में भाषा को जोड़ना चाहिए)। इसके बाद हम टॉपजोन डेटा को ऑब्जेक्ट के रूप में लेते हैं countries
। इस डेटा को फ़ंक्शन के शरीर में कुछ इस तरह से संसाधित किया जाना चाहिए .data(topojson.feature(world,world.objects.countries).features)
। चूंकि ready()
एक तीसरा तर्क नहीं है, दूसरे कार्य का परिणाम, हमारे सीएसवी, को केवल त्याग दिया गया है। हमने इसे केवल हैश बनाने के लिए इस्तेमाल किया था और उसके बाद इसकी आवश्यकता नहीं थी।