Я нуб с d3.js. Я использую данные topoJSON для рендеринга карт, и до сих пор все работало отлично. Теперь я хочу наложить некоторые данные, такие как текст или круги, поверх каждой страны/региона, и я упираюсь в стену. У меня есть код, похожий на этот:
var countries = g.append("g")
.attr("id", "countries")
.selectAll("path")
.data(topojson.feature(collection, collection.objects.countries).features)
.enter().append("path")
.attr("d", path)
.style("fill", colorize)
.attr("class", "country")
.on("click", clicked)
который правильно отображает мою карту. Чтобы наложить на него несколько кругов, я делаю следующее:
countries
.append("circle")
.attr("r", function(d, i, j) {
return 10; // for now
})
// getCentroid below is a function that returns the
// center of the poligon/path bounding box
.attr("cy", function(d, i, j) { return getCentroid(countries[0][j])[0]})
.attr("cx", function(d, i, j) { return getCentroid(countries[0][j])[1]})
.style("fill", "red")
Это довольно громоздко (особенно способ доступа к массиву стран), но ему удается добавить кружок для каждого пути, представляющего страну. Проблема в том, что круг существует в разметке SVG, но вообще не отображается в документе. Я, очевидно, делаю что-то не так, но я не понимаю, что это такое.
circle
элементы не могут быть дочерними элементамиpath
элементов. Опубликует ответ с более подробной информацией. - person Lars Kotthoff   schedule 13.12.2013