topojson.object в топойсон V1

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

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);
});

2 ответа

Решение

Ты можешь использовать 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/

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

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

Другие вопросы по тегам