我正在创建一个地图,其中我首先使用GeoJSON文件定义的路径定义状态轮廓,以及一些额外的信息,如州名。加载后,我想填充状态并使用一些按钮和复选框(年份,不同的数据子集)填充基于csv数据的工具提示。
我发现当我第二次在状态对象上调用.data()时,使用csv而不是json文件,路径会消失,因为它们只存在于json中。有没有办法我只能更新某些变量?有没有更好的方法将状态对象绑定到动态数据?
答案 0 :(得分:1)
我通常采用的方式以及代码在choropleth map example中设置的方式是单独加载这两个文件,然后在需要时加入有关功能ID的数据。如果按顺序加载文件,这是最简单的,如下所示:
// make a container
var counties = svg.append("svg:g")
.attr("id", "counties");
// load the data you're showing
d3.json("unemployment.json", function(data) {
// load the geo data (you could reverse the order here)
d3.json("us-counties.json", function(json) {
// make the map
counties.selectAll("path")
.data(json.features)
.enter().append("svg:path")
.attr("d", path);
// now join the data, maybe in a separate function
update(data)
});
});
在update()
函数中,您可以根据ID获取数据并将操作(颜色等)应用于地图:
update(data) {
// look at the loaded counties
counties.selectAll("path")
// update colors based on data
.attr('fill', function(d) {
// get the id from the joined GeoJSON
var countyId = d.id;
// get the data point. This assumes your data is an object; if your data is
// a CSV, you'll need to convert it to an object keyed to the id
var datum = data[countyId];
// now calculate your color
return myColorScale(datum);
});
}