Я внес некоторые изменения в ваш код и опубликовал его в этом списке . При локальном тестировании карта отображается как на картинке ниже. При таком размере надписи работают не очень хорошо, но если вы измените размер карты и / или покажете меньше надписей, все будет в порядке.
Некоторыеинформация об изменениях. Всякий раз, когда вы хотите нарисовать что-то поверх карты с помощью d3-geomap, оно должно быть включено в функцию postUpdate
. Таким образом, карта уже отрисована, а ее элементы SVG, геоданные и объект пути доступны через созданный вами объект карты. Нет необходимости загружать файл Topojson во второй раз. Функция, переданная в postUpdate
, выглядит следующим образом:
function drawLabels() {
map.svg.append("g").attr('class', 'zoom')
.selectAll("text")
.data(topojson.feature(map.geo, map.geo.objects.units).features)
.enter().append("text")
.attr("class", "place-label")
.attr("x", function(d) { return map.path.centroid(d)[0]; })
.attr("y", function(d) { return map.path.centroid(d)[1]; })
.attr("text-anchor","middle")
.text(function(d) { return d.properties.name; })
.on('click', map.clicked.bind(map));
}
На этой странице документации показаны доступные атрибуты карты и функции доступа. Надеюсь, это поможет.