D3.js解析错误-正交贴图投影的旋转
我有一个正交投影的世界地图,在D3和使用TopoJSON。我通过调用此代码为每个加载数据的国家着色。 地球仪不停地旋转 我的问题是,在旋转过程中,我收到错误消息: 错误 >>错误:解析d3.v3.min.js中的d=”“>>时出现问题:1 对于每个:D3.js解析错误-正交贴图投影的旋转,d3.js,map-projections,topojson,parsing-error,D3.js,Map Projections,Topojson,Parsing Error,我有一个正交投影的世界地图,在D3和使用TopoJSON。我通过调用此代码为每个加载数据的国家着色。 地球仪不停地旋转 我的问题是,在旋转过程中,我收到错误消息: 错误 >>错误:解析d3.v3.min.js中的d=”“>>时出现问题:1 对于每个: .attr("d", path); 首先,我认为这取决于topojson脚本,因为有不同的版本。但事实并非如此 javascript代码: 初始化球体/投影的属性: svg.append("defs").append("path") .d
.attr("d", path);
首先,我认为这取决于topojson脚本,因为有不同的版本。但事实并非如此
javascript代码:
初始化球体/投影的属性:
svg.append("defs").append("path")
.datum({type: "Sphere"})
.attr("id", "sphere")
.attr("d", path);
...
svg.append("path")
.datum(graticule)
.attr("class", "graticule")
.attr("d", path);
从json和tsv读取数据,并附加土地和国家:
queue()
.defer(d3.json, "world-110m.json")
.defer(d3.tsv, "world-country-names.tsv")
.await(ready);
function ready(error, world, names) {
var countries = topojson.feature(world, world.objects.countries).features,;
i = -1,
n = countries.length;
countries.forEach(function(d) {
var tryit = names.filter(function(n) { return d.id == n.id; })[0];
if (typeof tryit === "undefined"){
d.name = "Undefined";
console.log(d);
} else {
d.name = tryit.name;
}
});
var country = svg.selectAll(".country").data(countries);
country
.enter().insert("path", ".graticule")
.attr("id", function(d){
return "c" + d.id;
})
.attr("d", path);
svg.insert("path", ".graticule")
.datum(topojson.mesh(world, world.objects.countries, function(a, b) { return a !== b; }))
.attr("class", "boundary")
.attr("d", path);
}
地球自转:
var velocity = .03,
then = Date.now();
d3.timer(function() {
var angle = velocity * (Date.now() - then);
projection.rotate([angle,0,0]);
svg.selectAll("path")
.attr("d", path.projection(projection));
});
这是一个已知的WebKit错误。我也遇到了同样的问题,它似乎不会以任何方式影响svg的渲染
超出clipAngle的任何内容都被指定为d=“”,我认为这应该是一个有效的空值,但标记为错误 用一大块代码很难得到好的答案。你能把范围缩小到抛出错误的部分吗?哪条路有问题?哦,对不起。现在,我删除了一些我确信没有错误的行,并将代码划分为多个部分。也许,现在,它的可读性更强了:/Ok,那么所有对
.attr(“d”,path)
的调用都失败了?这表明您没有绑定所需的数据-请尝试在函数中包装path
,以便可以检查输入…您可以通过暂时从投影中删除剪贴画来测试这一点。