먼저,이 방법을 사용하려면 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을 첫 번째 인수로로드하여 await 함수에 전달하십시오 (오류 후). 이 함수가에 묶인 함수 queue()
이지만 별도의 줄에 나열 되는 스타일에주의하십시오 (마침표 세미콜론은 없습니다 queue()
).
.defer(d3.csv, "url to danger.csv", function(d) {dangerByISO3.set(d.iso, +d.level);})
여기서 두 가지 일이 일어나고 있습니다. 먼저, await 함수에 전달할 두 번째 인수로 danger.csv를로드하고 있습니다. 아래에서 볼 수 있듯이이 인수는 실제로 사용되지 않습니다. 대신로드 함수 d3.csv에 평가자 인수가 제공됩니다. 이 평가자는 CSV의 각 행을 처리합니다. 이 경우, 우리는 dangerByISO3에서 set 함수를 호출하여 iso
키 의 각 조합에 대해 level
해당 키와 함께 사용할 값을 설정합니다 . 이 +d.level
표기법은 단항 +
을 사용 하여 d.level의 값을 숫자로 강제합니다.
.await(ready);
두 데이터 소스가 모두로드되면 함수에 별도의 두 인수로 전달됩니다 ready()
. 콜백에 대한 첫 번째 인수는 항상 발생한 첫 번째 오류입니다. 오류가 발생하지 않으면 첫 번째 인수로 null이 전달됩니다. 두 번째 인수는 첫 번째 데이터 소스 (첫 번째 작업의 결과)이고 세 번째 인수는 두 번째 데이터 소스 (두 번째 작업의 결과)입니다.
function ready(error, world) {...}
이것은 콜백 함수 ready()
입니다. 먼저 error
두 개의로드 작업이 성공적으로 완료되면 널 (null)이어야한다는 인수를 취합니다 (실제로 오류를 포착하고 처리 할 언어를 추가해야 함). 다음으로 topojson 데이터를 객체로 사용합니다 countries
. 이 데이터는 다음과 같이 함수 본문에서 처리해야합니다 .data(topojson.feature(world,world.objects.countries).features)
. ready()
세 번째 인수를 취하지 않기 때문에 두 번째 작업 인 csv의 결과는 단순히 폐기됩니다. 우리는 키 해시를 빌드하는 데만 사용했으며 그 후에는 필요하지 않았습니다.