Topojson.object в topojson V1

Мне очень нравится играть с topojson, но похоже, что topojson.object - это undefined в V1 topojson, где он поддерживался в V0. Может кто-нибудь объяснить, как я могу обойти эту проблему? Я пытаюсь выделить отдельные элементы пути для каждого многоугольника во входном файле, отформатированном как topojson. код:

d3.json("maTopo.json", function(error, ma) {
    svg.selectAll(".subunit")
      .data(topojson.object(ma, ma.objects.ma).geometries)
    .enter().append("path")
      .attr("class", function(d) { return "subunit " + d.id; })
      .attr("d", path);
});

Ответ 1

Вместо этого вы можете использовать topojson.feature.

d3.json("maTopo.json", function(error, ma) {
  svg.selectAll(".subunit")
      .data(topojson.feature(ma, ma.objects.ma).features)
    .enter().append("path")
      .attr("class", function(d) { return "subunit " + d.id; })
      .attr("d", path);
});

Подробный пример можно найти здесь: http://bost.ocks.org/mike/map/

Ответ 2

Релиз v1 заменил topojson.object с помощью topojson.feature; поведение аналогично, но новый метод topojson.feature возвращает Feature или FeatureCollection (а не Geometry или GeometryCollection) для лучшей совместимости с GeoJSON.

@mbostock слова из этой темы. Так измените одну строку в коде: .data(topojson.feature(ma, ma.objects.ma).features). И я думаю, вы также должны восстановить свой файл TopoJSON с помощью v1 из GeoJSON.