【发布时间】:2017-08-10 06:23:20
【问题描述】:
我有一个 world-50m.json 文件的投影工作,但是当我用颜色填充它时,有几个国家在边缘被切断,从而在整个地图上创建水平填充部分/线。
这实际上在 d3-geo 示例投影上可见:https://github.com/d3/d3-geo/blob/master/test/data/world-50m.json
是否还有没有这些截止国家/地区的其他 JSON 文件?或者我可以从填充中省略特定的多边形?不太确定我如何找到每个国家/地区的问题。虽然大多数都很小,如果省略也不会错过,但一个主要的似乎是俄罗斯。
这是我的参考代码:
var w = 960,
h = 660,
active = d3.select(null);
var projection = d3.geoMercator()
.scale(150)
.translate([w/2, h/2])
.precision(.1);
var path = d3.geo.path()
.projection(projection);
var countries = svg.append("svg:g").attr("id", "countries");
d3.json("world-50m.json", function(error, us) {
mapFeatures = topojson.feature(us, us.objects.countries).features;
mapFeatures.type = "countries";
drawMap();
});
function drawMap() {
countries.selectAll("path")
.data(mapFeatures)
.enter().append("svg:path")
.attr("d", path)
.attr("class", "feature")
.attr("data-id", function(d) { return d.id; })
.style("fill", "blue")
.style("stroke", "white")
.style("stroke-width", ".2px");
};
任何帮助将不胜感激!
【问题讨论】:
-
是否可以在您的代码块中也包含您的
path和projection? -
您的问题让我找到了答案!我使用了错误的路径投影。应该使用
geoPath()而不是geo.path()请回答问题,以便我将其标记为正确:) -
@altocumulus 非常有趣的东西!我认为你是对的,问题是逆子午线切割不起作用。在这个特定的例子中,我似乎使用了来自 d3 v4 的投影调用和来自 d3 v3 的路径调用。因此,我的问题通过更改路径和投影格式以匹配正确版本的 d3 来解决,这反过来又导致支持逆子午线切割的 D3 地理投影系统重新开始工作。
标签: javascript json d3.js map-projections