저는 topjson으로 D3 맵을로드하고지도에 색상을 지정하는 데 사용할 데이터가있는 별도의 CSV 파일에 연결하려고합니다. 매번지도를 다시 그려 넣지 않고 여러 레이어간에 전환 할 수 있습니다. 어떻게해야하는지에 대한 단서를 찾기 위해 보드를 샅샅이 살펴 보았지만 알아낼 수는 없습니다. 아무도 도움을 줄 수 있습니까?D3을 사용하여 다중 레이어 만들기
CSV 및 JSON 데이터를 별도로 유지하여 CSV를 동적으로 편집하려는 경우를 대비해주세요. 한 번에 각 나라에 관련 클래스를 추가하거나 사용자가 세 버튼 사이를 전환 할 때 클래스를 추가 및 제거하고 싶습니다. 어느 것이 든 나를 위해 일한다, 나는 단지 그것을하는 방법을 이해하는 것처럼 보이지 않는다.
var width = 945
var height = 550
var svg = d3.select('#content').append('svg').attr('width', width).attr('height', height);
var projection = d3.geo.mercator().scale(175);
var path = d3.geo.path().projection(projection);
var all_data = {};
var tierById = d3.map();
var quantize = d3.scale.quantize()
.domain([0, 1])
.range(d3.range(2).map(function(i) { return "tier" + i; }));
queue()
.defer(d3.json, "data/world.json")
.defer(d3.csv, "data/wod.csv")
.await(setUpChoropleth);
function setUpChoropleth(error, json) {
svg.append("g")
.attr("class", "countries")
.selectAll("path")
.data(topojson.feature(json, json.objects.countries).features)
.enter().append("svg:path")
.attr("d", path);
}
function drawTierI() {
queue()
.defer(d3.json, "data/world.json")
.defer(d3.csv, "data/wod.csv", function(d) { tierById.set(d.id, +d.tier_i); })
.await(ready);
function ready(error, json) {
svg.append("g")
.attr("class", "countries")
.selectAll("path")
.data(topojson.feature(json, json.objects.countries).features)
.enter().append("path")
.attr("class", function(d) { return quantize(tierById.get(d.id)); })
.attr("d", path);
}
}
function drawTierII() {
queue()
.defer(d3.json, "data/world.json")
.defer(d3.csv, "data/wod.csv", function(d) { tierById.set(d.id, +d.tier_ii); })
.await(ready);
function ready(error, json) {
svg.append("g")
.attr("class", "countries")
.selectAll("path")
.data(topojson.feature(json, json.objects.countries).features)
.enter().append("path")
.attr("class", function(d) { return quantize(tierById.get(d.id)); })
.attr("d", path);
}
}
function drawTierIIPlus() {
queue()
.defer(d3.json, "data/world.json")
.defer(d3.csv, "data/wod.csv", function(d) { tierById.set(d.id, +d.tier_ii_plus); })
.await(ready);
function ready(error, json) {
svg.append("g")
.attr("class", "countries")
.selectAll("path")
.data(topojson.feature(json, json.objects.countries).features)
.enter().append("path")
.attr("class", function(d) { return quantize(tierById.get(d.id)); })
.attr("d", path);
}
}
$('button#tier_i').click(function (e) {
$("svg").empty();
drawTierI();
});
$('button#tier_ii').click(function (e) {
$("svg").empty();
drawTierII();
});
$('button#tier_ii_plus').click(function (e) {
$("svg").empty();
drawTierIIPlus();
});
여기 내 코드의 jfiddle입니다 : http://jsfiddle.net/2H7Pm/ 나는 그러나, 거기에 JSON 일부 구문 문제가있는 것 같다.
예지도 그러나 내 GitHub의에서 작동합니까 : 도움을 http://newamericafoundation.github.io/worldofdrones/
감사합니다!
감사! 그건 의미가 있습니다. 레이어를 전환 할 때 발생하는 지연을 수정하는 방법에 대한 조언이 필요하십니까? 클릭 할 때마다 CSV 및 JSON을로드하지 않아도되지만 CSV에서 여러 열을 호출 할 수있는 유일한 방법 인 것 같습니다. –
아, 나는 그것을 알아 채지 못했습니다. 답변을 업데이트합니다. –
감사합니다. 설명대로 완벽하게 작동합니다! 확실히 D3와 JS에 대한 새로운 것을 배웠습니다. –